১. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি একটি TensorFlow মডেলের জন্য মাল্টি-ওয়ার্কার ট্রেনিং জব চালাতে Vertex AI ব্যবহার করবেন।
আপনি যা শিখবেন
আপনি শিখবেন কীভাবে:
- একাধিক কর্মী প্রশিক্ষণের জন্য প্রশিক্ষণ অ্যাপ্লিকেশন কোড পরিবর্তন করুন
- Vertex AI UI থেকে একাধিক কর্মীর প্রশিক্ষণ জব কনফিগার ও চালু করুন।
- Vertex SDK ব্যবহার করে একাধিক কর্মীর প্রশিক্ষণ জব কনফিগার ও চালু করুন।
গুগল ক্লাউডে এই ল্যাবটি চালানোর মোট খরচ প্রায় ৫ ডলার ।
২. ভার্টেক্স এআই-এর পরিচিতি
এই ল্যাবটি গুগল ক্লাউডে উপলব্ধ সর্বাধুনিক এআই প্রোডাক্টটি ব্যবহার করে। ভার্টেক্স এআই গুগল ক্লাউডের এমএল (ML) অফারিংগুলোকে একটি নির্বিঘ্ন ডেভেলপমেন্ট অভিজ্ঞতায় একীভূত করে। পূর্বে, অটোএমএল (AutoML) দিয়ে প্রশিক্ষিত মডেল এবং কাস্টম মডেলগুলো আলাদা আলাদা সার্ভিসের মাধ্যমে অ্যাক্সেস করা যেত। নতুন অফারিংটি অন্যান্য নতুন প্রোডাক্টের সাথে উভয়কে একটিমাত্র এপিআই (API)-তে একত্রিত করেছে। আপনি আপনার বিদ্যমান প্রোজেক্টগুলোও ভার্টেক্স এআই-তে মাইগ্রেট করতে পারেন। আপনার কোনো মতামত থাকলে, অনুগ্রহ করে সাপোর্ট পেজটি দেখুন।
ভার্টেক্স এআই-এর এন্ড-টু-এন্ড এমএল ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য রয়েছে। এই ল্যাবটি নিচে উল্লেখিত পণ্যগুলোর উপর আলোকপাত করবে: ট্রেনিং এবং ওয়ার্কবেঞ্চ।

৩. ব্যবহারের ক্ষেত্রের সংক্ষিপ্ত বিবরণ
এই ল্যাবে আপনি TensorFlow Datasets- এর কাসাভা ডেটাসেটের উপর ট্রান্সফার লার্নিং ব্যবহার করে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ দেবেন। আপনি যে আর্কিটেকচারটি ব্যবহার করবেন তা হলো tf.keras.applications লাইব্রেরির একটি ResNet50 মডেল, যা Imagenet ডেটাসেটের উপর প্রি-ট্রেইন করা।
কেন বিকেন্দ্রীভূত প্রশিক্ষণ?
আপনার যদি একটিমাত্র GPU থাকে, তাহলে TensorFlow আপনার কোনো অতিরিক্ত কাজ ছাড়াই মডেল প্রশিক্ষণের গতি বাড়াতে এই অ্যাক্সিলারেটরটি ব্যবহার করবে। তবে, আপনি যদি একটি মেশিনে বা একাধিক মেশিনে (যার প্রতিটিতে একাধিক GPU থাকতে পারে) একাধিক GPU ব্যবহার করে অতিরিক্ত গতি পেতে চান, তাহলে আপনাকে tf.distribute ব্যবহার করতে হবে, যা হলো একাধিক ডিভাইসে গণনা চালানোর জন্য TensorFlow-এর একটি লাইব্রেরি। একটি ডিভাইস বলতে কোনো মেশিনের CPU বা অ্যাক্সিলারেটরকে (যেমন GPU বা TPU) বোঝায়, যার উপর TensorFlow বিভিন্ন অপারেশন চালাতে পারে।
ডিস্ট্রিবিউটেড ট্রেনিং শুরু করার সবচেয়ে সহজ উপায় হলো একাধিক GPU ডিভাইস সহ একটিমাত্র মেশিন ব্যবহার করা। tf.distribute মডিউলের একটি TensorFlow ডিস্ট্রিবিউশন স্ট্র্যাটেজি সমস্ত GPU জুড়ে ডেটা ডিস্ট্রিবিউশন এবং গ্রেডিয়েন্ট আপডেটের সমন্বয় পরিচালনা করবে। আপনি যদি সিঙ্গেল হোস্ট ট্রেনিংয়ে দক্ষতা অর্জন করে থাকেন এবং আরও স্কেল করতে চান, তাহলে আপনার ক্লাস্টারে একাধিক মেশিন যোগ করা আপনাকে আরও বেশি পারফরম্যান্স বুস্ট পেতে সাহায্য করতে পারে। আপনি এমন একটি মেশিন ক্লাস্টার ব্যবহার করতে পারেন যা শুধুমাত্র CPU-ভিত্তিক, অথবা যার প্রতিটিতে এক বা একাধিক GPU রয়েছে। এই ল্যাবটি দ্বিতীয় ক্ষেত্রটি নিয়ে আলোচনা করে এবং Vertex AI-তে একাধিক মেশিনে একটি TensorFlow মডেলের ট্রেনিং ডিস্ট্রিবিউট করতে MultiWorkerMirroredStrategy কীভাবে ব্যবহার করতে হয় তা প্রদর্শন করে।
MultiWorkerMirroredStrategy হলো একটি সিনক্রোনাস ডেটা প্যারালেলিজম স্ট্র্যাটেজি যা আপনি কোডে সামান্য কিছু পরিবর্তন করেই ব্যবহার করতে পারেন। আপনার ক্লাস্টারের প্রতিটি ডিভাইসে মডেলটির একটি কপি তৈরি করা হয়। পরবর্তী গ্রেডিয়েন্ট আপডেটগুলো সিনক্রোনাস পদ্ধতিতে সম্পন্ন হবে। এর মানে হলো, প্রতিটি ওয়ার্কার ডিভাইস ইনপুট ডেটার ভিন্ন ভিন্ন স্লাইসের উপর ভিত্তি করে মডেলটির ফরোয়ার্ড এবং ব্যাকওয়ার্ড পাস গণনা করে। এরপর এই প্রতিটি স্লাইস থেকে গণনা করা গ্রেডিয়েন্টগুলো একটি মেশিনের সমস্ত ডিভাইস এবং ক্লাস্টারের সমস্ত মেশিনের মধ্যে একত্রিত করা হয় এবং অল-রিডিউস নামে পরিচিত একটি প্রক্রিয়ায় রিডিউস (সাধারণত একটি গড়) করা হয়। এরপর অপটিমাইজার এই রিডিউস করা গ্রেডিয়েন্টগুলো ব্যবহার করে প্যারামিটার আপডেট করে, যার ফলে ডিভাইসগুলো সিঙ্ক অবস্থায় থাকে। TensorFlow-এর সাথে ডিস্ট্রিবিউটেড ট্রেনিং সম্পর্কে আরও জানতে, নিচের ভিডিওটি দেখুন:
৪. আপনার পরিবেশ প্রস্তুত করুন
এই কোডল্যাবটি চালানোর জন্য আপনার বিলিং চালু করা একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট প্রয়োজন হবে। প্রজেক্ট তৈরি করতে, এখানের নির্দেশাবলী অনুসরণ করুন।
ধাপ ১: কম্পিউট ইঞ্জিন এপিআই সক্রিয় করুন
Compute Engine- এ যান এবং যদি আগে থেকে সক্রিয় করা না থাকে তবে 'Enable' নির্বাচন করুন। আপনার নোটবুক ইনস্ট্যান্স তৈরি করার জন্য এটি প্রয়োজন হবে।
ধাপ ২: কন্টেইনার রেজিস্ট্রি এপিআই সক্রিয় করুন
কন্টেইনার রেজিস্ট্রি- তে যান এবং যদি আগে থেকে সক্ষম করা না থাকে তবে তা নির্বাচন করুন। আপনার কাস্টম ট্রেনিং জবের জন্য একটি কন্টেইনার তৈরি করতে আপনি এটি ব্যবহার করবেন।
ধাপ ৩: Vertex AI API সক্রিয় করুন
আপনার ক্লাউড কনসোলের Vertex AI বিভাগে যান এবং Enable Vertex AI API-তে ক্লিক করুন।

ধাপ ৪: একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন
আপনার ক্লাউড কনসোলের Vertex AI সেকশন থেকে Workbench-এ ক্লিক করুন:

নোটবুকস এপিআই (Notebooks API) সক্রিয় করুন, যদি আগে থেকে সক্রিয় করা না থাকে।

একবার চালু হয়ে গেলে, ম্যানেজড নোটবুকস-এ ক্লিক করুন:

তারপর নতুন নোটবুক নির্বাচন করুন।

আপনার নোটবুকটির একটি নাম দিন, এবং তারপর অ্যাডভান্সড সেটিংস-এ ক্লিক করুন।

অ্যাডভান্সড সেটিংস-এর অধীনে, আইডল শাটডাউন চালু করুন এবং মিনিটের সংখ্যা ৬০-এ সেট করুন। এর মানে হলো, আপনার নোটবুকটি ব্যবহার না করা হলে স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে, ফলে আপনার অপ্রয়োজনীয় খরচ হবে না।

সিকিউরিটি-এর অধীনে, 'Enable terminal' নির্বাচন করুন, যদি এটি আগে থেকে সক্রিয় করা না থাকে।

আপনি অন্যান্য সমস্ত উন্নত সেটিংস অপরিবর্তিত রাখতে পারেন।
এরপর, Create-এ ক্লিক করুন। ইনস্ট্যান্সটি প্রোভিশন হতে কয়েক মিনিট সময় লাগবে।
ইনস্ট্যান্সটি তৈরি হয়ে গেলে, Open JupyterLab নির্বাচন করুন।

আপনি যখন প্রথমবার একটি নতুন ইনস্ট্যান্স ব্যবহার করবেন, তখন আপনাকে প্রমাণীকরণের জন্য বলা হবে। এটি করার জন্য UI-তে দেওয়া ধাপগুলো অনুসরণ করুন।

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

cassava নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং cd কমান্ড ব্যবহার করে তার ভিতরে যান:
mkdir cassava
cd cassava
ধাপ ১: একটি ডকারফাইল তৈরি করুন
আপনার কোডকে কন্টেইনারাইজ করার প্রথম ধাপ হলো একটি ডকারফাইল তৈরি করা। ডকারফাইলটিতে আপনি ইমেজটি চালানোর জন্য প্রয়োজনীয় সমস্ত কমান্ড অন্তর্ভুক্ত করবেন। এটি সমস্ত প্রয়োজনীয় লাইব্রেরি ইনস্টল করবে এবং ট্রেনিং কোডের জন্য এন্ট্রি পয়েন্ট সেট আপ করবে।
আপনার টার্মিনাল থেকে, একটি খালি Dockerfile তৈরি করুন:
touch Dockerfile
Dockerfile-টি খুলুন এবং এর মধ্যে নিম্নলিখিত বিষয়গুলো কপি করুন:
FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-7
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]
এই ডকারফাইলটি Deep Learning Container TensorFlow Enterprise 2.7 GPU ডকার ইমেজ ব্যবহার করে। গুগল ক্লাউডের ডিপ লার্নিং কন্টেইনারগুলোতে অনেক প্রচলিত এমএল (ML) এবং ডেটা সায়েন্স ফ্রেমওয়ার্ক আগে থেকেই ইনস্টল করা থাকে। সেই ইমেজটি ডাউনলোড করার পর, এই ডকারফাইলটি ট্রেনিং কোডের জন্য এন্ট্রি পয়েন্ট সেট আপ করে। আপনি এখনও এই ফাইলগুলো তৈরি করেননি – পরবর্তী ধাপে, আপনি মডেলটিকে ট্রেনিং ও টিউনিং করার জন্য কোড যোগ করবেন।
ধাপ ২: একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন
এই ট্রেনিং জবটিতে, আপনাকে প্রশিক্ষিত TensorFlow মডেলটি একটি ক্লাউড স্টোরেজ বাকেটে এক্সপোর্ট করতে হবে। আপনার টার্মিনাল থেকে, আপনার প্রোজেক্টের জন্য একটি এনভ ভ্যারিয়েবল নির্ধারণ করতে নিম্নলিখিত কমান্ডটি চালান, এবং অবশ্যই your-cloud-project এর জায়গায় আপনার প্রোজেক্টের আইডি বসাবেন:
PROJECT_ID='your-cloud-project'
এরপরে, আপনার প্রোজেক্টে একটি নতুন বাকেট তৈরি করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
ধাপ ৩: মডেল প্রশিক্ষণ কোড যোগ করুন
আপনার টার্মিনাল থেকে, ট্রেনিং কোডের জন্য একটি ডিরেক্টরি এবং কোড যোগ করার জন্য একটি পাইথন ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
mkdir trainer
touch trainer/task.py
আপনার cassava/ ডিরেক্টরিতে এখন নিম্নলিখিত বিষয়গুলো থাকা উচিত:
+ Dockerfile
+ trainer/
+ task.py
এরপর, আপনার তৈরি করা task.py ফাইলটি খুলুন এবং নিচের কোডটি কপি করুন। আপনাকে {your-gcs-bucket} এর জায়গায় আপনার তৈরি করা ক্লাউড স্টোরেজ বাকেটের নামটি বসাতে হবে।
import tensorflow as tf
import tensorflow_datasets as tfds
import os
PER_REPLICA_BATCH_SIZE = 64
EPOCHS = 2
# TODO: replace {your-gcs-bucket} with the name of the Storage bucket you created earlier
BUCKET = 'gs://{your-gcs-bucket}/mwms'
def preprocess_data(image, label):
'''Resizes and scales images.'''
image = tf.image.resize(image, (300,300))
return tf.cast(image, tf.float32) / 255., label
def create_dataset(batch_size):
'''Loads Cassava dataset and preprocesses data.'''
data, info = tfds.load(name='cassava', as_supervised=True, with_info=True)
number_of_classes = info.features['label'].num_classes
train_data = data['train'].map(preprocess_data,
num_parallel_calls=tf.data.experimental.AUTOTUNE)
train_data = train_data.shuffle(1000)
train_data = train_data.batch(batch_size)
train_data = train_data.prefetch(tf.data.experimental.AUTOTUNE)
# Set AutoShardPolicy
options = tf.data.Options()
options.experimental_distribute.auto_shard_policy = tf.data.experimental.AutoShardPolicy.DATA
train_data = train_data.with_options(options)
return train_data, number_of_classes
def create_model(number_of_classes):
'''Creates and compiles pretrained ResNet50 model.'''
base_model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False)
x = base_model.output
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dense(1016, activation='relu')(x)
predictions = tf.keras.layers.Dense(number_of_classes, activation='softmax')(x)
model = tf.keras.Model(inputs=base_model.input, outputs=predictions)
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=tf.keras.optimizers.Adam(0.0001),
metrics=['accuracy'])
return model
def _is_chief(task_type, task_id):
'''Helper function. Determines if machine is chief.'''
return task_type == 'chief'
def _get_temp_dir(dirpath, task_id):
'''Helper function. Gets temporary directory for saving model.'''
base_dirpath = 'workertemp_' + str(task_id)
temp_dir = os.path.join(dirpath, base_dirpath)
tf.io.gfile.makedirs(temp_dir)
return temp_dir
def write_filepath(filepath, task_type, task_id):
'''Helper function. Gets filepath to save model.'''
dirpath = os.path.dirname(filepath)
base = os.path.basename(filepath)
if not _is_chief(task_type, task_id):
dirpath = _get_temp_dir(dirpath, task_id)
return os.path.join(dirpath, base)
def main():
# Create strategy
strategy = tf.distribute.MultiWorkerMirroredStrategy()
# Get data
global_batch_size = PER_REPLICA_BATCH_SIZE * strategy.num_replicas_in_sync
train_data, number_of_classes = create_dataset(global_batch_size)
# Wrap variable creation within strategy scope
with strategy.scope():
model = create_model(number_of_classes)
model.fit(train_data, epochs=EPOCHS)
# Determine type and task of the machine from
# the strategy cluster resolver
task_type, task_id = (strategy.cluster_resolver.task_type,
strategy.cluster_resolver.task_id)
# Based on the type and task, write to the desired model path
write_model_path = write_filepath(BUCKET, task_type, task_id)
model.save(write_model_path)
if __name__ == "__main__":
main()
কন্টেইনারটি বিল্ড করার আগে, চলুন কোডটি আরও ভালোভাবে দেখে নেওয়া যাক, যেখানে tf.distribute.Strategy API-এর MultiWorkerMirroredStrategy ব্যবহার করা হয়েছে।
আপনার কোডকে MultiWorkerMirroredStrategy সাথে কাজ করানোর জন্য কোডে কয়েকটি উপাদান থাকা আবশ্যক।
- ডেটা শার্ড করা প্রয়োজন, যার অর্থ হলো প্রতিটি ওয়ার্কারকে সম্পূর্ণ ডেটাসেটের একটি উপসেট বরাদ্দ করা হয়। তাই, প্রতিটি ধাপে প্রতিটি ওয়ার্কার ওভারল্যাপবিহীন ডেটাসেট এলিমেন্টের একটি গ্লোবাল ব্যাচ সাইজ প্রসেস করবে। এই শার্ডিং
tf.data.experimental.AutoShardPolicyএর মাধ্যমে স্বয়ংক্রিয়ভাবে সম্পন্ন হয়, যাFILEবাDATAতে সেট করা যেতে পারে। এই উদাহরণে,create_dataset()ফাংশনটিAutoShardPolicyকেDATAতে সেট করেছে, কারণ কাসাভা ডেটাসেটটি একাধিক ফাইল হিসেবে ডাউনলোড করা হয় না। তবে, আপনি যদি পলিসিটিDATAতে সেট না করতেন, তাহলে ডিফল্টAUTOপলিসিটি কার্যকর হতো এবং চূড়ান্ত ফলাফল একই থাকত। আপনি এখানেMultiWorkerMirroredStrategyব্যবহার করে ডেটাসেট শার্ডিং সম্পর্কে আরও জানতে পারেন। -
main()ফাংশনেMultiWorkerMirroredStrategyঅবজেক্টটি তৈরি করা হয়। এরপর, আপনি আপনার মডেল ভেরিয়েবল তৈরির কাজটি স্ট্র্যাটেজিটির স্কোপের মধ্যে রাখেন। এই গুরুত্বপূর্ণ ধাপটি TensorFlow-কে বলে দেয় যে কোন ভেরিয়েবলগুলো রেপ্লিকাগুলোর মধ্যে মিরর করা উচিত। - ব্যাচ সাইজ
num_replicas_in_syncদ্বারা বাড়ানো হয়। এটি নিশ্চিত করে যে প্রতিটি রেপ্লিকা প্রতিটি ধাপে একই সংখ্যক উদাহরণ প্রসেস করে। TensorFlow-তে সিনক্রোনাস ডেটা প্যারালেলিজম কৌশল ব্যবহার করার সময় ব্যাচ সাইজ বাড়ানো একটি উত্তম অনুশীলন। - একাধিক ওয়ার্কারের ক্ষেত্রে আপনার মডেল সেভ করাটা কিছুটা বেশি জটিল, কারণ প্রতিটি ওয়ার্কারের জন্য গন্তব্য আলাদা হতে হয়। চিফ ওয়ার্কার কাঙ্ক্ষিত মডেল ডিরেক্টরিতে সেভ করবে, আর অন্য ওয়ার্কাররা মডেলটিকে টেম্পোরারি ডিরেক্টরিতে সেভ করবে। এই টেম্পোরারি ডিরেক্টরিগুলো অনন্য হওয়া জরুরি, যাতে একাধিক ওয়ার্কার একই লোকেশনে লিখতে না পারে। সেভ করার ক্ষেত্রে কালেক্টিভ অপারেশন থাকতে পারে, যার অর্থ হলো শুধু চিফ নয়, সব ওয়ার্কারকেই সেভ করতে হবে।
_is_chief(),_get_temp_dir(),write_filepath()ফাংশনগুলো এবংmain()ফাংশন—এই সবগুলোতেই বয়লারপ্লেট কোড থাকে যা মডেল সেভ করতে সাহায্য করে।
মনে রাখবেন যে, আপনি যদি অন্য কোনো পরিবেশে MultiWorkerMirroredStrategy ব্যবহার করে থাকেন, তাহলে আপনাকে হয়তো TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবলটি সেট করতে হয়েছিল। Vertex AI আপনার জন্য স্বয়ংক্রিয়ভাবে TF_CONFIG সেট করে দেয়, তাই আপনার ক্লাস্টারের প্রতিটি মেশিনে এই ভেরিয়েবলটি সংজ্ঞায়িত করার প্রয়োজন নেই।
ধাপ ৪: কন্টেইনারটি তৈরি করুন
আপনার প্রোজেক্টের জন্য একটি এনভ ভ্যারিয়েবল নির্ধারণ করতে, আপনার টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালান এবং অবশ্যই your-cloud-project এর জায়গায় আপনার প্রোজেক্টের আইডি বসাবেন:
PROJECT_ID='your-cloud-project'
গুগল কন্টেইনার রেজিস্ট্রি-তে আপনার কন্টেইনার ইমেজের URI দিয়ে একটি ভেরিয়েবল নির্ধারণ করুন:
IMAGE_URI="gcr.io/$PROJECT_ID/multiworker:cassava"
ডকার কনফিগার করুন
gcloud auth configure-docker
এরপর, আপনার cassava ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালিয়ে কন্টেইনারটি বিল্ড করুন:
docker build ./ -t $IMAGE_URI
সবশেষে, এটিকে গুগল কন্টেইনার রেজিস্ট্রি-তে পুশ করুন:
docker push $IMAGE_URI
কন্টেইনারটি কন্টেইনার রেজিস্ট্রি-তে পুশ করা হয়ে গেলে, আপনি এখন ট্রেনিং জবটি শুরু করার জন্য প্রস্তুত।
৬. ভার্টেক্স এআই-তে একটি মাল্টি-ওয়ার্কার ট্রেনিং জব চালান।
এই ল্যাবে গুগল কন্টেইনার রেজিস্ট্রি-তে একটি কাস্টম কন্টেইনারের মাধ্যমে কাস্টম ট্রেনিং ব্যবহার করা হয়, কিন্তু আপনি প্রি-বিল্ট কন্টেইনারগুলো দিয়েও একটি ট্রেনিং জব চালাতে পারেন।
শুরু করতে, আপনার ক্লাউড কনসোলের Vertex বিভাগের Training সেকশনে যান:

ধাপ ১: প্রশিক্ষণ কাজটি কনফিগার করুন
আপনার প্রশিক্ষণ কাজের জন্য প্যারামিটারগুলো প্রবেশ করাতে 'তৈরি করুন'- এ ক্লিক করুন।
- ডেটাসেট-এর অধীনে, কোনো পরিচালিত ডেটাসেট নয় নির্বাচন করুন।
- তারপর আপনার প্রশিক্ষণ পদ্ধতি হিসেবে কাস্টম প্রশিক্ষণ (উন্নত) নির্বাচন করুন এবং চালিয়ে যান-এ ক্লিক করুন।
- মডেলের নামের জায়গায়
multiworker-cassava(অথবা আপনার মডেলের জন্য পছন্দসই নাম) লিখুন। - চালিয়ে যান ক্লিক করুন
কন্টেইনার সেটিংস ধাপে, কাস্টম কন্টেইনার নির্বাচন করুন:

প্রথম বক্সে ( কন্টেইনার ইমেজ ), পূর্ববর্তী বিভাগ থেকে আপনার IMAGE_URI ভেরিয়েবলের মান লিখুন। এটি হবে: gcr.io/your-cloud-project/multiworker:cassava , সাথে আপনার নিজের প্রজেক্ট আইডি। বাকি ফিল্ডগুলো খালি রেখে ' Continue' ক্লিক করুন।
আবার 'Continue' ক্লিক করে Hhyperparameters ধাপটি এড়িয়ে যান।
ধাপ ২: কম্পিউট ক্লাস্টার কনফিগার করুন
ভার্টেক্স এআই বিভিন্ন ধরনের মেশিন টাস্ক সম্পন্ন করার জন্য ৪টি ওয়ার্কার পুল প্রদান করে।
ওয়ার্কার পুল ০ প্রাইমারি, চিফ, শিডিউলার বা "মাস্টার" কনফিগার করে। MultiWorkerMirroredStrategy তে, সমস্ত মেশিনকে ওয়ার্কার হিসেবে মনোনীত করা হয়, যেগুলো হলো সেই ফিজিক্যাল মেশিন যেখানে রেপ্লিকেটেড কম্পিউটেশন এক্সিকিউট করা হয়। প্রতিটি মেশিন ওয়ার্কার হওয়ার পাশাপাশি, এমন একটি ওয়ার্কার থাকা প্রয়োজন যা কিছু অতিরিক্ত কাজ করে, যেমন চেকপয়েন্ট সেভ করা এবং টেনসরবোর্ডে সামারি ফাইল লেখা। এই মেশিনটি চিফ নামে পরিচিত। চিফ ওয়ার্কার সবসময় একজনই থাকে, তাই ওয়ার্কার পুল ০-এর জন্য আপনার ওয়ার্কারের সংখ্যা সর্বদা ১ হবে।
Compute and pricing- এ, নির্বাচিত অঞ্চলটি অপরিবর্তিত রাখুন এবং Worker pool 0 নিম্নরূপভাবে কনফিগার করুন:

ওয়ার্কার পুল ১-এ আপনি আপনার ক্লাস্টারের ওয়ার্কারদের কনফিগার করেন।
ওয়ার্কার পুল ১ নিম্নরূপভাবে কনফিগার করুন:

ক্লাস্টারটি এখন দুটি শুধুমাত্র সিপিইউ মেশিন দিয়ে কনফিগার করা হয়েছে। যখন ট্রেনিং অ্যাপ্লিকেশন কোডটি চালানো হবে, তখন MultiWorkerMirroredStrategy ট্রেনিংটি উভয় মেশিনের মধ্যে ভাগ করে দেবে।
MultiWorkerMirroredStrategy শুধুমাত্র চিফ এবং ওয়ার্কার টাস্ক টাইপ রয়েছে, তাই অতিরিক্ত ওয়ার্কার পুল কনফিগার করার প্রয়োজন নেই। তবে, যদি আপনি TensorFlow-এর ParameterServerStrategy ব্যবহার করেন, তাহলে আপনাকে আপনার প্যারামিটার সার্ভারগুলো ওয়ার্কার পুল ২- এ কনফিগার করতে হবে। আর যদি আপনি আপনার ক্লাস্টারে একটি ইভ্যালুয়েটর যোগ করতে চান, তাহলে আপনাকে সেই মেশিনটি ওয়ার্কার পুল ৩- এ কনফিগার করতে হবে।
হাইপারপ্যারামিটার টিউনিং কাজটি শুরু করতে ' স্টার্ট ট্রেনিং'- এ ক্লিক করুন। আপনার কনসোলের 'ট্রেনিং' বিভাগের 'ট্রেনিং পাইপলাইনস' ট্যাবের অধীনে আপনি আপনার সদ্য চালু করা কাজটি দেখতে পাবেন:

🎉 অভিনন্দন! 🎉
আপনি শিখেছেন কীভাবে ভার্টেক্স এআই ব্যবহার করে:
- একটি কাস্টম কন্টেইনারে দেওয়া ট্রেনিং কোডের জন্য একটি মাল্টি-ওয়ার্কার ট্রেনিং জব চালু করুন। এই উদাহরণে আপনি একটি TensorFlow মডেল ব্যবহার করেছেন, কিন্তু আপনি কাস্টম বা বিল্ট-ইন কন্টেইনার ব্যবহার করে যেকোনো ফ্রেমওয়ার্ক দিয়ে তৈরি মডেলকে ট্রেইন করতে পারেন।
Vertex-এর বিভিন্ন অংশ সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।
৭. [ঐচ্ছিক] ভার্টেক্স এসডিকে ব্যবহার করুন
পূর্ববর্তী অংশে দেখানো হয়েছে কীভাবে UI-এর মাধ্যমে ট্রেনিং জবটি চালু করতে হয়। এই অংশে, আপনি Vertex Python API ব্যবহার করে ট্রেনিং জবটি সাবমিট করার একটি বিকল্প পদ্ধতি দেখতে পাবেন।
আপনার নোটবুক ইনস্ট্যান্সে ফিরে যান এবং লঞ্চার থেকে একটি TensorFlow 2 নোটবুক তৈরি করুন:

Vertex AI SDK ইম্পোর্ট করুন।
from google.cloud import aiplatform
মাল্টি-ওয়ার্কার ট্রেনিং জবটি চালু করতে, আপনাকে প্রথমে ওয়ার্কার পুল স্পেকটি সংজ্ঞায়িত করতে হবে। উল্লেখ্য যে, স্পেকটিতে GPU-এর ব্যবহার সম্পূর্ণ ঐচ্ছিক এবং আপনি যদি পূর্ববর্তী বিভাগে দেখানো অনুযায়ী শুধুমাত্র CPU-ভিত্তিক ক্লাস্টার চান, তাহলে accelerator_type এবং accelerator_count বাদ দিতে পারেন।
# The spec of the worker pools including machine type and Docker image
# Be sure to replace {YOUR-PROJECT-ID} with your project ID.
worker_pool_specs=[
{
"replica_count": 1,
"machine_spec": {
"machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
},
"container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
},
{
"replica_count": 1,
"machine_spec": {
"machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
},
"container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
}
]
এরপর, একটি CustomJob তৈরি করে চালান। আপনাকে {YOUR_BUCKET} এর জায়গায় আপনার প্রোজেক্টের স্টেজিং-এর জন্য ব্যবহৃত বাকেটটির নাম বসাতে হবে। আপনি আগে তৈরি করা বাকেটটিই ব্যবহার করতে পারেন।
# Replace YOUR_BUCKET
my_multiworker_job = aiplatform.CustomJob(display_name='multiworker-cassava-sdk',
worker_pool_specs=worker_pool_specs,
staging_bucket='gs://{YOUR_BUCKET}')
my_multiworker_job.run()
আপনার কনসোলের ট্রেনিং সেকশনের কাস্টম জবস ট্যাবের অধীনে আপনার ট্রেনিং জবটি দেখতে পাবেন:

৮. পরিচ্ছন্নতা
যেহেতু আমরা নোটবুকটিকে ৬০ মিনিট নিষ্ক্রিয় থাকার পর টাইম আউট হওয়ার জন্য কনফিগার করেছি, তাই ইনস্ট্যান্সটি শাট ডাউন করার বিষয়ে আমাদের চিন্তা করার দরকার নেই। আপনি যদি ইনস্ট্যান্সটি ম্যানুয়ালি শাট ডাউন করতে চান, তাহলে কনসোলের Vertex AI Workbench সেকশনে থাকা Stop বাটনে ক্লিক করুন। আর যদি নোটবুকটি পুরোপুরি মুছে ফেলতে চান, তাহলে Delete বাটনে ক্লিক করুন।

স্টোরেজ বাকেটটি ডিলিট করতে, আপনার ক্লাউড কনসোলের নেভিগেশন মেনু ব্যবহার করে স্টোরেজ-এ যান, আপনার বাকেটটি সিলেক্ট করুন এবং ডিলিট-এ ক্লিক করুন:
