ایمیزون سیج میکر کا استعمال کرتے ہوئے آرکیسٹریٹ رے پر مبنی مشین لرننگ ورک فلو | ایمیزون ویب سروسز

ایمیزون سیج میکر کا استعمال کرتے ہوئے آرکیسٹریٹ رے پر مبنی مشین لرننگ ورک فلو | ایمیزون ویب سروسز

مشین لرننگ (ML) تیزی سے پیچیدہ ہوتی جا رہی ہے کیونکہ صارفین زیادہ سے زیادہ مشکل مسائل کو حل کرنے کی کوشش کرتے ہیں۔ یہ پیچیدگی اکثر تقسیم شدہ ایم ایل کی ضرورت کا باعث بنتی ہے، جہاں ایک ماڈل کو تربیت دینے کے لیے متعدد مشینیں استعمال کی جاتی ہیں۔ اگرچہ یہ متعدد نوڈس میں کاموں کو متوازی کرنے کے قابل بناتا ہے، جس سے تربیتی اوقات میں اضافہ، اسکیل ایبلٹی میں اضافہ اور کارکردگی بہتر ہوتی ہے، لیکن تقسیم شدہ ہارڈویئر کو مؤثر طریقے سے استعمال کرنے میں اہم چیلنجز موجود ہیں۔ ڈیٹا سائنسدانوں کو ڈیٹا کی تقسیم، لوڈ بیلنسنگ، فالٹ ٹولرنس، اور اسکیل ایبلٹی جیسے چیلنجز سے نمٹنا ہوتا ہے۔ ML انجینئرز کو متوازی، شیڈولنگ، فالٹس، اور دستی طور پر دوبارہ کوشش کرنی چاہیے، پیچیدہ انفراسٹرکچر کوڈ کی ضرورت ہوتی ہے۔

اس پوسٹ میں، ہم استعمال کرنے کے فوائد پر تبادلہ خیال کرتے ہیں رے اور ایمیزون سیج میکر تقسیم شدہ ML کے لیے، اور ایک قابل توسیع ML ورک فلو کی تعمیر اور تعیناتی کے لیے ان فریم ورکس کو استعمال کرنے کے بارے میں مرحلہ وار گائیڈ فراہم کریں۔

رے، ایک اوپن سورس ڈسٹری بیوٹڈ کمپیوٹنگ فریم ورک، ایم ایل ماڈلز کی تقسیم شدہ تربیت اور سرونگ کے لیے ایک لچکدار فریم ورک فراہم کرتا ہے۔ یہ عام ایم ایل کاموں جیسے ڈیٹا پری پروسیسنگ، ڈسٹری بیوٹڈ ٹریننگ، ہائپر پیرامیٹر ٹیوننگ، ریانفورسمنٹ لرننگ، اور ماڈل سرونگ کے لیے سادہ، توسیع پذیر لائبریریوں کے ذریعے نچلے درجے کے تقسیم شدہ نظام کی تفصیلات کا خلاصہ کرتا ہے۔

سیج میکر ایم ایل ماڈلز کی تعمیر، تربیت اور تعیناتی کے لیے ایک مکمل طور پر منظم سروس ہے۔ رے بغیر کسی رکاوٹ کے SageMaker کی خصوصیات کے ساتھ ضم ہو جاتا ہے تاکہ پیچیدہ ML ورک بوجھ کی تعمیر اور تعیناتی کی جا سکے جو کہ موثر اور قابل اعتماد دونوں ہیں۔ رے اور سیج میکر کا امتزاج توسیع پذیر ML ورک فلو کے لیے آخر سے آخر تک صلاحیتیں فراہم کرتا ہے، اور اس میں درج ذیل نمایاں خصوصیات ہیں:

  • رے میں تقسیم شدہ اداکار اور متوازی تعمیرات تقسیم شدہ ایپلی کیشنز کو تیار کرنا آسان بناتے ہیں۔
  • رے اے آئی رن ٹائم (اے آئی آر) ترقی سے پیداوار کی طرف جانے کے رگڑ کو کم کرتا ہے۔ Ray اور AIR کے ساتھ، ایک ہی Python کوڈ لیپ ٹاپ سے بڑے کلسٹر تک بغیر کسی رکاوٹ کے پیمانے کر سکتا ہے۔
  • سیج میکر کا منظم انفراسٹرکچر اور پروسیسنگ جابز، ٹریننگ جابز، اور ہائپر پیرامیٹر ٹیوننگ جابز جیسی خصوصیات تقسیم شدہ کمپیوٹنگ کے لیے نیچے رے لائبریریوں کا استعمال کر سکتی ہیں۔
  • ایمیزون سیج میکر کے تجربات تیزی سے تکرار کرنے اور ٹرائلز کا ٹریک رکھنے کی اجازت دیتا ہے۔
  • ایمیزون سیج میکر فیچر اسٹور ماڈل ٹریننگ کے لیے ML خصوصیات کو ذخیرہ کرنے، بازیافت کرنے اور شیئر کرنے کے لیے ایک قابل توسیع ذخیرہ فراہم کرتا ہے۔
  • تربیت یافتہ ماڈلز کو اسٹور، ورژن، اور ٹریک کیا جا سکتا ہے۔ ایمیزون سیج میکر ماڈل رجسٹری گورننس اور انتظام کے لیے۔
  • ایمیزون سیج میکر پائپ لائنز ڈیٹا کی تیاری اور تربیت سے لے کر خودکار ورک فلوز کے طور پر ماڈل کی تعیناتی کے لیے اینڈ ٹو اینڈ ایم ایل لائف سائیکل کو ترتیب دینے کی اجازت دیتا ہے۔

حل جائزہ

یہ پوسٹ رے اور سیج میکر کو ایک ساتھ استعمال کرنے کے فوائد پر مرکوز ہے۔ ہم نے ایک اینڈ ٹو اینڈ رے پر مبنی ML ورک فلو ترتیب دیا، SageMaker Pipelines کا استعمال کرتے ہوئے ترتیب دیا گیا۔ ورک فلو میں رے ایکٹرز کا استعمال کرتے ہوئے فیچر اسٹور میں ڈیٹا کا متوازی ادخال، رے ڈیٹا کے ساتھ ڈیٹا پری پروسیسنگ، ٹریننگ ماڈلز اور رے ٹرین اور ہائپر پیرامیٹر آپٹیمائزیشن (HPO) ٹیوننگ جابز کا استعمال کرتے ہوئے پیمانے پر ہائپر پیرامیٹر ٹیوننگ، اور آخر میں ماڈل کی تشخیص اور ماڈل کو رجسٹر کرنا شامل ہے۔ ماڈل رجسٹری.

اپنے ڈیٹا کے لیے، ہم استعمال کرتے ہیں۔ ایک مصنوعی ہاؤسنگ ڈیٹاسیٹ جو آٹھ خصوصیات پر مشتمل ہے (YEAR_BUILT, SQUARE_FEET, NUM_BEDROOM, NUM_BATHROOMS, LOT_ACRES, GARAGE_SPACES, FRONT_PORCH، اور DECK) اور ہمارا ماڈل پیش گوئی کرے گا۔ PRICE گھر کا۔

ML ورک فلو میں ہر مرحلہ مجرد مراحل میں ٹوٹا ہوا ہے، اس کی اپنی اسکرپٹ کے ساتھ جو ان پٹ اور آؤٹ پٹ پیرامیٹرز لیتی ہے۔ اگلے حصے میں، ہم ہر قدم سے کلیدی کوڈ کے ٹکڑوں کو نمایاں کرتے ہیں۔ مکمل کوڈ پر پایا جا سکتا ہے aws-samples-for-ray GitHub ذخیرہ.

شرائط

SageMaker Python SDK استعمال کرنے اور اس پوسٹ سے وابستہ کوڈ کو چلانے کے لیے، آپ کو درج ذیل شرائط کی ضرورت ہے:

سیج میکر فیچر اسٹور میں ڈیٹا داخل کریں۔

ایم ایل ورک فلو میں پہلا قدم سورس ڈیٹا فائل کو پڑھنا ہے۔ ایمیزون سادہ اسٹوریج سروس (Amazon S3) CSV فارمیٹ میں اور اسے SageMaker فیچر اسٹور میں داخل کریں۔ SageMaker فیچر اسٹور ایک مقصد سے بنایا ہوا ذخیرہ ہے جو ٹیموں کے لیے ML خصوصیات کو تخلیق، اشتراک اور نظم کرنا آسان بناتا ہے۔ یہ خصوصیت کی دریافت، دوبارہ استعمال، اور اشتراک کو آسان بناتا ہے، جس سے تیز تر ترقی، کسٹمر ٹیموں میں تعاون میں اضافہ، اور لاگت میں کمی واقع ہوتی ہے۔

فیچر اسٹور میں فیچرز داخل کرنے میں درج ذیل اقدامات ہوتے ہیں:

  1. فیچر گروپ کی وضاحت کریں اور فیچر اسٹور میں فیچر گروپ بنائیں۔
  2. ڈیٹا کی ہر قطار کے لیے ایونٹ کا وقت اور ریکارڈ ID شامل کرکے فیچر اسٹور کے لیے سورس ڈیٹا تیار کریں۔
  3. Boto3 SDK کا استعمال کرکے فیچر گروپ میں تیار کردہ ڈیٹا کو داخل کریں۔

اس حصے میں، ہم صرف مرحلہ 3 کو نمایاں کرتے ہیں، کیونکہ یہ وہ حصہ ہے جس میں رے کا استعمال کرتے ہوئے ادخال کے کام کی متوازی پروسیسنگ شامل ہے۔ آپ اس عمل کے مکمل کوڈ کا جائزہ لے سکتے ہیں۔ GitHub repo.

۔ ingest_features طریقہ ایک کلاس کے اندر بیان کیا جاتا ہے جسے کہا جاتا ہے۔ Featurestore. نوٹ کریں کہ Featurestore کلاس کو سجایا گیا ہے۔ @ray.remote. اس سے ظاہر ہوتا ہے کہ اس طبقے کی ایک مثال رے ایکٹر ہے، رے کے اندر ایک ریاستی اور ہم آہنگ کمپیوٹیشنل یونٹ۔ یہ ایک پروگرامنگ ماڈل ہے جو آپ کو تقسیم شدہ اشیاء بنانے کی اجازت دیتا ہے جو اندرونی حالت کو برقرار رکھتی ہے اور رے کلسٹر میں مختلف نوڈس پر چلنے والے متعدد کاموں کے ذریعے بیک وقت رسائی حاصل کی جا سکتی ہے۔ اداکار متغیر حالت کو منظم کرنے اور ان کو سمیٹنے کا ایک طریقہ فراہم کرتے ہیں، جو انہیں تقسیم شدہ ترتیب میں پیچیدہ، ریاستی ایپلی کیشنز بنانے کے لیے قیمتی بناتے ہیں۔ آپ اداکاروں میں بھی وسائل کی ضروریات کی وضاحت کر سکتے ہیں۔ اس صورت میں، کی ہر ایک مثال FeatureStore کلاس کو 0.5 CPUs کی ضرورت ہوگی۔ درج ذیل کوڈ دیکھیں:

@ray.remote(num_cpus=0.5)
class Featurestore: def ingest_features(self,feature_group_name, df, region): """ Ingest features to Feature Store Group Args: feature_group_name (str): Feature Group Name data_path (str): Path to the train/validation/test data in CSV format. """ ...

آپ اداکار کے ساتھ کال کرکے بات چیت کرسکتے ہیں۔ remote آپریٹر درج ذیل کوڈ میں، اداکاروں کی مطلوبہ تعداد کو اسکرپٹ میں ان پٹ دلیل کے طور پر منتقل کیا جاتا ہے۔ اس کے بعد اعداد و شمار کو اداکاروں کی تعداد کی بنیاد پر تقسیم کیا جاتا ہے اور اسے فیچر اسٹور میں داخل کرنے کے لیے دور دراز کے متوازی عمل میں منتقل کیا جاتا ہے۔ آپ کال کر سکتے ہیں get ریموٹ کمپیوٹیشن مکمل ہونے اور نتیجہ دستیاب ہونے تک موجودہ کام کے عمل کو روکنے کے لیے آبجیکٹ ریف پر۔ جب نتیجہ دستیاب ہو، ray.get نتیجہ واپس کر دے گا، اور موجودہ کام پر عمل درآمد جاری رہے گا۔

import modin.pandas as pd
import ray df = pd.read_csv(s3_path)
data = prepare_df_for_feature_store(df)
# Split into partitions
partitions = [ray.put(part) for part in np.array_split(data, num_actors)]
# Start actors and assign partitions in a loop
actors = [Featurestore.remote() for _ in range(args.num_actors)]
results = [] for actor, partition in zip(actors, input_partitions): results.append(actor.ingest_features.remote( args.feature_group_name, partition, args.region ) ) ray.get(results)

تربیت، توثیق اور جانچ کے لیے ڈیٹا تیار کریں۔

اس مرحلے میں، ہم مشین لرننگ کی تیاری میں اپنے ڈیٹاسیٹ کو مؤثر طریقے سے تقسیم کرنے، تبدیل کرنے اور اسکیل کرنے کے لیے رے ڈیٹاسیٹ کا استعمال کرتے ہیں۔ رے ڈیٹاسیٹ تقسیم شدہ ڈیٹا کو رے میں لوڈ کرنے کا ایک معیاری طریقہ فراہم کرتا ہے، مختلف اسٹوریج سسٹمز اور فائل فارمیٹس کو سپورٹ کرتا ہے۔ اس میں عام ML ڈیٹا پری پروسیسنگ آپریشنز جیسے متوازی تبدیلیاں، شفلنگ، گروپ بندی، اور جمع کرنے کے لیے APIs ہیں۔ رے ڈیٹاسیٹ اسٹیٹفول سیٹ اپ اور GPU ایکسلریشن کی ضرورت والے آپریشنز کو بھی سنبھالتا ہے۔ یہ دیگر ڈیٹا پروسیسنگ لائبریریوں جیسے Spark، Pandas، NumPy، اور مزید کے ساتھ ساتھ ML فریم ورک جیسے TensorFlow اور PyTorch کے ساتھ آسانی سے ضم ہوجاتا ہے۔ یہ رے کے اوپری حصے پر اینڈ ٹو اینڈ ڈیٹا پائپ لائنز اور ایم ایل ورک فلو بنانے کی اجازت دیتا ہے۔ مقصد پریکٹیشنرز اور محققین کے لیے تقسیم شدہ ڈیٹا پروسیسنگ اور ML کو آسان بنانا ہے۔

آئیے اسکرپٹ کے ان حصوں کو دیکھتے ہیں جو اس ڈیٹا پری پروسیسنگ کو انجام دیتے ہیں۔ ہم فیچر اسٹور سے ڈیٹا لوڈ کرکے شروع کرتے ہیں:

def load_dataset(feature_group_name, region): """ Loads the data as a ray dataset from the offline featurestore S3 location Args: feature_group_name (str): name of the feature group Returns: ds (ray.data.dataset): Ray dataset the contains the requested dat from the feature store """ session = sagemaker.Session(boto3.Session(region_name=region)) fs_group = FeatureGroup( name=feature_group_name, sagemaker_session=session ) fs_data_loc = fs_group.describe().get("OfflineStoreConfig").get("S3StorageConfig").get("ResolvedOutputS3Uri") # Drop columns added by the feature store # Since these are not related to the ML problem at hand cols_to_drop = ["record_id", "event_time","write_time", "api_invocation_time", "is_deleted", "year", "month", "day", "hour"] ds = ray.data.read_parquet(fs_data_loc) ds = ds.drop_columns(cols_to_drop) print(f"{fs_data_loc} count is {ds.count()}") return ds

اس کے بعد ہم سے دستیاب اعلی سطحی تجریدوں کا استعمال کرتے ہوئے ڈیٹا کو تقسیم اور اسکیل کرتے ہیں۔ ray.data لائبریری:

def split_dataset(dataset, train_size, val_size, test_size, random_state=None): """ Split dataset into train, validation and test samples Args: dataset (ray.data.Dataset): input data train_size (float): ratio of data to use as training dataset val_size (float): ratio of data to use as validation dataset test_size (float): ratio of data to use as test dataset random_state (int): Pass an int for reproducible output across multiple function calls. Returns: train_set (ray.data.Dataset): train dataset val_set (ray.data.Dataset): validation dataset test_set (ray.data.Dataset): test dataset """ # Shuffle this dataset with a fixed random seed. shuffled_ds = dataset.random_shuffle(seed=random_state) # Split the data into train, validation and test datasets train_set, val_set, test_set = shuffled_ds.split_proportionately([train_size, val_size]) return train_set, val_set, test_set def scale_dataset(train_set, val_set, test_set, target_col): """ Fit StandardScaler to train_set and apply it to val_set and test_set Args: train_set (ray.data.Dataset): train dataset val_set (ray.data.Dataset): validation dataset test_set (ray.data.Dataset): test dataset target_col (str): target col Returns: train_transformed (ray.data.Dataset): train data scaled val_transformed (ray.data.Dataset): val data scaled test_transformed (ray.data.Dataset): test data scaled """ tranform_cols = dataset.columns() # Remove the target columns from being scaled tranform_cols.remove(target_col) # set up a standard scaler standard_scaler = StandardScaler(tranform_cols) # fit scaler to training dataset print("Fitting scaling to training data and transforming dataset...") train_set_transformed = standard_scaler.fit_transform(train_set) # apply scaler to validation and test datasets print("Transforming validation and test datasets...") val_set_transformed = standard_scaler.transform(val_set) test_set_transformed = standard_scaler.transform(test_set) return train_set_transformed, val_set_transformed, test_set_transformed

پروسیس شدہ ٹرین، توثیق، اور ٹیسٹ ڈیٹاسیٹس کو Amazon S3 میں محفوظ کیا جاتا ہے اور ان پٹ پیرامیٹرز کے طور پر بعد کے مراحل میں منتقل کیا جائے گا۔

ماڈل ٹریننگ اور ہائپر پیرامیٹر کی اصلاح کریں۔

ہمارے ڈیٹا کے پہلے سے پروسیس شدہ اور ماڈلنگ کے لیے تیار ہونے کے ساتھ، یہ وقت ہے کہ کچھ ML ماڈلز کو تربیت دیں اور ان کے ہائپر پیرامیٹر کو بہتر بنائیں تاکہ پیشن گوئی کی کارکردگی کو زیادہ سے زیادہ بنایا جا سکے۔ ہم استعمال کرتے ہیں XGBoost-Ray، رے پر بنایا گیا XGBoost کے لیے ایک تقسیم شدہ بیک اینڈ جو ایک سے زیادہ نوڈس اور GPUs کا استعمال کرکے XGBoost ماڈلز کو بڑے ڈیٹا سیٹس پر تربیت دینے کے قابل بناتا ہے۔ یہ XGBoost کی ٹرین کے لیے سادہ ڈراپ ان تبدیلیاں فراہم کرتا ہے اور ہڈ کے نیچے تقسیم شدہ ڈیٹا مینجمنٹ اور تربیت کی پیچیدگیوں کو سنبھالتے ہوئے APIs کی پیش گوئی کرتا ہے۔

ایک سے زیادہ نوڈس پر تربیت کی تقسیم کو فعال کرنے کے لیے، ہم ایک مددگار کلاس کا استعمال کرتے ہیں۔ رے ہیلپر. جیسا کہ درج ذیل کوڈ میں دکھایا گیا ہے، ہم تربیتی کام کے وسائل کی ترتیب کا استعمال کرتے ہیں اور پہلے میزبان کو بطور ہیڈ نوڈ منتخب کرتے ہیں:

class RayHelper(): def __init__(self, ray_port:str="9339", redis_pass:str="redis_password"): .... self.resource_config = self.get_resource_config() self.head_host = self.resource_config["hosts"][0] self.n_hosts = len(self.resource_config["hosts"])

ہم میزبان کی معلومات کا استعمال یہ فیصلہ کرنے کے لیے کر سکتے ہیں کہ تربیتی کام کے ہر ایک مثال پر رے کو کیسے شروع کیا جائے:

def start_ray(self): head_ip = self._get_ip_from_host() # If the current host is the host choosen as the head node # run `ray start` with specifying the --head flag making this is the head node if self.resource_config["current_host"] == self.head_host: output = subprocess.run(['ray', 'start', '--head', '-vvv', '--port', self.ray_port, '--redis-password', self.redis_pass, '--include-dashboard', 'false'], stdout=subprocess.PIPE) print(output.stdout.decode("utf-8")) ray.init(address="auto", include_dashboard=False) self._wait_for_workers() print("All workers present and accounted for") print(ray.cluster_resources()) else: # If the current host is not the head node, # run `ray start` with specifying ip address as the head_host as the head node time.sleep(10) output = subprocess.run(['ray', 'start', f"--address={head_ip}:{self.ray_port}", '--redis-password', self.redis_pass, "--block"], stdout=subprocess.PIPE) print(output.stdout.decode("utf-8")) sys.exit(0)

جب تربیتی کام شروع کیا جاتا ہے، تو رے کلسٹر کو کال کرکے شروع کیا جاسکتا ہے۔ start_ray() کی ایک مثال پر طریقہ RayHelper:

if __name__ == '__main__': ray_helper = RayHelper() ray_helper.start_ray() args = read_parameters() sess = sagemaker.Session(boto3.Session(region_name=args.region))

پھر ہم تربیت کے لیے XGBoost-Ray سے XGBoost ٹرینر استعمال کرتے ہیں:

def train_xgboost(ds_train, ds_val, params, num_workers, target_col = "price") -> Result: """ Creates a XGBoost trainer, train it, and return the result. Args: ds_train (ray.data.dataset): Training dataset ds_val (ray.data.dataset): Validation dataset params (dict): Hyperparameters num_workers (int): number of workers to distribute the training across target_col (str): target column Returns: result (ray.air.result.Result): Result of the training job """ train_set = RayDMatrix(ds_train, 'PRICE') val_set = RayDMatrix(ds_val, 'PRICE') evals_result = {} trainer = train( params=params, dtrain=train_set, evals_result=evals_result, evals=[(val_set, "validation")], verbose_eval=False, num_boost_round=100, ray_params=RayParams(num_actors=num_workers, cpus_per_actor=1), ) output_path=os.path.join(args.model_dir, 'model.xgb') trainer.save_model(output_path) valMAE = evals_result["validation"]["mae"][-1] valRMSE = evals_result["validation"]["rmse"][-1] print('[3] #011validation-mae:{}'.format(valMAE)) print('[4] #011validation-rmse:{}'.format(valRMSE)) local_testing = False try: load_run(sagemaker_session=sess) except: local_testing = True if not local_testing: # Track experiment if using SageMaker Training with load_run(sagemaker_session=sess) as run: run.log_metric('validation-mae', valMAE) run.log_metric('validation-rmse', valRMSE)

نوٹ کریں کہ انسٹیٹیوٹ کرتے وقت trainer، ہم گزرتے ہیں۔ RayParams، جو فی اداکاروں کی تعداد اور CPUs کی تعداد لیتا ہے۔ XGBoost-Ray اس معلومات کو رے کلسٹر سے منسلک تمام نوڈس میں تقسیم کرنے کے لیے استعمال کرتا ہے۔

اب ہم SageMaker Python SDK پر مبنی ایک XGBoost تخمینہ کرنے والا آبجیکٹ بناتے ہیں اور اسے HPO جاب کے لیے استعمال کرتے ہیں۔

سیج میکر پائپ لائنز کا استعمال کرتے ہوئے پچھلے مراحل کو ترتیب دیں۔

اینڈ ٹو اینڈ اسکیل ایبل اور دوبارہ قابل استعمال ML ورک فلو بنانے کے لیے، ہمیں پائپ لائن میں پچھلے مراحل کو آرکیسٹریٹ کرنے کے لیے CI/CD ٹول استعمال کرنے کی ضرورت ہے۔ سیج میکر پائپ لائنز کا سیج میکر، سیج میکر پائتھون ایس ڈی کے، اور سیج میکر اسٹوڈیو کے ساتھ براہ راست انضمام ہے۔ یہ انضمام آپ کو استعمال میں آسان Python SDK کے ساتھ ML ورک فلو بنانے کی اجازت دیتا ہے، اور پھر SageMaker اسٹوڈیو کا استعمال کرتے ہوئے اپنے ورک فلو کا تصور اور نظم کر سکتا ہے۔ آپ پائپ لائن پر عمل درآمد کے اندر اپنے ڈیٹا کی تاریخ کو بھی ٹریک کرسکتے ہیں اور کیشنگ کے لیے اقدامات نامزد کرسکتے ہیں۔

SageMaker Pipelines ایک ڈائریکٹڈ Acyclic گراف (DAG) بناتی ہے جس میں ML ورک فلو بنانے کے لیے درکار اقدامات شامل ہیں۔ ہر پائپ لائن ایک دوسرے سے جڑے ہوئے مراحل کا ایک سلسلہ ہے جو قدموں کے درمیان ڈیٹا کے انحصار کے ذریعے ترتیب دیا جاتا ہے، اور اسے پیرامیٹرائز کیا جا سکتا ہے، جس سے آپ پائپ لائن کے ہر رن کے لیے ان پٹ متغیرات کو پیرامیٹر کے طور پر فراہم کر سکتے ہیں۔ سیج میکر پائپ لائنز میں چار قسم کے پائپ لائن پیرامیٹرز ہیں: ParameterString, ParameterInteger, ParameterFloat، اور ParameterBoolean. اس سیکشن میں، ہم کچھ ان پٹ متغیرات کو پیرامیٹرائز کرتے ہیں اور سٹیپ کیشنگ کنفیگریشن سیٹ اپ کرتے ہیں:

processing_instance_count = ParameterInteger( name='ProcessingInstanceCount', default_value=1
)
feature_group_name = ParameterString( name='FeatureGroupName', default_value='fs-ray-synthetic-housing-data'
)
bucket_prefix = ParameterString( name='Bucket_Prefix', default_value='aws-ray-mlops-workshop/feature-store'
)
rmse_threshold = ParameterFloat(name="RMSEThreshold", default_value=15000.0) train_size = ParameterString( name='TrainSize', default_value="0.6"
)
val_size = ParameterString( name='ValidationSize', default_value="0.2"
)
test_size = ParameterString( name='TestSize', default_value="0.2"
) cache_config = CacheConfig(enable_caching=True, expire_after="PT12H")

ہم پروسیسنگ کے دو مراحل کی وضاحت کرتے ہیں: ایک SageMaker فیچر اسٹور کے ادخال کے لیے، دوسرا ڈیٹا کی تیاری کے لیے۔ یہ پہلے بیان کردہ پچھلے اقدامات سے بہت ملتا جلتا نظر آنا چاہئے۔ کوڈ کی واحد نئی لائن ہے۔ ProcessingStep اقدامات کی تعریف کے بعد، جو ہمیں پروسیسنگ جاب کنفیگریشن لینے اور اسے پائپ لائن قدم کے طور پر شامل کرنے کی اجازت دیتا ہے۔ ہم SageMaker فیچر اسٹور کے ادخال کے مرحلے پر ڈیٹا کی تیاری کے مرحلے کے انحصار کی مزید وضاحت کرتے ہیں۔ درج ذیل کوڈ دیکھیں:

feature_store_ingestion_step = ProcessingStep( name='FeatureStoreIngestion', step_args=fs_processor_args, cache_config=cache_config
) preprocess_dataset_step = ProcessingStep( name='PreprocessData', step_args=processor_args, cache_config=cache_config
)
preprocess_dataset_step.add_depends_on([feature_store_ingestion_step])

اسی طرح، ایک ماڈل ٹریننگ اور ٹیوننگ قدم بنانے کے لیے، ہمیں ایک تعریف شامل کرنے کی ضرورت ہے۔ TuningStep ماڈل ٹریننگ سٹیپ کے کوڈ کے بعد ہمیں سیج میکر ہائپر پیرامیٹر ٹیوننگ کو پائپ لائن میں ایک قدم کے طور پر چلانے کی اجازت دیتا ہے:

tuning_step = TuningStep( name="HPTuning", tuner=tuner, inputs={ "train": TrainingInput( s3_data=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), "validation": TrainingInput( s3_data=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) }, cache_config=cache_config,
)
tuning_step.add_depends_on([preprocess_dataset_step])

ٹیوننگ مرحلہ کے بعد، ہم بہترین ماڈل کو SageMaker ماڈل رجسٹری میں رجسٹر کرنے کا انتخاب کرتے ہیں۔ ماڈل کے معیار کو کنٹرول کرنے کے لیے، ہم ایک کم از کم کوالٹی گیٹ نافذ کرتے ہیں جو بہترین ماڈل کے آبجیکٹو میٹرک (RMSE) کا موازنہ پائپ لائن کے ان پٹ پیرامیٹر کے طور پر بیان کردہ حد سے کرتا ہے۔ rmse_threshold. اس تشخیص کو کرنے کے لیے، ہم ایک کو چلانے کے لیے ایک اور پروسیسنگ مرحلہ بناتے ہیں۔ تشخیص سکرپٹ. ماڈل کی تشخیص کا نتیجہ پراپرٹی فائل کے طور پر محفوظ کیا جائے گا۔ پراپرٹی فائلیں خاص طور پر کارآمد ہوتی ہیں جب کسی پروسیسنگ مرحلے کے نتائج کا تجزیہ کرتے ہوئے یہ فیصلہ کیا جائے کہ دوسرے مراحل کیسے چلائے جائیں۔ درج ذیل کوڈ دیکھیں:

# Specify where we'll store the model evaluation results so that other steps can access those results
evaluation_report = PropertyFile( name='EvaluationReport', output_name='evaluation', path='evaluation.json',
) # A ProcessingStep is used to evaluate the performance of a selected model from the HPO step. # In this case, the top performing model is evaluated. evaluation_step = ProcessingStep( name='EvaluateModel', processor=evaluation_processor, inputs=[ ProcessingInput( source=tuning_step.get_top_model_s3_uri( top_k=0, s3_bucket=bucket, prefix=s3_prefix ), destination='/opt/ml/processing/model', ), ProcessingInput( source=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs['test'].S3Output.S3Uri, destination='/opt/ml/processing/test', ), ], outputs=[ ProcessingOutput( output_name='evaluation', source='/opt/ml/processing/evaluation' ), ], code='./pipeline_scripts/evaluate/script.py', property_files=[evaluation_report],
)

ہم تعریف کرتے ہیں a ModelStep ہماری پائپ لائن میں سیج میکر ماڈل رجسٹری میں بہترین ماڈل کو رجسٹر کرنے کے لیے۔ اگر بہترین ماڈل ہمارے پہلے سے طے شدہ کوالٹی چیک کو پاس نہیں کرتا ہے، تو ہم اضافی طور پر a کی وضاحت کرتے ہیں۔ FailStep غلطی کا پیغام نکالنے کے لیے:

register_step = ModelStep( name='RegisterTrainedModel', step_args=model_registry_args
) metrics_fail_step = FailStep( name="RMSEFail", error_message=Join(on=" ", values=["Execution failed due to RMSE >", rmse_threshold]),
)

اگلا، ہم استعمال کرتے ہیں a ConditionStep اس بات کا جائزہ لینے کے لیے کہ آیا ماڈل رجسٹریشن کا مرحلہ یا ناکامی کا مرحلہ پائپ لائن میں اگلا لیا جانا چاہیے۔ ہمارے معاملے میں، بہترین ماڈل کو رجسٹر کیا جائے گا اگر اس کا RMSE سکور حد سے کم ہے۔

# Condition step for evaluating model quality and branching execution
cond_lte = ConditionLessThanOrEqualTo( left=JsonGet( step_name=evaluation_step.name, property_file=evaluation_report, json_path='regression_metrics.rmse.value', ), right=rmse_threshold,
)
condition_step = ConditionStep( name='CheckEvaluation', conditions=[cond_lte], if_steps=[register_step], else_steps=[metrics_fail_step],
)

آخر میں، ہم تمام متعین مراحل کو پائپ لائن میں ترتیب دیتے ہیں:

pipeline_name = 'synthetic-housing-training-sm-pipeline-ray'
step_list = [ feature_store_ingestion_step, preprocess_dataset_step, tuning_step, evaluation_step, condition_step ] training_pipeline = Pipeline( name=pipeline_name, parameters=[ processing_instance_count, feature_group_name, train_size, val_size, test_size, bucket_prefix, rmse_threshold ], steps=step_list
) # Note: If an existing pipeline has the same name it will be overwritten.
training_pipeline.upsert(role_arn=role_arn)

پچھلی پائپ لائن کو سیج میکر اسٹوڈیو میں براہ راست تصور کیا جا سکتا ہے اور اس پر عمل درآمد کیا جا سکتا ہے، یا کال کر کے عمل میں لایا جا سکتا ہے۔ execution = training_pipeline.start(). مندرجہ ذیل تصویر پائپ لائن کے بہاؤ کی وضاحت کرتی ہے۔

سیج میکر پائپ لائن ڈی اے جی

مزید برآں، ہم پائپ لائن کے عمل سے پیدا ہونے والے نمونے کے سلسلے کا جائزہ لے سکتے ہیں۔

from sagemaker.lineage.visualizer import LineageTableVisualizer viz = LineageTableVisualizer(sagemaker.session.Session())
for execution_step in reversed(execution.list_steps()): print(execution_step) display(viz.show(pipeline_execution_step=execution_step)) time.sleep(5)

ماڈل تعینات کریں۔

بہترین ماڈل کے سیج میکر ماڈل رجسٹری میں پائپ لائن رن کے ذریعے رجسٹر ہونے کے بعد، ہم SageMaker کی مکمل طور پر منظم ماڈل کی تعیناتی کی صلاحیتوں کو استعمال کرتے ہوئے ماڈل کو حقیقی وقت کے اختتامی نقطہ پر تعینات کرتے ہیں۔ سیج میکر کے پاس مختلف استعمال کے معاملات کی ضروریات کو پورا کرنے کے لیے ماڈل کی تعیناتی کے دیگر اختیارات ہیں۔ تفصیلات کے لیے رجوع کریں۔ اندازہ لگانے کے لیے ماڈلز لگائیں۔ اپنے استعمال کے کیس کے لیے صحیح آپشن کا انتخاب کرتے وقت۔ سب سے پہلے، آئیے SageMaker ماڈل رجسٹری میں ماڈل کو رجسٹر کروائیں:

xgb_regressor_model = ModelPackage( role_arn, model_package_arn=model_package_arn, name=model_name
)

ماڈل کی موجودہ حیثیت PendingApproval. ہمیں اس کی حیثیت کو مقرر کرنے کی ضرورت ہے۔ Approved تعیناتی سے پہلے:

sagemaker_client.update_model_package( ModelPackageArn=xgb_regressor_model.model_package_arn, ModelApprovalStatus='Approved'
) xgb_regressor_model.deploy( initial_instance_count=1, instance_type='ml.m5.xlarge', endpoint_name=endpoint_name
)

صاف کرو

تجربہ کرنے کے بعد، غیر ضروری چارجز سے بچنے کے لیے وسائل کو صاف کرنا یاد رکھیں۔ صاف کرنے کے لیے، APIs کو کال کرکے ریئل ٹائم اینڈ پوائنٹ، ماڈل گروپ، پائپ لائن، اور فیچر گروپ کو حذف کریں۔ اختتامی نقطہ کو حذف کریں۔, ڈیلیٹ ماڈل پیکج گروپ, پائپ لائن کو حذف کریں۔، اور ڈیلیٹ فیچر گروپ، بالترتیب، اور تمام SageMaker اسٹوڈیو نوٹ بک مثالوں کو بند کر دیں۔

نتیجہ

اس پوسٹ نے رے پر مبنی ML ورک فلو کو آرکیسٹریٹ کرنے کے لیے SageMaker Pipelines کو کس طرح استعمال کیا جائے اس بارے میں قدم بہ قدم واک تھرو کا مظاہرہ کیا۔ ہم نے SageMaker پائپ لائنز کی تھرڈ پارٹی ML ٹولز کے ساتھ ضم کرنے کی صلاحیت کا بھی مظاہرہ کیا۔ AWS کی مختلف خدمات ہیں جو رے ورک بوجھ کو قابل توسیع اور محفوظ انداز میں سپورٹ کرتی ہیں تاکہ کارکردگی کی عمدہ اور آپریشنل کارکردگی کو یقینی بنایا جا سکے۔ اب، آپ کی باری ہے کہ آپ ان طاقتور صلاحیتوں کو دریافت کریں اور Amazon SageMaker Pipelines اور Ray کے ساتھ اپنے مشین لرننگ ورک فلو کو بہتر بنانا شروع کریں۔ آج ہی کارروائی کریں اور اپنے ایم ایل پروجیکٹس کی پوری صلاحیت کو کھولیں!


مصنف کے بارے میں

ایمیزون سیج میکر کا استعمال کرتے ہوئے آرکیسٹریٹ رے پر مبنی مشین لرننگ ورک فلو | ایمیزون ویب سروسز پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عیراجو رنگن ایمیزون ویب سروسز (AWS) میں ایک سینئر سولیوشن آرکیٹیکٹ ہے۔ وہ AWS کا استعمال کرتے ہوئے AI/ML سلوشنز بنانے میں ان کی مدد کرتے ہوئے، حکومتی سپانسر شدہ اداروں کے ساتھ کام کرتا ہے۔ جب کلاؤڈ حل کے ساتھ ٹنکرنگ نہیں کرتے ہیں، تو آپ اسے فیملی کے ساتھ گھومتے ہوئے یا دوستوں کے ساتھ بیڈمنٹن کے ایک جاندار کھیل میں برڈیز کو توڑتے ہوئے پکڑیں ​​گے۔

ایمیزون سیج میکر کا استعمال کرتے ہوئے آرکیسٹریٹ رے پر مبنی مشین لرننگ ورک فلو | ایمیزون ویب سروسز پلیٹو بلاکچین ڈیٹا انٹیلی جنس۔ عمودی تلاش۔ عیشیری ڈنگ Amazon Web Services (AWS) میں ایک سینئر AI/ML ماہر حل آرکیٹیکٹ ہے۔ وہ کمپیوٹر سائنس میں پی ایچ ڈی کی ڈگری کے ساتھ مشین لرننگ کا وسیع تجربہ رکھتی ہیں۔ وہ بنیادی طور پر پبلک سیکٹر کے صارفین کے ساتھ مختلف AI/ML سے متعلقہ کاروباری چیلنجز پر کام کرتی ہے، جس سے انہیں AWS کلاؤڈ پر مشین لرننگ کے سفر کو تیز کرنے میں مدد ملتی ہے۔ گاہکوں کی مدد نہ کرنے پر، وہ بیرونی سرگرمیوں سے لطف اندوز ہوتی ہے۔

ٹائم اسٹیمپ:

سے زیادہ AWS مشین لرننگ