ভার্টেক্স এআই: টেনসরফ্লো সহ মাল্টি-ওয়ার্কার ট্রেনিং এবং ট্রান্সফার লার্নিং

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

এই ল্যাবে, আপনি একটি TensorFlow মডেলের জন্য একটি মাল্টি-ওয়ার্কার প্রশিক্ষণ কাজ চালানোর জন্য Vertex AI ব্যবহার করবেন।

তুমি যা শিখো

তুমি শিখবে কিভাবে:

  • বহু-কর্মী প্রশিক্ষণের জন্য প্রশিক্ষণ আবেদন কোড পরিবর্তন করুন
  • Vertex AI UI থেকে একটি মাল্টি-ওয়ার্কার ট্রেনিং জব কনফিগার এবং চালু করুন
  • Vertex SDK দিয়ে একটি মাল্টি-ওয়ার্কার প্রশিক্ষণ কাজ কনফিগার এবং চালু করুন

গুগল ক্লাউডে এই ল্যাবটি পরিচালনা করতে মোট খরচ প্রায় $5

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

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

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

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

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

এই ল্যাবে আপনি TensorFlow Datasets থেকে কাসাভা ডেটাসেটে একটি ইমেজ ক্লাসিফিকেশন মডেল প্রশিক্ষণের জন্য ট্রান্সফার লার্নিং ব্যবহার করবেন। আপনি যে আর্কিটেকচারটি ব্যবহার করবেন তা হল ইমেজনেট ডেটাসেটে পূর্বে প্রশিক্ষিত tf.keras.applications লাইব্রেরির একটি ResNet50 মডেল।

কেন বিতরণকৃত প্রশিক্ষণ?

যদি আপনার একটি মাত্র GPU থাকে, তাহলে TensorFlow এই অ্যাক্সিলারেটর ব্যবহার করে মডেল ট্রেনিং দ্রুততর করবে, কোন অতিরিক্ত কাজ ছাড়াই। তবে, যদি আপনি একটি একক মেশিনে বা একাধিক মেশিনে (প্রতিটি মেশিনে সম্ভাব্য একাধিক GPU সহ) একাধিক GPU ব্যবহার করে অতিরিক্ত সুবিধা পেতে চান, তাহলে আপনাকে tf.distribute ব্যবহার করতে হবে, যা একাধিক ডিভাইস জুড়ে গণনা চালানোর জন্য TensorFlow এর লাইব্রেরি। একটি ডিভাইস বলতে একটি CPU বা অ্যাক্সিলারেটর বোঝায়, যেমন GPU বা TPU, এমন একটি মেশিনে যেখানে TensorFlow কাজ চালাতে পারে।

ডিস্ট্রিবিউটেড ট্রেনিং শুরু করার সবচেয়ে সহজ উপায় হল একাধিক GPU ডিভাইস সহ একটি একক মেশিন। tf.distribute মডিউল থেকে একটি TensorFlow ডিস্ট্রিবিউশন কৌশল সমস্ত GPU জুড়ে ডেটা ডিস্ট্রিবিউশন এবং গ্রেডিয়েন্ট আপডেটের সমন্বয় পরিচালনা করবে। আপনি যদি একক হোস্ট ট্রেনিং আয়ত্ত করে থাকেন এবং আরও স্কেল করতে চান, তাহলে আপনার ক্লাস্টারে একাধিক মেশিন যুক্ত করলে আপনি আরও বেশি পারফরম্যান্স বুস্ট পেতে পারেন। আপনি কেবল CPU ব্যবহার করে এমন মেশিনের একটি ক্লাস্টার ব্যবহার করতে পারেন, অথবা প্রতিটিতে এক বা একাধিক GPU আছে। এই ল্যাবটি পরবর্তী কেসটি কভার করে এবং Vertex AI-তে একাধিক মেশিনে TensorFlow মডেলের প্রশিক্ষণ বিতরণ করার জন্য MultiWorkerMirroredStrategy কীভাবে ব্যবহার করবেন তা প্রদর্শন করে।

MultiWorkerMirroredStrategy হল একটি সিঙ্ক্রোনাস ডেটা প্যারালিজম কৌশল যা আপনি শুধুমাত্র কয়েকটি কোড পরিবর্তনের মাধ্যমে ব্যবহার করতে পারেন। আপনার ক্লাস্টারের প্রতিটি ডিভাইসে মডেলের একটি কপি তৈরি করা হয়। পরবর্তী গ্রেডিয়েন্ট আপডেটগুলি সিঙ্ক্রোনাস পদ্ধতিতে ঘটবে। এর অর্থ হল প্রতিটি ওয়ার্কার ডিভাইস ইনপুট ডেটার একটি ভিন্ন স্লাইসে মডেলের মধ্য দিয়ে ফরোয়ার্ড এবং ব্যাকওয়ার্ড পাস গণনা করে। এই প্রতিটি স্লাইস থেকে গণনা করা গ্রেডিয়েন্টগুলি তারপর একটি মেশিনের সমস্ত ডিভাইস এবং ক্লাস্টারের সমস্ত মেশিনে একত্রিত করা হয় এবং অল-রিডিউস নামে পরিচিত একটি প্রক্রিয়ায় হ্রাস করা হয় (সাধারণত গড়)। অপ্টিমাইজার তারপর এই হ্রাসকৃত গ্রেডিয়েন্টগুলির সাথে প্যারামিটার আপডেটগুলি সম্পাদন করে যার ফলে ডিভাইসগুলি সিঙ্কে থাকে। TensorFlow এর সাথে বিতরণ প্রশিক্ষণ সম্পর্কে আরও জানতে, নীচের ভিডিওটি দেখুন:

৪. আপনার পরিবেশ ঠিক করুন

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

ধাপ ১: কম্পিউট ইঞ্জিন API সক্ষম করুন

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

ধাপ ২: কন্টেইনার রেজিস্ট্রি API সক্রিয় করুন

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

ধাপ ৩: ভার্টেক্স এআই এপিআই সক্ষম করুন

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

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

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

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

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

যদি Notebooks API ইতিমধ্যেই না থাকে, তাহলে তা সক্রিয় করুন।

নোটবুক_এপিআই

একবার সক্রিয় হয়ে গেলে, MANAGED NOTEBOOKS এ ক্লিক করুন:

নোটবুক_UI

তারপর NEW NOTEBOOK নির্বাচন করুন।

নতুন_নোটবুক

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

নোটবুক তৈরি করুন

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

নিষ্ক্রিয়_সময়সীমা

যদি এটি ইতিমধ্যেই সক্রিয় না থাকে, তাহলে নিরাপত্তার অধীনে "টার্মিনাল সক্ষম করুন" নির্বাচন করুন।

সক্ষম_টার্মিনাল

আপনি অন্যান্য সমস্ত উন্নত সেটিংস যেমন আছে তেমন রেখে যেতে পারেন।

এরপর, Create এ ক্লিক করুন। ইনস্ট্যান্সটি প্রভিশন হতে কয়েক মিনিট সময় লাগবে।

একবার ইনস্ট্যান্স তৈরি হয়ে গেলে, Open JupyterLab নির্বাচন করুন।

ওপেন_জুপিটারল্যাব

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

প্রমাণীকরণ করা

৫. প্রশিক্ষণ আবেদন কোড কনটেইনারাইজ করুন

আপনার প্রশিক্ষণ অ্যাপ্লিকেশন কোডটি একটি ডকার কন্টেইনারে রেখে এবং এই কন্টেইনারটি Google Container Registry -এ পুশ করে আপনি Vertex-এ এই প্রশিক্ষণ কাজটি জমা দেবেন। এই পদ্ধতি ব্যবহার করে, আপনি যেকোনো ফ্রেমওয়ার্ক দিয়ে তৈরি একটি মডেলকে প্রশিক্ষণ দিতে পারেন।

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

নোটবুকে টার্মিনাল খুলুন

cassava নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এতে cd দিন:

mkdir cassava
cd cassava

ধাপ ১: একটি ডকারফাইল তৈরি করুন

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

আপনার টার্মিনাল থেকে, একটি খালি ডকারফাইল তৈরি করুন:

touch 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"]

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

ধাপ ২: একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন

এই প্রশিক্ষণ কাজে, আপনি প্রশিক্ষিত TensorFlow মডেলটি একটি ক্লাউড স্টোরেজ বাকেটে রপ্তানি করবেন। আপনার টার্মিনাল থেকে, আপনার প্রকল্পের জন্য একটি env ভেরিয়েবল সংজ্ঞায়িত করতে নিম্নলিখিতটি চালান, আপনার প্রকল্পের ID দিয়ে 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 এর সাথে কাজ করার জন্য প্রয়োজনীয়।

  1. ডেটা শারড করা প্রয়োজন, অর্থাৎ প্রতিটি কর্মীকে সম্পূর্ণ ডেটাসেটের একটি উপসেট বরাদ্দ করা হবে। অতএব, প্রতিটি ধাপে প্রতিটি কর্মী দ্বারা ওভারল্যাপিংবিহীন ডেটাসেট উপাদানের একটি গ্লোবাল ব্যাচ আকার প্রক্রিয়া করা হবে। এই শারডিং tf.data.experimental.AutoShardPolicy এর সাথে স্বয়ংক্রিয়ভাবে ঘটে, যা FILE বা DATA এ সেট করা যেতে পারে। এই উদাহরণে, create_dataset() ফাংশন AutoShardPolicy কে DATA এ সেট করে কারণ cassava ডেটাসেটটি একাধিক ফাইল হিসাবে ডাউনলোড করা হয় না। তবে, আপনি যদি নীতিটি DATA এ সেট না করেন, তাহলে ডিফল্ট AUTO নীতিটি শুরু হবে এবং শেষ ফলাফল একই হবে। আপনি MultiWorkerMirroredStrategy এর মাধ্যমে ডেটাসেট শারডিং সম্পর্কে আরও জানতে পারেন।
  2. main() ফাংশনে, MultiWorkerMirroredStrategy অবজেক্ট তৈরি করা হয়। এরপর, আপনি আপনার মডেল ভেরিয়েবল তৈরির কাজটি কৌশলের আওতায় অন্তর্ভুক্ত করবেন। এই গুরুত্বপূর্ণ ধাপটি TensorFlow-কে বলে যে কোন ভেরিয়েবলগুলিকে প্রতিলিপিগুলিতে মিরর করা উচিত।
  3. num_replicas_in_sync দ্বারা ব্যাচের আকার বৃদ্ধি করা হয়। এটি নিশ্চিত করে যে প্রতিটি প্রতিলিপি প্রতিটি ধাপে একই সংখ্যক উদাহরণ প্রক্রিয়া করে। TensorFlow-এ সিঙ্ক্রোনাস ডেটা প্যারালিজম কৌশল ব্যবহার করার সময় ব্যাচের আকার স্কেল করা একটি সর্বোত্তম অনুশীলন।
  4. মাল্টি-ওয়ার্কারের ক্ষেত্রে আপনার মডেল সংরক্ষণ করা একটু জটিল কারণ প্রতিটি কর্মীর জন্য গন্তব্য আলাদা হতে হবে। প্রধান কর্মী পছন্দসই মডেল ডিরেক্টরিতে সংরক্ষণ করবেন, যখন অন্যান্য কর্মীরা মডেলটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করবেন। একাধিক কর্মীকে একই স্থানে লেখা থেকে বিরত রাখার জন্য এই অস্থায়ী ডিরেক্টরিগুলি অনন্য হওয়া গুরুত্বপূর্ণ। সংরক্ষণে যৌথ ক্রিয়াকলাপ থাকতে পারে, যার অর্থ হল সমস্ত কর্মীকে সংরক্ষণ করতে হবে, কেবল প্রধানকে নয়। _is_chief() , _get_temp_dir() , write_filepath() , এবং main() ফাংশনগুলির মধ্যে বয়লারপ্লেট কোড রয়েছে যা মডেলটি সংরক্ষণ করতে সহায়তা করে।

মনে রাখবেন, যদি আপনি MultiWorkerMirroredStrategy অন্য কোন পরিবেশে ব্যবহার করে থাকেন, তাহলে আপনি TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করে থাকতে পারেন। Vertex AI আপনার জন্য স্বয়ংক্রিয়ভাবে TF_CONFIG সেট করে, তাই আপনার ক্লাস্টারের প্রতিটি মেশিনে এই ভেরিয়েবলটি সংজ্ঞায়িত করার প্রয়োজন নেই।

ধাপ ৪: পাত্র তৈরি করুন

আপনার টার্মিনাল থেকে, আপনার প্রোজেক্টের জন্য একটি env ভেরিয়েবল সংজ্ঞায়িত করতে নিম্নলিখিতটি চালান, আপনার প্রোজেক্টের ID দিয়ে 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

অবশেষে, এটিকে Google Container Registry-এ পুশ করুন:

docker push $IMAGE_URI

কন্টেইনারটি কন্টেইনার রেজিস্ট্রিতে পুশ করার সাথে সাথে, আপনি এখন প্রশিক্ষণের কাজ শুরু করার জন্য প্রস্তুত।

৬. ভার্টেক্স এআই-তে মাল্টি-ওয়ার্কার প্রশিক্ষণের কাজ পরিচালনা করুন

এই ল্যাবটি Google Container Registry-এর একটি কাস্টম কন্টেইনারের মাধ্যমে কাস্টম প্রশিক্ষণ ব্যবহার করে, তবে আপনি পূর্ব-নির্মিত কন্টেইনারগুলির সাহায্যেও একটি প্রশিক্ষণ কাজ চালাতে পারেন।

শুরু করতে, আপনার ক্লাউড কনসোলের ভার্টেক্স বিভাগের প্রশিক্ষণ বিভাগে নেভিগেট করুন:

uCAIP মেনু

ধাপ ১: প্রশিক্ষণের কাজ কনফিগার করুন

আপনার প্রশিক্ষণ কাজের জন্য প্যারামিটারগুলি প্রবেশ করাতে তৈরি করুন এ ক্লিক করুন।

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

কন্টেইনার সেটিংস ধাপে, কাস্টম কন্টেইনার নির্বাচন করুন:

কাস্টম কন্টেইনার বিকল্প

প্রথম বাক্সে ( Container image ), পূর্ববর্তী বিভাগ থেকে আপনার IMAGE_URI ভেরিয়েবলের মান লিখুন। এটি হওয়া উচিত: gcr.io/your-cloud-project/multiworker:cassava , আপনার নিজস্ব প্রজেক্ট আইডি সহ। বাকি ক্ষেত্রগুলি ফাঁকা রেখে Continue এ ক্লিক করুন।

আবার Continue-এ ক্লিক করে Hyperparameters ধাপটি এড়িয়ে যান।

ধাপ ২: কম্পিউট ক্লাস্টার কনফিগার করুন

ভার্টেক্স এআই বিভিন্ন ধরণের মেশিনের কাজগুলি সম্পন্ন করার জন্য 4টি কর্মী পুল সরবরাহ করে।

Worker pool 0 প্রাইমারি, চিফ, শিডিউলার, অথবা "মাস্টার" কনফিগার করে। MultiWorkerMirroredStrategy তে, সমস্ত মেশিনকে ওয়ার্কার হিসেবে মনোনীত করা হয়, যা হল সেই ভৌত মেশিন যার উপর প্রতিলিপিকৃত গণনা কার্যকর করা হয়। প্রতিটি মেশিনকে ওয়ার্কার হিসেবে বিবেচনা করা ছাড়াও, একজন কর্মী থাকা প্রয়োজন যিনি চেকপয়েন্ট সংরক্ষণ এবং TensorBoard-এ সারাংশ ফাইল লেখার মতো কিছু অতিরিক্ত কাজ করবেন। এই মেশিনটিকে চীফ বলা হয়। শুধুমাত্র একজন প্রধান কর্মী থাকে, তাই ওয়ার্কার পুল 0-এর জন্য আপনার কর্মীর সংখ্যা সর্বদা 1 হবে।

Compute and pricing -এ, নির্বাচিত অঞ্চলটি যেমন আছে তেমনই রেখে Worker pool 0 নিম্নরূপ কনফিগার করুন:

কর্মী_পুল_0

ওয়ার্কার পুল ১ হল সেই জায়গা যেখানে আপনি আপনার ক্লাস্টারের জন্য কর্মীদের কনফিগার করতে পারবেন।

নিম্নরূপে ওয়ার্কার পুল ১ কনফিগার করুন:

কর্মী_পুল_১

ক্লাস্টারটি এখন দুটি CPU-র জন্য উপযুক্ত মেশিনের জন্য কনফিগার করা হয়েছে। প্রশিক্ষণ অ্যাপ্লিকেশন কোডটি চালানো হলে, MultiWorkerMirroredStrategy উভয় মেশিনেই প্রশিক্ষণ বিতরণ করবে।

MultiWorkerMirroredStrategy শুধুমাত্র chief এবং worker টাস্ক টাইপ আছে, তাই অতিরিক্ত Worker Pools কনফিগার করার কোন প্রয়োজন নেই। তবে, যদি আপনি TensorFlow-এর ParameterServerStrategy ব্যবহার করেন, তাহলে আপনাকে worker pool 2- এ আপনার প্যারামিটার সার্ভার কনফিগার করতে হবে। এবং যদি আপনি আপনার ক্লাস্টারে একটি মূল্যায়নকারী যোগ করতে চান, তাহলে আপনাকে worker pool 3- এ সেই মেশিনটি কনফিগার করতে হবে।

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

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

🎉 অভিনন্দন! 🎉

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

  • একটি কাস্টম কন্টেইনারে প্রদত্ত প্রশিক্ষণ কোডের জন্য একটি মাল্টি-ওয়ার্কার প্রশিক্ষণ কাজ চালু করুন। আপনি এই উদাহরণে একটি TensorFlow মডেল ব্যবহার করেছেন, তবে আপনি কাস্টম বা বিল্ট-ইন কন্টেইনার ব্যবহার করে যেকোনো ফ্রেমওয়ার্ক দিয়ে তৈরি একটি মডেলকে প্রশিক্ষণ দিতে পারেন।

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

৭. [ঐচ্ছিক] ভার্টেক্স SDK ব্যবহার করুন

পূর্ববর্তী বিভাগে দেখানো হয়েছে কিভাবে UI এর মাধ্যমে প্রশিক্ষণ কাজ শুরু করতে হয়। এই বিভাগে, আপনি Vertex Python API ব্যবহার করে প্রশিক্ষণ কাজ জমা দেওয়ার একটি বিকল্প উপায় দেখতে পাবেন।

আপনার নোটবুক ইনস্ট্যান্সে ফিরে যান এবং লঞ্চার থেকে একটি টেনসরফ্লো 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" বোতামে ক্লিক করুন।

ইন্সট্যান্স বন্ধ করুন

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

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