১. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি অটোপ্যাকেজিং ফিচার ব্যবহার করে ভার্টেক্স এআই ট্রেনিং-এ কীভাবে একটি কাস্টম ট্রেনিং জব চালাতে হয় তা শিখবেন। ভার্টেক্স এআই-এর কাস্টম ট্রেনিং জবগুলো কন্টেইনার ব্যবহার করে। আপনি যদি নিজের ইমেজ তৈরি করতে না চান, তাহলে অটোপ্যাকেজিং ব্যবহার করতে পারেন, যা আপনার কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করবে, ইমেজটিকে কন্টেইনার রেজিস্ট্রি-তে পুশ করবে এবং সেই ইমেজের উপর ভিত্তি করে একটি CustomJob শুরু করবে।
আপনি যা শিখবেন
আপনি শিখবেন কীভাবে:
- আপনার কোড পরীক্ষা করতে লোকাল মোড ব্যবহার করুন।
- অটোপ্যাকেজিং সহ একটি কাস্টম প্রশিক্ষণ জব কনফিগার ও চালু করুন।
গুগল ক্লাউডে এই ল্যাবটি চালানোর মোট খরচ প্রায় ২ ডলার ।
২. ব্যবহারের ক্ষেত্রের সংক্ষিপ্ত বিবরণ
Hugging Face- এর লাইব্রেরিগুলো ব্যবহার করে, আপনি IMDB ডেটাসেটের উপর একটি Bert মডেল ফাইন-টিউন করবেন। মডেলটি ভবিষ্যদ্বাণী করবে যে একটি সিনেমার রিভিউ ইতিবাচক নাকি নেতিবাচক। ডেটাসেটটি Hugging Face ডেটাসেটস লাইব্রেরি থেকে এবং Bert মডেলটি Hugging Face ট্রান্সফর্মারস লাইব্রেরি থেকে ডাউনলোড করতে হবে।
৩. ভার্টেক্স এআই-এর পরিচিতি
এই ল্যাবটি গুগল ক্লাউডে উপলব্ধ সর্বাধুনিক এআই প্রোডাক্টটি ব্যবহার করে। ভার্টেক্স এআই গুগল ক্লাউডের এমএল অফারিংগুলোকে একটি নির্বিঘ্ন ডেভেলপমেন্ট অভিজ্ঞতায় একীভূত করে। পূর্বে, অটোএমএল (AutoML) দিয়ে প্রশিক্ষিত মডেল এবং কাস্টম মডেলগুলো আলাদা সার্ভিসের মাধ্যমে অ্যাক্সেস করা যেত। নতুন অফারিংটি অন্যান্য নতুন প্রোডাক্টের সাথে উভয়কে একটি একক এপিআই-তে একত্রিত করেছে। আপনি আপনার বিদ্যমান প্রোজেক্টগুলোও ভার্টেক্স এআই-তে মাইগ্রেট করতে পারেন। আপনার কোনো মতামত থাকলে, অনুগ্রহ করে সাপোর্ট পেজটি দেখুন।
ভার্টেক্স এআই-এর এন্ড-টু-এন্ড এমএল ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন ধরনের পণ্য রয়েছে। এই ল্যাবটি ট্রেনিং এবং ওয়ার্কবেঞ্চের উপর আলোকপাত করবে।

৪. আপনার পরিবেশ প্রস্তুত করুন
এই কোডল্যাবটি চালানোর জন্য আপনার বিলিং চালু করা একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট প্রয়োজন হবে। প্রজেক্ট তৈরি করতে, এখানের নির্দেশাবলী অনুসরণ করুন।
ধাপ ১: কম্পিউট ইঞ্জিন এপিআই সক্রিয় করুন
Compute Engine- এ যান এবং যদি এটি আগে থেকে চালু না থাকে, তাহলে Enable নির্বাচন করুন।
ধাপ ২: Vertex AI API সক্রিয় করুন
আপনার ক্লাউড কনসোলের Vertex AI বিভাগে যান এবং Enable Vertex AI API-তে ক্লিক করুন।

ধাপ ৩: কন্টেইনার রেজিস্ট্রি এপিআই সক্রিয় করুন
কন্টেইনার রেজিস্ট্রি- তে যান এবং যদি আগে থেকে সক্ষম করা না থাকে তবে তা নির্বাচন করুন। আপনার কাস্টম ট্রেনিং জবের জন্য একটি কন্টেইনার তৈরি করতে আপনি এটি ব্যবহার করবেন।
ধাপ ৪: একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন
আপনার ক্লাউড কনসোলের Vertex AI সেকশন থেকে Workbench-এ ক্লিক করুন:

সেখান থেকে, ম্যানেজড নোটবুকস-এ ক্লিক করুন:

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

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

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

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

আপনি প্রথমবার কোনো নতুন ইনস্ট্যান্স ব্যবহার করার সময়, আপনাকে প্রমাণীকরণের জন্য বলা হবে।

৫. প্রশিক্ষণ কোড লিখুন
শুরু করতে, লঞ্চার মেনু থেকে আপনার নোটবুক ইনস্ট্যান্সে একটি টার্মিনাল উইন্ডো খুলুন:

autopkg-codelab নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এর ভেতরে প্রবেশ করুন।
mkdir autopkg-codelab
cd autopkg-codelab
আপনার টার্মিনাল থেকে, ট্রেনিং কোডের জন্য একটি ডিরেক্টরি এবং কোড যোগ করার জন্য একটি পাইথন ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
mkdir trainer
touch trainer/task.py
আপনার autopkg-codelab/ ডিরেক্টরিতে এখন নিম্নলিখিত ফাইলগুলো থাকা উচিত:
+ trainer/
+ task.py
এরপর, আপনার তৈরি করা task.py ফাইলটি খুলুন এবং নিচের কোডটি কপি করুন।
import argparse
import tensorflow as tf
from datasets import load_dataset
from transformers import AutoTokenizer
from transformers import TFAutoModelForSequenceClassification
CHECKPOINT = "bert-base-cased"
def get_args():
'''Parses args.'''
parser = argparse.ArgumentParser()
parser.add_argument(
'--epochs',
required=False,
default=3,
type=int,
help='number of epochs')
parser.add_argument(
'--job_dir',
required=True,
type=str,
help='bucket to store saved model, include gs://')
args = parser.parse_args()
return args
def create_datasets():
'''Creates a tf.data.Dataset for train and evaluation.'''
raw_datasets = load_dataset('imdb')
tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
tokenized_datasets = raw_datasets.map((lambda examples: tokenize_function(examples, tokenizer)), batched=True)
# To speed up training, we use only a portion of the data.
# Use full_train_dataset and full_eval_dataset if you want to train on all the data.
small_train_dataset = tokenized_datasets['train'].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets['test'].shuffle(seed=42).select(range(1000))
full_train_dataset = tokenized_datasets['train']
full_eval_dataset = tokenized_datasets['test']
tf_train_dataset = small_train_dataset.remove_columns(['text']).with_format("tensorflow")
tf_eval_dataset = small_eval_dataset.remove_columns(['text']).with_format("tensorflow")
train_features = {x: tf_train_dataset[x] for x in tokenizer.model_input_names}
train_tf_dataset = tf.data.Dataset.from_tensor_slices((train_features, tf_train_dataset["label"]))
train_tf_dataset = train_tf_dataset.shuffle(len(tf_train_dataset)).batch(8)
eval_features = {x: tf_eval_dataset[x] for x in tokenizer.model_input_names}
eval_tf_dataset = tf.data.Dataset.from_tensor_slices((eval_features, tf_eval_dataset["label"]))
eval_tf_dataset = eval_tf_dataset.batch(8)
return train_tf_dataset, eval_tf_dataset
def tokenize_function(examples, tokenizer):
'''Tokenizes text examples.'''
return tokenizer(examples['text'], padding='max_length', truncation=True)
def main():
args = get_args()
train_tf_dataset, eval_tf_dataset = create_datasets()
model = TFAutoModelForSequenceClassification.from_pretrained(CHECKPOINT, num_labels=2)
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=tf.metrics.SparseCategoricalAccuracy(),
)
model.fit(train_tf_dataset, validation_data=eval_tf_dataset, epochs=args.epochs)
model.save(f'{args.job_dir}/model_output')
if __name__ == "__main__":
main()
কোডটি সম্পর্কে কয়েকটি বিষয় লক্ষণীয়:
-
CHECKPOINTহলো সেই মডেল যা আমরা সূক্ষ্মভাবে সমন্বয় করতে চাই। এক্ষেত্রে, আমরা বার্টকে ব্যবহার করি। -
TFAutoModelForSequenceClassificationমেথডটি TensorFlow-তে নির্দিষ্ট ল্যাঙ্গুয়েজ মডেল আর্কিটেকচার ও ওয়েট লোড করবে এবং এর উপরে র্যান্ডমভাবে ইনিশিয়ালাইজ করা ওয়েটসহ একটি ক্লাসিফিকেশন হেড যুক্ত করবে। এই ক্ষেত্রে, আমাদের একটি বাইনারি ক্লাসিফিকেশন সমস্যা (পজিটিভ বা নেগেটিভ) রয়েছে, তাই আমরা এই ক্লাসিফায়ারের জন্যnum_labels=2নির্দিষ্ট করেছি।
৬. প্রশিক্ষণ কোড কন্টেইনারাইজ করে স্থানীয়ভাবে চালান
আপনি আপনার ট্রেনিং কোডের উপর ভিত্তি করে একটি ডকার কন্টেইনার ইমেজ তৈরি করতে এবং আপনার লোকাল মেশিনে ইমেজটিকে একটি কন্টেইনার হিসেবে চালাতে gcloud ai custom-jobs local-run কমান্ডটি ব্যবহার করতে পারেন। লোকালি একটি কন্টেইনার চালালে তা Vertex AI Training-এ যেভাবে চলে, ঠিক সেভাবেই আপনার ট্রেনিং কোডটি এক্সিকিউট হয় এবং Vertex AI-তে কাস্টম ট্রেনিং করার আগে আপনার কোডের সমস্যাগুলো ডিবাগ করতে এটি আপনাকে সাহায্য করতে পারে।
আমাদের ট্রেনিং জবে, আমরা আমাদের প্রশিক্ষিত মডেলটিকে একটি ক্লাউড স্টোরেজ বাকেটে এক্সপোর্ট করব। আপনার টার্মিনাল থেকে, আপনার প্রোজেক্টের জন্য একটি এনভ ভ্যারিয়েবল নির্ধারণ করতে নিম্নলিখিত কমান্ডটি চালান, এবং অবশ্যই your-cloud-project এর জায়গায় আপনার প্রোজেক্টের আইডি বসাবেন:
PROJECT_ID='your-cloud-project'
এরপর, একটি বাকেট তৈরি করুন। আপনার যদি আগে থেকেই কোনো বাকেট থাকে, তবে তার পরিবর্তে সেটি ব্যবহার করতে পারেন।
BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME
যখন আমরা Vertex AI Training-এ কাস্টম ট্রেনিং জবটি চালাব, তখন আমরা একটি GPU ব্যবহার করব। কিন্তু যেহেতু আমরা আমাদের Workbench ইনস্ট্যান্সটি GPU-সহ নির্দিষ্ট করিনি, তাই লোকাল টেস্টিংয়ের জন্য আমরা একটি CPU-ভিত্তিক ইমেজ ব্যবহার করব। এই উদাহরণে, আমরা একটি Vertex AI Training প্রি-বিল্ট কন্টেইনার ব্যবহার করছি।
কন্টেইনারের ভিত্তি হিসেবে ব্যবহার করার জন্য ডকার ইমেজের URI সেট করতে নিম্নলিখিতটি চালান।
BASE_CPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-7:latest
এরপর লোকাল রান কমান্ড দিয়ে তৈরি হওয়া ডকার ইমেজটির জন্য একটি নাম সেট করুন।
OUTPUT_IMAGE=$PROJECT_ID-local-package-cpu:latest
আমাদের ট্রেনিং কোডে হাগিং ফেস ডেটাসেট এবং ট্রান্সফর্মার লাইব্রেরি ব্যবহার করা হয়েছে। আমরা বেস ইমেজ হিসেবে যে ছবিটি নির্বাচন করেছি, তাতে এই লাইব্রেরিগুলো অন্তর্ভুক্ত নেই, তাই আমাদের এগুলো রিকোয়ারমেন্ট হিসেবে প্রদান করতে হবে। এটি করার জন্য, আমরা আমাদের autopkg-codelab ডিরেক্টরিতে একটি requirements.txt ফাইল তৈরি করব।
আপনি autopkg-codelab ডিরেক্টরিতে আছেন কিনা তা নিশ্চিত করুন এবং আপনার টার্মিনালে নিম্নলিখিতটি টাইপ করুন।
touch requirements.txt
আপনার autopkg-codelab ডিরেক্টরিতে এখন নিম্নলিখিত বিষয়গুলো থাকা উচিত:
+ requirements.txt
+ trainer/
+ task.py
রিকোয়ারমেন্টস ফাইলটি খুলুন এবং নিম্নলিখিত তথ্য পেস্ট করুন।
datasets==1.18.2
transformers==4.16.2
অবশেষে, আমাদের ওয়ার্কবেঞ্চ পরিচালিত ইনস্ট্যান্সে প্রশিক্ষণ শুরু করতে gcloud ai custom-jobs local-run কমান্ডটি চালান।
gcloud ai custom-jobs local-run \
--executor-image-uri=$BASE_CPU_IMAGE \
--python-module=trainer.task \
--output-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME
আপনি ডকার ইমেজটি তৈরি হতে দেখবেন। আমরা requirements.txt ফাইলে যে ডিপেন্ডেন্সিগুলো যোগ করেছি, সেগুলো pip দ্বারা ইনস্টল করা হবে। আপনি প্রথমবার এই কমান্ডটি চালালে এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগতে পারে। ইমেজটি তৈরি হয়ে গেলে, task.py ফাইলটি চলতে শুরু করবে এবং আপনি মডেলের প্রশিক্ষণ দেখতে পাবেন। আপনি এইরকম কিছু দেখতে পাবেন:

যেহেতু আমরা স্থানীয়ভাবে GPU ব্যবহার করছি না, তাই মডেল প্রশিক্ষণে অনেক সময় লাগবে। কাজটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করে আপনি Ctrl+c চেপে স্থানীয় প্রশিক্ষণ বাতিল করতে পারেন।
উল্লেখ্য যে, আপনি যদি আরও পরীক্ষা করতে চান, তাহলে পুনরায় প্যাকেজ না করেই উপরে তৈরি করা ইমেজটি সরাসরি চালাতে পারেন।
gcloud beta ai custom-jobs local-run \
--executor-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME \
--epochs=1
৭. একটি কাস্টম জব তৈরি করুন
এখন যেহেতু আমরা লোকাল মোড পরীক্ষা করে দেখেছি, আমরা ভার্টেক্স এআই ট্রেনিং-এ আমাদের কাস্টম ট্রেনিং জব চালু করার জন্য অটোপ্যাকেজিং ফিচারটি ব্যবহার করব। একটিমাত্র কমান্ডের মাধ্যমে, এই ফিচারটি যা করবে:
- আপনার কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করুন।
- ইমেজটি কন্টেইনার রেজিস্ট্রি-তে পুশ করুন।
- ছবির উপর ভিত্তি করে একটি
CustomJobশুরু করুন।
টার্মিনালে ফিরে যান এবং আপনার autopkg-codelab ডিরেক্টরির এক স্তর উপরে cd কমান্ড ব্যবহার করে প্রবেশ করুন।
+ autopkg-codelab
+ requirements.txt
+ trainer/
+ task.py
কাস্টম ট্রেনিং জবের বেস ইমেজ হিসেবে Vertex AI Training-এর প্রি-বিল্ট TensorFlow GPU ইমেজটি নির্দিষ্ট করুন।
BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest
এরপর, gcloud ai custom-jobs create কমান্ডটি চালান। প্রথমে, এই কমান্ডটি ট্রেনিং কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করবে। বেস ইমেজটি হলো Vertex AI Training প্রি-বিল্ট কন্টেইনার, যা আমরা BASE_GPU_IMAGE হিসেবে সেট করেছি। তারপর অটোপ্যাকেজিং ফিচারটি আমাদের requirements.txt ফাইলে উল্লেখিত ডেটাসেট এবং ট্রান্সফর্মার লাইব্রেরিগুলো pip install করবে।
gcloud ai custom-jobs create \
--region=us-central1 \
--display-name=fine_tune_bert \
--args=--job_dir=$BUCKET_NAME \
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,accelerator-type=NVIDIA_TESLA_V100,executor-image-uri=$BASE_GPU_IMAGE,local-package-path=autopkg-codelab,python-module=trainer.task
চলুন worker-pool-spec আর্গুমেন্টটি দেখে নেওয়া যাক। এটি কাস্টম জব দ্বারা ব্যবহৃত ওয়ার্কার পুল কনফিগারেশন নির্ধারণ করে। ডিস্ট্রিবিউটেড ট্রেনিংয়ের জন্য একাধিক ওয়ার্কার পুলসহ একটি কাস্টম জব তৈরি করতে আপনি একাধিক ওয়ার্কার পুল স্পেক নির্দিষ্ট করতে পারেন। এই উদাহরণে, আমরা শুধুমাত্র একটি ওয়ার্কার পুল নির্দিষ্ট করেছি, কারণ আমাদের ট্রেনিং কোডটি ডিস্ট্রিবিউটেড ট্রেনিংয়ের জন্য কনফিগার করা নেই।
এই স্পেসিফিকেশনের কয়েকটি গুরুত্বপূর্ণ ক্ষেত্র নিচে দেওয়া হলো:
-
machine-type(আবশ্যক): মেশিনের ধরণ। সমর্থিত ধরণগুলোর জন্য এখানে ক্লিক করুন । -
replica-count: এই ওয়ার্কার পুলের জন্য ব্যবহৃত ওয়ার্কার রেপ্লিকার সংখ্যা, ডিফল্ট মান হলো ১। -
accelerator-type: জিপিইউ-এর প্রকার। সমর্থিত প্রকারগুলো জানতে এখানে ক্লিক করুন । এই উদাহরণে, আমরা একটি এনভিডিয়া টেসলা ভি১০০ জিপিইউ নির্দিষ্ট করেছি। -
accelerator-count: ওয়ার্কার পুলের প্রতিটি ভিএম-এর জন্য ব্যবহৃত জিপিইউ-এর সংখ্যা, যার ডিফল্ট মান হলো ১। -
executor-image-uri: একটি কন্টেইনার ইমেজের URI, যা প্রদত্ত প্যাকেজটি চালাবে। এটি আমাদের বেস ইমেজে সেট করা আছে। -
local-package-path: যে ফোল্ডারে প্রশিক্ষণ কোড থাকে, তার স্থানীয় পাথ। -
python-module: প্রদত্ত প্যাকেজের মধ্যে যে পাইথন মডিউলটি চালাতে হবে তার নাম।
লোকাল কমান্ড চালানোর মতোই, আপনি দেখবেন ডকার ইমেজটি তৈরি হচ্ছে এবং তারপর ট্রেনিং জবটি চালু হয়ে যাবে। তবে ট্রেনিং জবের আউটপুট দেখার পরিবর্তে, আপনি নিম্নলিখিত বার্তাটি দেখতে পাবেন যা নিশ্চিত করবে যে আপনার ট্রেনিং জবটি চালু হয়েছে। মনে রাখবেন যে, আপনি যখন প্রথমবার custom-jobs create কমান্ডটি চালাবেন, তখন ইমেজটি তৈরি এবং পুশ হতে কয়েক মিনিট সময় লাগতে পারে।

ক্লাউড কনসোলের Vertex AI Training বিভাগে ফিরে যান এবং CUSTOM JOBS-এর অধীনে আপনার জবটি চলতে দেখবেন।

কাজটি সম্পন্ন করতে প্রায় ২০ মিনিট সময় লাগবে।
কাজটি সম্পন্ন হলে, আপনার বাকেটের model_output ডিরেক্টরিতে নিম্নলিখিত সংরক্ষিত মডেল আর্টিফ্যাক্টগুলো দেখতে পাবেন।

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

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