অ্যামাজন সেজমেকার ব্যবহার করে অর্কেস্ট্রেট রে-ভিত্তিক মেশিন লার্নিং ওয়ার্কফ্লো | আমাজন ওয়েব সার্ভিসেস

অ্যামাজন সেজমেকার ব্যবহার করে অর্কেস্ট্রেট রে-ভিত্তিক মেশিন লার্নিং ওয়ার্কফ্লো | আমাজন ওয়েব সার্ভিসেস

মেশিন লার্নিং (ML) ক্রমবর্ধমান জটিল হয়ে উঠছে কারণ গ্রাহকরা আরও বেশি চ্যালেঞ্জিং সমস্যা সমাধান করার চেষ্টা করছেন৷ এই জটিলতা প্রায়শই বিতরণ করা এমএল-এর প্রয়োজনীয়তার দিকে পরিচালিত করে, যেখানে একাধিক মেশিন একটি একক মডেলকে প্রশিক্ষণের জন্য ব্যবহার করা হয়। যদিও এটি একাধিক নোড জুড়ে কাজগুলির সমান্তরালকরণ সক্ষম করে, যার ফলে প্রশিক্ষণের সময় ত্বরান্বিত হয়, বর্ধিত মাপযোগ্যতা এবং উন্নত কর্মক্ষমতা, কার্যকরভাবে বিতরণ করা হার্ডওয়্যার ব্যবহার করার ক্ষেত্রে উল্লেখযোগ্য চ্যালেঞ্জ রয়েছে। ডেটা বিজ্ঞানীদের ডেটা পার্টিশনিং, লোড ব্যালেন্সিং, ফল্ট টলারেন্স এবং স্কেলেবিলিটির মতো চ্যালেঞ্জ মোকাবেলা করতে হবে। এমএল ইঞ্জিনিয়ারদের অবশ্যই সমান্তরালকরণ, সময়সূচী, ত্রুটিগুলি এবং ম্যানুয়ালি পুনরায় চেষ্টা করতে হবে, জটিল অবকাঠামো কোডের প্রয়োজন।

এই পোস্টে, আমরা ব্যবহার করার সুবিধা নিয়ে আলোচনা করি রশ্মি এবং আমাজন সেজমেকার ডিস্ট্রিবিউটেড ML-এর জন্য, এবং একটি মাপযোগ্য এমএল ওয়ার্কফ্লো তৈরি এবং স্থাপন করতে এই ফ্রেমওয়ার্কগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে একটি ধাপে ধাপে নির্দেশিকা প্রদান করুন।

রে, একটি ওপেন সোর্স ডিস্ট্রিবিউটেড কম্পিউটিং ফ্রেমওয়ার্ক, বিতরণ করা প্রশিক্ষণ এবং এমএল মডেলের পরিবেশনের জন্য একটি নমনীয় কাঠামো প্রদান করে। এটি সাধারণ ML কার্য যেমন ডেটা প্রিপ্রসেসিং, ডিস্ট্রিবিউটেড ট্রেনিং, হাইপারপ্যারামিটার টিউনিং, রিইনফোর্সমেন্ট লার্নিং এবং মডেল পরিবেশনের জন্য সাধারণ, মাপযোগ্য লাইব্রেরির মাধ্যমে নিম্ন-স্তরের বিতরণ করা সিস্টেমের বিশদ বিমূর্ত করে।

সেজমেকার হল এমএল মডেল তৈরি, প্রশিক্ষণ এবং স্থাপনের জন্য একটি সম্পূর্ণরূপে পরিচালিত পরিষেবা। Ray নির্বিঘ্নে সেজমেকার বৈশিষ্ট্যগুলির সাথে একত্রিত করে জটিল এমএল ওয়ার্কলোড তৈরি এবং স্থাপন করতে যা দক্ষ এবং নির্ভরযোগ্য উভয়ই। রে এবং সেজমেকারের সংমিশ্রণ স্কেলযোগ্য এমএল ওয়ার্কফ্লোগুলির জন্য শেষ থেকে শেষ ক্ষমতা প্রদান করে এবং এতে নিম্নলিখিত হাইলাইট করা বৈশিষ্ট্য রয়েছে:

  • রে-তে ডিস্ট্রিবিউটেড অ্যাক্টর এবং প্যারালেলিজম কনস্ট্রাক্ট ডিস্ট্রিবিউটেড অ্যাপ্লিকেশানের বিকাশকে সহজ করে।
  • রে এআই রানটাইম (এআইআর) উন্নয়ন থেকে উৎপাদনে যাওয়ার ঘর্ষণ কমায়। Ray এবং AIR এর সাথে, একই পাইথন কোড একটি ল্যাপটপ থেকে একটি বড় ক্লাস্টারে নির্বিঘ্নে স্কেল করতে পারে।
  • SageMaker-এর পরিচালিত পরিকাঠামো এবং প্রসেসিং জব, ট্রেনিং জব এবং হাইপারপ্যারামিটার টিউনিং জবগুলির মতো বৈশিষ্ট্যগুলি ডিস্ট্রিবিউটেড কম্পিউটিং-এর জন্য নীচে রে লাইব্রেরি ব্যবহার করতে পারে।
  • অ্যামাজন সেজমেকার পরীক্ষা-নিরীক্ষা দ্রুত পুনরাবৃত্তি এবং ট্রায়াল ট্র্যাক রাখার অনুমতি দেয়।
  • আমাজন সেজমেকার ফিচার স্টোর মডেল প্রশিক্ষণের জন্য ML বৈশিষ্ট্যগুলি সংরক্ষণ, পুনরুদ্ধার এবং ভাগ করার জন্য একটি মাপযোগ্য সংগ্রহস্থল প্রদান করে।
  • প্রশিক্ষিত মডেলগুলি সংরক্ষণ, সংস্করণ এবং ট্র্যাক করা যেতে পারে আমাজন সেজমেকার মডেল রেজিস্ট্রি শাসন ​​ও ব্যবস্থাপনার জন্য।
  • অ্যামাজন সেজমেকার পাইপলাইন ডেটা প্রস্তুতি এবং প্রশিক্ষণ থেকে শুরু করে স্বয়ংক্রিয় কর্মপ্রবাহ হিসাবে মডেল স্থাপন পর্যন্ত শেষ-থেকে-এন্ড ML জীবনচক্রকে অর্কেস্ট্রেট করার অনুমতি দেয়।

সমাধান ওভারভিউ

এই পোস্টটি রে এবং সেজমেকার একসাথে ব্যবহার করার সুবিধার উপর দৃষ্টি নিবদ্ধ করে। আমরা সেজমেকার পাইপলাইন ব্যবহার করে সাজানো একটি এন্ড-টু-এন্ড রে-ভিত্তিক ML ওয়ার্কফ্লো সেট আপ করেছি। কর্মপ্রবাহের মধ্যে রয়েছে রে অ্যাক্টর ব্যবহার করে ফিচার স্টোরে ডেটা সমান্তরালভাবে প্রবেশ করানো, রে ডেটার সাথে ডেটা প্রিপ্রসেসিং, রে ট্রেন এবং হাইপারপ্যারামিটার অপ্টিমাইজেশান (এইচপিও) টিউনিং কাজগুলি ব্যবহার করে ট্রেনিং মডেল এবং হাইপারপ্যারামিটার টিউনিং এবং অবশেষে মডেল মূল্যায়ন এবং মডেলটিকে নিবন্ধন করা। মডেল রেজিস্ট্রি।

আমাদের ডেটার জন্য, আমরা ব্যবহার করি একটি সিন্থেটিক হাউজিং ডেটাসেট যা আটটি বৈশিষ্ট্য নিয়ে গঠিত (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 ফরম্যাটে এবং সেজমেকার ফিচার স্টোরে এটি ইনজেস্ট করুন। সেজমেকার ফিচার স্টোর হল একটি উদ্দেশ্য-নির্মিত সংগ্রহস্থল যা দলগুলির জন্য ML বৈশিষ্ট্যগুলি তৈরি, ভাগ করা এবং পরিচালনা করা সহজ করে তোলে৷ এটি বৈশিষ্ট্য আবিষ্কার, পুনঃব্যবহার এবং ভাগ করে নেওয়াকে সহজ করে, যার ফলে দ্রুত উন্নয়ন, গ্রাহক দলের মধ্যে সহযোগিতা বৃদ্ধি এবং খরচ কম হয়।

বৈশিষ্ট্য স্টোরে বৈশিষ্ট্যগুলি গ্রহণ করার জন্য নিম্নলিখিত পদক্ষেপগুলি রয়েছে:

  1. একটি বৈশিষ্ট্য গ্রুপ সংজ্ঞায়িত করুন এবং বৈশিষ্ট্য দোকানে বৈশিষ্ট্য গোষ্ঠী তৈরি করুন।
  2. ডেটার প্রতিটি সারির জন্য একটি ইভেন্টের সময় এবং রেকর্ড আইডি যোগ করে বৈশিষ্ট্য স্টোরের জন্য উৎস ডেটা প্রস্তুত করুন।
  3. Boto3 SDK ব্যবহার করে ফিচার গ্রুপে প্রস্তুত ডেটা ইনজেস্ট করুন।

এই বিভাগে, আমরা শুধুমাত্র ধাপ 3 হাইলাইট করি, কারণ এটি সেই অংশ যা রে ব্যবহার করে ইনজেশন টাস্কের সমান্তরাল প্রক্রিয়াকরণ জড়িত। আপনি এই প্রক্রিয়ার জন্য সম্পূর্ণ কোড পর্যালোচনা করতে পারেন গিটহুব রেপো.

সার্জারির ingest_features পদ্ধতি নামক একটি ক্লাস ভিতরে সংজ্ঞায়িত করা হয় Featurestore। নোট করুন যে Featurestore ক্লাস সজ্জিত করা হয় @ray.remote. এটি ইঙ্গিত করে যে এই শ্রেণীর একটি উদাহরণ হল একজন রে অভিনেতা, রায়ের মধ্যে একটি রাষ্ট্রীয় এবং সমসাময়িক গণনামূলক ইউনিট। এটি একটি প্রোগ্রামিং মডেল যা আপনাকে বিতরণ করা অবজেক্ট তৈরি করতে দেয় যা একটি অভ্যন্তরীণ অবস্থা বজায় রাখে এবং একটি রে ক্লাস্টারে বিভিন্ন নোডে চলমান একাধিক টাস্কের মাধ্যমে একসাথে অ্যাক্সেস করা যায়। অভিনেতারা পরিবর্তিত অবস্থাকে পরিচালনা এবং এনক্যাপসুলেট করার একটি উপায় প্রদান করে, একটি বিতরণ করা সেটিংয়ে জটিল, রাষ্ট্রীয় অ্যাপ্লিকেশন তৈরির জন্য তাদের মূল্যবান করে তোলে। আপনি অভিনেতাদের মধ্যেও সম্পদের প্রয়োজনীয়তা নির্দিষ্ট করতে পারেন। এই ক্ষেত্রে, প্রতিটি উদাহরণ FeatureStore ক্লাসের জন্য 0.5 সিপিইউ লাগবে। নিম্নলিখিত কোড দেখুন:

@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)

প্রশিক্ষণ, বৈধতা এবং পরীক্ষার জন্য ডেটা প্রস্তুত করুন

এই ধাপে, আমরা মেশিন লার্নিংয়ের প্রস্তুতির জন্য আমাদের ডেটাসেটকে দক্ষতার সাথে বিভক্ত, রূপান্তর এবং স্কেল করতে Ray Dataset ব্যবহার করি। Ray Dataset বিভিন্ন স্টোরেজ সিস্টেম এবং ফাইল ফরম্যাট সমর্থন করে, রে-তে বিতরণ করা ডেটা লোড করার একটি আদর্শ উপায় প্রদান করে। এটিতে সাধারণ ML ডেটা প্রিপ্রসেসিং ক্রিয়াকলাপগুলির জন্য API রয়েছে যেমন সমান্তরাল রূপান্তর, শাফলিং, গ্রুপিং এবং একত্রিতকরণ। Ray Dataset এছাড়াও স্টেটফুল সেটআপ এবং GPU ত্বরণের প্রয়োজনে অপারেশন পরিচালনা করে। এটি অন্যান্য ডেটা প্রসেসিং লাইব্রেরি যেমন Spark, Pandas, NumPy এবং আরও অনেক কিছুর সাথে সাথে TensorFlow এবং PyTorch এর মত ML ফ্রেমওয়ার্কের সাথে মসৃণভাবে একীভূত হয়। এটি রে-এর উপরে এন্ড-টু-এন্ড ডেটা পাইপলাইন এবং 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-এ সংরক্ষিত থাকে এবং পরবর্তী ধাপে ইনপুট প্যারামিটার হিসাবে পাস করা হবে।

মডেল প্রশিক্ষণ এবং হাইপারপ্যারামিটার অপ্টিমাইজেশান সম্পাদন করুন

আমাদের ডেটা প্রি-প্রসেসড এবং মডেলিংয়ের জন্য প্রস্তুত হওয়ার সাথে সাথে, কিছু এমএল মডেলকে প্রশিক্ষণ দেওয়ার এবং ভবিষ্যদ্বাণীমূলক কর্মক্ষমতা সর্বাধিক করতে তাদের হাইপারপ্যারামিটারগুলিকে সূক্ষ্ম-টিউন করার সময়। আমরা ব্যাবহার করি XGBoost-Ray, রে-তে নির্মিত XGBoost-এর জন্য একটি বিতরণ করা ব্যাকএন্ড যা একাধিক নোড এবং GPU ব্যবহার করে বড় ডেটাসেটে XGBoost মডেলকে প্রশিক্ষণ দিতে সক্ষম করে। এটি XGBoost এর ট্রেনের জন্য সহজ ড্রপ-ইন প্রতিস্থাপন প্রদান করে এবং হুডের অধীনে বিতরণ করা ডেটা ব্যবস্থাপনা এবং প্রশিক্ষণের জটিলতাগুলি পরিচালনা করার সময় API-এর পূর্বাভাস দেয়।

একাধিক নোডের উপর প্রশিক্ষণের বন্টন সক্ষম করতে, আমরা নামক একটি সহায়ক শ্রেণী ব্যবহার করি রেহেল্পার. নিম্নলিখিত কোডে দেখানো হয়েছে, আমরা প্রশিক্ষণ কাজের রিসোর্স কনফিগারেশন ব্যবহার করি এবং হেড নোড হিসাবে প্রথম হোস্টকে বেছে নিই:

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)

উল্লেখ্য যে instantiating সময় trainer, আমরা পাস RayParams, যা অভিনেতা প্রতি অভিনেতার সংখ্যা এবং CPU-এর সংখ্যা নেয়। XGBoost-Ray রে ক্লাস্টারের সাথে সংযুক্ত সমস্ত নোড জুড়ে প্রশিক্ষণ বিতরণ করতে এই তথ্য ব্যবহার করে।

আমরা এখন SageMaker Python SDK-এর উপর ভিত্তি করে একটি XGBoost অনুমানকারী বস্তু তৈরি করি এবং HPO কাজের জন্য এটি ব্যবহার করি।

সেজমেকার পাইপলাইনগুলি ব্যবহার করে পূর্ববর্তী পদক্ষেপগুলি অর্কেস্ট্রেট করুন৷

এন্ড-টু-এন্ড স্কেলযোগ্য এবং পুনঃব্যবহারযোগ্য এমএল ওয়ার্কফ্লো তৈরি করতে, আমাদের একটি পাইপলাইনে পূর্ববর্তী ধাপগুলি অর্কেস্ট্রেট করতে একটি CI/CD টুল ব্যবহার করতে হবে। সেজমেকার পাইপলাইনগুলির সেজমেকার, সেজমেকার পাইথন এসডিকে এবং সেজমেকার স্টুডিওর সাথে সরাসরি একীকরণ রয়েছে। এই ইন্টিগ্রেশনটি আপনাকে সহজে ব্যবহারযোগ্য Python SDK এর সাথে ML ওয়ার্কফ্লো তৈরি করতে দেয় এবং তারপর SageMaker স্টুডিও ব্যবহার করে আপনার ওয়ার্কফ্লোকে ভিজ্যুয়ালাইজ ও পরিচালনা করতে দেয়। এছাড়াও আপনি পাইপলাইন এক্সিকিউশনের মধ্যে আপনার ডেটার ইতিহাস ট্র্যাক করতে পারেন এবং ক্যাশে করার জন্য পদক্ষেপগুলি নির্ধারণ করতে পারেন৷

সেজমেকার পাইপলাইনগুলি একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ (ডিএজি) তৈরি করে যাতে একটি এমএল ওয়ার্কফ্লো তৈরির জন্য প্রয়োজনীয় পদক্ষেপগুলি অন্তর্ভুক্ত থাকে। প্রতিটি পাইপলাইন ধাপের মধ্যে ডেটা নির্ভরতা দ্বারা সংগঠিত আন্তঃসংযুক্ত পদক্ষেপগুলির একটি সিরিজ, এবং প্যারামিটারাইজ করা যেতে পারে, যা আপনাকে পাইপলাইনের প্রতিটি রানের জন্য পরামিতি হিসাবে ইনপুট ভেরিয়েবল প্রদান করতে দেয়। সেজমেকার পাইপলাইনগুলির চার ধরণের পাইপলাইন পরামিতি রয়েছে: 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")

আমরা দুটি প্রক্রিয়াকরণের ধাপ সংজ্ঞায়িত করি: একটি সেজমেকার ফিচার স্টোর ইনজেশনের জন্য, অন্যটি ডেটা প্রস্তুতির জন্য। এটি পূর্বে বর্ণিত পূর্ববর্তী পদক্ষেপগুলির সাথে খুব মিল দেখা উচিত। কোডের একমাত্র নতুন লাইন হল ProcessingStep ধাপের সংজ্ঞার পরে, যা আমাদের প্রক্রিয়াকরণ কাজের কনফিগারেশন নিতে এবং এটি একটি পাইপলাইন পদক্ষেপ হিসাবে অন্তর্ভুক্ত করতে দেয়। আমরা সেজমেকার ফিচার স্টোর ইনজেশন ধাপে ডেটা প্রস্তুতির ধাপের নির্ভরতা আরও নির্দিষ্ট করি। নিম্নলিখিত কোড দেখুন:

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 মডেল ট্রেনিং ধাপের কোডের পরে আমাদেরকে পাইপলাইনের একটি ধাপ হিসেবে SageMaker হাইপারপ্যারামিটার টিউনিং চালানোর অনুমতি দেয়:

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])

টিউনিং ধাপের পর, আমরা সেরা মডেলটিকে সেজমেকার মডেল রেজিস্ট্রিতে নিবন্ধন করতে বেছে নিই। মডেলের গুণমান নিয়ন্ত্রণ করতে, আমরা একটি ন্যূনতম মানের গেট প্রয়োগ করি যা পাইপলাইনের ইনপুট প্যারামিটার হিসাবে সংজ্ঞায়িত একটি থ্রেশহোল্ডের সাথে সেরা মডেলের অবজেক্টিভ মেট্রিক (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],
)

আমরা একটি সংজ্ঞায়িত ModelStep আমাদের পাইপলাইনে সেজমেকার মডেল রেজিস্ট্রিতে সেরা মডেলটি নিবন্ধন করতে। যদি সেরা মডেলটি আমাদের পূর্বনির্ধারিত গুণমান পরীক্ষায় উত্তীর্ণ না হয়, আমরা অতিরিক্ত একটি নির্দিষ্ট করি 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]),
)

পরবর্তী, আমরা একটি ব্যবহার করি 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 মডেল রেজিস্ট্রিতে মডেলটি নিবন্ধিত করি:

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 পাইপলাইনগুলির ক্ষমতাও প্রদর্শন করেছি৷ পারফরম্যান্সের উৎকর্ষতা এবং অপারেশনাল দক্ষতা নিশ্চিত করার জন্য বিভিন্ন AWS পরিষেবা রয়েছে যা রে ওয়ার্কলোডগুলিকে মাপযোগ্য এবং নিরাপদ ফ্যাশনে সমর্থন করে। এখন, এই শক্তিশালী ক্ষমতাগুলি অন্বেষণ করার এবং Amazon SageMaker Pipelines এবং Ray-এর সাথে আপনার মেশিন লার্নিং ওয়ার্কফ্লোকে অপ্টিমাইজ করা শুরু করার পালা। আজই পদক্ষেপ নিন এবং আপনার এমএল প্রকল্পগুলির সম্পূর্ণ সম্ভাবনা আনলক করুন!


লেখক সম্পর্কে

অ্যামাজন সেজমেকার ব্যবহার করে অর্কেস্ট্রেট রে-ভিত্তিক মেশিন লার্নিং ওয়ার্কফ্লো | আমাজন ওয়েব সার্ভিস প্লেটোব্লকচেইন ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.রাজু রঙ্গন আমাজন ওয়েব সার্ভিসেস (AWS) এর একজন সিনিয়র সলিউশন আর্কিটেক্ট। তিনি AWS ব্যবহার করে AI/ML সলিউশন তৈরি করতে সাহায্য করে সরকারী স্পনসরকৃত সংস্থার সাথে কাজ করেন। ক্লাউড সলিউশনের সাথে টিঙ্কারিং না করার সময়, আপনি তাকে পরিবারের সাথে আড্ডা দিচ্ছেন বা বন্ধুদের সাথে ব্যাডমিন্টনের একটি প্রাণবন্ত খেলায় বার্ডিজ মারছেন।

অ্যামাজন সেজমেকার ব্যবহার করে অর্কেস্ট্রেট রে-ভিত্তিক মেশিন লার্নিং ওয়ার্কফ্লো | আমাজন ওয়েব সার্ভিস প্লেটোব্লকচেইন ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.শেরি ডিং Amazon Web Services (AWS)-এর একজন সিনিয়র AI/ML বিশেষজ্ঞ সমাধানের স্থপতি। কম্পিউটার বিজ্ঞানে পিএইচডি ডিগ্রি সহ মেশিন লার্নিংয়ে তার ব্যাপক অভিজ্ঞতা রয়েছে। তিনি মূলত পাবলিক সেক্টরের গ্রাহকদের সাথে বিভিন্ন এআই/এমএল-সম্পর্কিত ব্যবসায়িক চ্যালেঞ্জ নিয়ে কাজ করেন, তাদের AWS ক্লাউডে তাদের মেশিন লার্নিং যাত্রাকে ত্বরান্বিত করতে সহায়তা করে। গ্রাহকদের সাহায্য না করার সময়, তিনি বাইরের কার্যকলাপ উপভোগ করেন।

সময় স্ট্যাম্প:

থেকে আরো এডাব্লুএস মেশিন লার্নিং

অ্যামাজন ফ্রড ডিটেক্টরে নতুন অ্যাকাউন্ট টেকওভার ইনসাইটস মডেলের সাথে লগইন করার সময় অ্যাকাউন্ট টেকওভার প্রতিরোধ করুন

উত্স নোড: 1718069
সময় স্ট্যাম্প: অক্টোবর 5, 2022

Amazon Forecast ব্যবহার করে কোনো ঐতিহাসিক ডেটা ছাড়াই পণ্যের জন্য কোল্ড স্টার্টের পূর্বাভাস তৈরি করুন, এখন 45% পর্যন্ত আরও সঠিক

উত্স নোড: 1761594
সময় স্ট্যাম্প: নভেম্বর 21, 2022