Vertex AI: Vertex AI ট্রেনিং-এ Hugging Face এর সাথে বার্টকে সূক্ষ্ম সুর করতে অটোপ্যাকেজিং ব্যবহার করুন

1। সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি শিখবেন কিভাবে অটোপ্যাকেজিং বৈশিষ্ট্য সহ Vertex AI প্রশিক্ষণে একটি কাস্টম প্রশিক্ষণের কাজ চালাতে হয়। ভার্টেক্স এআই-এর কাস্টম প্রশিক্ষণের কাজগুলি পাত্রে ব্যবহার করে। আপনি যদি নিজের ছবি তৈরি করতে না চান, আপনি অটোপ্যাকেজিং ব্যবহার করতে পারেন, যা আপনার কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করবে, ছবিটিকে কনটেইনার রেজিস্ট্রিতে ঠেলে দেবে এবং ছবির উপর ভিত্তি করে একটি CustomJob শুরু করবে।

তুমি কি শিখেছ

আপনি কিভাবে শিখবেন:

Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $2

2. কেস ওভারভিউ ব্যবহার করুন

Hugging Face থেকে লাইব্রেরি ব্যবহার করে, আপনি IMDB ডেটাসেটে একটি বার্ট মডেল ভালোভাবে টিউন করবেন। মডেলটি ভবিষ্যদ্বাণী করবে যে একটি চলচ্চিত্র পর্যালোচনা ইতিবাচক বা নেতিবাচক কিনা। ডেটাসেটটি হাগিং ফেস ডেটাসেট লাইব্রেরি থেকে এবং বার্ট মডেলটি হাগিং ফেস ট্রান্সফরমার লাইব্রেরি থেকে ডাউনলোড করা হবে৷

3. ভার্টেক্স এআই-এর ভূমিকা

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

Vertex AI এন্ড-টু-এন্ড ML ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য অন্তর্ভুক্ত করে। এই ল্যাবটি প্রশিক্ষণ এবং ওয়ার্কবেঞ্চে ফোকাস করবে।

ভার্টেক্স পণ্য ওভারভিউ

4. আপনার পরিবেশ সেট আপ করুন

এই কোডল্যাব চালানোর জন্য আপনার একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে যাতে বিলিং সক্ষম থাকে৷ একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।

ধাপ 1: Compute Engine API সক্ষম করুন

কম্পিউট ইঞ্জিনে নেভিগেট করুন এবং সক্ষম নির্বাচন করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।

ধাপ 2: Vertex AI API সক্ষম করুন

আপনার ক্লাউড কনসোলের Vertex AI বিভাগে নেভিগেট করুন এবং Vertex AI API সক্ষম করুন ক্লিক করুন।

ভার্টেক্স এআই ড্যাশবোর্ড

ধাপ 3: কন্টেইনার রেজিস্ট্রি API সক্ষম করুন

কন্টেইনার রেজিস্ট্রিতে নেভিগেট করুন এবং সক্ষম নির্বাচন করুন যদি এটি ইতিমধ্যে না থাকে। আপনি আপনার কাস্টম প্রশিক্ষণ কাজের জন্য একটি ধারক তৈরি করতে এটি ব্যবহার করবেন।

ধাপ 4: একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন

আপনার ক্লাউড কনসোলের ভার্টেক্স এআই বিভাগ থেকে, ওয়ার্কবেঞ্চে ক্লিক করুন:

ভার্টেক্স এআই মেনু

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

নোটবুক_ইউআই

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

নতুন_নোটবুক

আপনার নোটবুকে একটি নাম দিন, এবং তারপর Advanced Settings এ ক্লিক করুন।

তৈরি_নোটবুক

উন্নত সেটিংসের অধীনে, নিষ্ক্রিয় শাটডাউন সক্ষম করুন এবং মিনিটের সংখ্যা 60 এ সেট করুন। এর অর্থ হল আপনার নোটবুক ব্যবহার না করার সময় স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে যাতে আপনার অপ্রয়োজনীয় খরচ না হয়।

নিষ্ক্রিয়_সময় শেষ

আপনি অন্যান্য উন্নত সেটিংসের মতোই ছেড়ে যেতে পারেন।

পরবর্তী, তৈরি করুন ক্লিক করুন।

একবার উদাহরণ তৈরি হয়ে গেলে, JupyterLab খুলুন নির্বাচন করুন।

open_jupyterlab

আপনি যখন প্রথমবার একটি নতুন উদাহরণ ব্যবহার করবেন, আপনাকে প্রমাণীকরণ করতে বলা হবে।

প্রমাণীকরণ

5. প্রশিক্ষণ কোড লিখুন

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

লঞ্চার_টার্মিনাল

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 নির্দিষ্ট করি।

6. স্থানীয়ভাবে প্রশিক্ষণ কোড কন্টেইনারাইজ করুন এবং চালান

আপনি আপনার প্রশিক্ষণ কোডের উপর ভিত্তি করে একটি ডকার কন্টেইনার চিত্র তৈরি করতে এবং আপনার স্থানীয় মেশিনে একটি ধারক হিসাবে চিত্রটি চালাতে gcloud ai custom-jobs local-run কমান্ডটি ব্যবহার করতে পারেন। স্থানীয়ভাবে একটি কন্টেইনার চালানো আপনার প্রশিক্ষণ কোডকে একইভাবে কার্যকর করে যেভাবে এটি Vertex AI প্রশিক্ষণে চলে এবং আপনি Vertex AI-তে কাস্টম প্রশিক্ষণ সম্পাদন করার আগে আপনার কোডের সমস্যাগুলি ডিবাগ করতে সাহায্য করতে পারে।

আমাদের প্রশিক্ষণের কাজে, আমরা আমাদের প্রশিক্ষিত মডেলটিকে একটি ক্লাউড স্টোরেজ বাকেটে রপ্তানি করব। আপনার টার্মিনাল থেকে, আপনার প্রকল্পের জন্য একটি env ভেরিয়েবল সংজ্ঞায়িত করতে নিম্নলিখিতটি চালান, আপনার প্রকল্পের আইডি দিয়ে your-cloud-project প্রতিস্থাপন নিশ্চিত করুন:

PROJECT_ID='your-cloud-project'

তারপরে, একটি বালতি তৈরি করুন। আপনার যদি একটি বিদ্যমান বালতি থাকে তবে এটি ব্যবহার করতে দ্বিধা বোধ করুন।

BUCKET_NAME="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET_NAME

যখন আমরা Vertex AI প্রশিক্ষণে কাস্টম প্রশিক্ষণের কাজ চালাই, তখন আমরা একটি GPU ব্যবহার করব। কিন্তু যেহেতু আমরা GPU-এর সাথে আমাদের ওয়ার্কবেঞ্চের উদাহরণ নির্দিষ্ট করিনি, তাই আমরা স্থানীয় পরীক্ষার জন্য একটি CPU ভিত্তিক চিত্র ব্যবহার করব। এই উদাহরণে, আমরা একটি ভার্টেক্স এআই ট্রেনিং প্রি-বিল্ট কন্টেইনার ব্যবহার করি।

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

স্থানীয়_প্রশিক্ষণ

কারণ আমরা স্থানীয়ভাবে একটি GPU ব্যবহার করছি না, মডেল প্রশিক্ষণ একটি দীর্ঘ সময় লাগবে. কাজ শেষ হওয়ার জন্য অপেক্ষা না করে আপনি Ctrl+c এবং স্থানীয় প্রশিক্ষণ বাতিল করতে পারেন।

মনে রাখবেন যে আপনি যদি আরও পরীক্ষা করতে চান তবে আপনি পুনরায় প্যাকেজিং ছাড়াই উপরে নির্মিত চিত্রটি সরাসরি চালাতে পারেন।

gcloud beta ai custom-jobs local-run \
--executor-image-uri=$OUTPUT_IMAGE \
-- \
--job_dir=$BUCKET_NAME \
--epochs=1

7. একটি কাস্টম কাজ তৈরি করুন

এখন যেহেতু আমরা স্থানীয় মোড পরীক্ষা করেছি, আমরা Vertex AI ট্রেনিং-এ আমাদের কাস্টম প্রশিক্ষণ কাজ চালু করতে অটোপ্যাকেজিং বৈশিষ্ট্যটি ব্যবহার করব। একটি একক কমান্ড সহ, এই বৈশিষ্ট্যটি হবে:

  • আপনার কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করুন।
  • চিত্রটিকে কন্টেইনার রেজিস্ট্রিতে পুশ করুন।
  • ছবির উপর ভিত্তি করে একটি CustomJob শুরু করুন।

টার্মিনালে ফিরে যান এবং আপনার autopkg-codelab ডিরেক্টরির উপরে এক স্তরে সিডি করুন।

+ autopkg-codelab
  + requirements.txt
  + trainer/
      + task.py

কাস্টম প্রশিক্ষণ কাজের জন্য বেস ইমেজ হিসাবে Vertex AI ট্রেনিং পূর্ব-নির্মিত TensorFlow GPU ইমেজ নির্দিষ্ট করুন।

BASE_GPU_IMAGE=us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-7:latest

এরপর, gcloud ai custom-jobs create কমান্ড চালান। প্রথমত, এই কমান্ডটি প্রশিক্ষণ কোডের উপর ভিত্তি করে একটি কাস্টম ডকার ইমেজ তৈরি করবে। বেস ইমেজ হল Vertex AI ট্রেনিং প্রি-বিল্ট কন্টেইনার যা আমরা BASE_GPU_IMAGE হিসাবে সেট করেছি। অটোপ্যাকেজিং বৈশিষ্ট্যটি তারপরে ডেটাসেট এবং ট্রান্সফরমার লাইব্রেরিগুলিকে পিপ ইনস্টল করবে যা আমাদের requirements.txt ফাইলে উল্লেখ করা হয়েছে।

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 : এই কর্মী পুলের জন্য ব্যবহার করার জন্য কর্মী প্রতিলিপির সংখ্যা, ডিফল্টভাবে মান হল 1।
  • accelerator-type : GPU-এর ধরন। সমর্থিত ধরনের জন্য এখানে ক্লিক করুন . এই উদাহরণে, আমরা একটি NVIDIA Tesla V100 GPU নির্দিষ্ট করেছি৷
  • accelerator-count : কর্মী পুলে প্রতিটি VM-এর জন্য ব্যবহার করার জন্য GPU-এর সংখ্যা, ডিফল্টভাবে মান হল 1।
  • executor-image-uri : একটি ধারক চিত্রের URI যা প্রদত্ত প্যাকেজ চালাবে। এটি আমাদের বেস ইমেজ সেট করা হয়.
  • local-package-path : একটি ফোল্ডারের স্থানীয় পাথ যা প্রশিক্ষণ কোড ধারণ করে।
  • python-module : প্রদত্ত প্যাকেজের মধ্যে চালানোর জন্য Python মডিউল নাম।

আপনি যখন স্থানীয় কমান্ড চালান তখন একইভাবে, আপনি ডকার ইমেজ তৈরি করা দেখতে পাবেন এবং তারপরে প্রশিক্ষণের কাজ শুরু হবে। প্রশিক্ষণ কাজের আউটপুট দেখার পরিবর্তে, আপনি নিম্নলিখিত বার্তাটি দেখতে পাবেন যে আপনার প্রশিক্ষণের কাজটি চালু হয়েছে। মনে রাখবেন যে আপনি প্রথমবার custom-jobs create কমান্ড চালালে, ছবিটি তৈরি এবং পুশ করতে কয়েক মিনিট সময় লাগতে পারে।

প্রশিক্ষণ_শুরু হয়েছে

ক্লাউড কনসোলের ভার্টেক্স এআই ট্রেনিং বিভাগে ফিরে যান এবং কাস্টম জবসের অধীনে আপনার কাজ চলছে দেখতে হবে।

প্রশিক্ষণ_চাকরি

কাজটি সম্পূর্ণ হতে প্রায় 20 মিনিট সময় লাগবে।

একবার সম্পূর্ণ হলে, আপনার বালতিতে model_output ডিরেক্টরিতে নিম্নলিখিত সংরক্ষিত মডেল আর্টিফ্যাক্টগুলি দেখতে হবে।

মডেল_আউটপুট

🎉 অভিনন্দন! 🎉

আপনি শিখেছেন কিভাবে Vertex AI ব্যবহার করতে হয়:

  • স্থানীয়ভাবে প্রশিক্ষণ কোড কন্টেইনারাইজ করুন এবং চালান
  • অটোপ্যাকেজিং সহ ভার্টেক্স এআই প্রশিক্ষণে প্রশিক্ষণের কাজ জমা দিন

Vertex AI এর বিভিন্ন অংশ সম্পর্কে আরও জানতে, ডকুমেন্টেশন দেখুন।

8. পরিষ্কার করা

যেহেতু আমরা নোটবুকটিকে 60 নিষ্ক্রিয় মিনিটের পরে টাইম আউট করার জন্য কনফিগার করেছি, আমাদের দৃষ্টান্তটি বন্ধ করার বিষয়ে চিন্তা করার দরকার নেই৷ আপনি যদি দৃষ্টান্তটি ম্যানুয়ালি বন্ধ করতে চান, তাহলে কনসোলের Vertex AI Workbench বিভাগে স্টপ বোতামে ক্লিক করুন। আপনি যদি নোটবুকটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে মুছুন বোতামটি ক্লিক করুন।

মুছে ফেলা

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

স্টোরেজ মুছুন