প্রোটোটাইপ টু প্রোডাকশন: ভার্টেক্স এআই-এর উপর প্রশিক্ষণ বিতরণ করা হয়েছে

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

এই ল্যাবে, আপনি টেনসরফ্লো ব্যবহার করে ভার্টেক্স এআই ট্রেনিং-এ বিতরণ করা প্রশিক্ষণের কাজ চালানোর জন্য Vertex AI ব্যবহার করবেন।

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

.

তুমি কি শিখেছ

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

  • একাধিক GPU সহ একটি একক মেশিনে বিতরণ করা প্রশিক্ষণ চালান
  • একাধিক মেশিন জুড়ে বিতরণ প্রশিক্ষণ চালান

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

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

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

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

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

3. বিতরণ করা প্রশিক্ষণ ওভারভিউ

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

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

ল্যাবের শেষে ঐচ্ছিক বিভাগটি tf.distribute.MultiWorkerMirroredStrategy ব্যবহার করে, যা MirroredStrategy এর মতই, এটি একাধিক মেশিনে কাজ করে। এই মেশিনগুলির প্রতিটিতে একাধিক GPU থাকতে পারে। যেমন, MirroredStrategy , MultiWorkerMirroredStrategy হল একটি সিঙ্ক্রোনাস ডেটা সমান্তরাল কৌশল যা আপনি শুধুমাত্র কয়েকটি কোড পরিবর্তনের সাথে ব্যবহার করতে পারেন। একটি মেশিনে সিঙ্ক্রোনাস ডেটা সমান্তরালতা থেকে অনেকগুলিতে যাওয়ার সময় প্রধান পার্থক্য হল যে প্রতিটি ধাপের শেষে গ্রেডিয়েন্টগুলি এখন একটি মেশিনের সমস্ত GPU এবং ক্লাস্টারের সমস্ত মেশিন জুড়ে সিঙ্ক্রোনাইজ করা প্রয়োজন৷

এই ল্যাবটি সম্পূর্ণ করার জন্য আপনাকে বিস্তারিত জানার দরকার নেই, তবে আপনি যদি TensorFlow-এ বিতরণ করা প্রশিক্ষণ কীভাবে কাজ করে সে সম্পর্কে আরও জানতে চান, নীচের ভিডিওটি দেখুন:

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

আপনার পরিবেশ সেট আপ করতে Vertex AI ল্যাবের সাথে কাস্টম মডেল প্রশিক্ষণের ধাপগুলি সম্পূর্ণ করুন৷

5. একক মেশিন, মাল্টি GPU প্রশিক্ষণ

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

শুরু করতে, ওয়ার্কবেঞ্চ নোটবুকের লঞ্চার মেনু থেকে যা আপনি পূর্ববর্তী ল্যাবে তৈরি করেছেন, একটি টার্মিনাল উইন্ডো খুলুন।

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

ধাপ 1: প্রশিক্ষণ কোড লিখুন

flowers-multi-gpu নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এতে সিডি করুন:

mkdir flowers-multi-gpu
cd flowers-multi-gpu

প্রশিক্ষণ কোড এবং একটি পাইথন ফাইলের জন্য একটি ডিরেক্টরি তৈরি করতে নিম্নলিখিতটি চালান যেখানে আপনি নীচের কোডটি যোগ করবেন।

mkdir trainer
touch trainer/task.py

আপনার flowers-multi-gpu/ ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ trainer/
    + task.py

এরপর, আপনি এইমাত্র তৈরি করা task.py ফাইলটি খুলুন এবং নীচের কোডটি অনুলিপি করুন৷

আপনাকে BUCKET_ROOT{your-gcs-bucket} ক্লাউড স্টোরেজ বাকেট দিয়ে প্রতিস্থাপন করতে হবে যেখানে আপনি ল্যাব 1 -এ ফুলের ডেটাসেট সংরক্ষণ করেছেন।

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''

  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

def main():  

  # Create distribution strategy
  strategy = tf.distribute.MirroredStrategy()

  # Get data
  GLOBAL_BATCH_SIZE = BATCH_SIZE * strategy.num_replicas_in_sync
  train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

  # Wrap model creation and compilation within scope of strategy
  with strategy.scope():
    model = create_model()
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                  metrics=['accuracy'])

  history = model.fit(
    train_dataset,
    validation_data=validation_dataset,
    epochs=EPOCHS
  )

  model.save(f'{BUCKET_ROOT}/model_output')


if __name__ == "__main__":
    main()

আপনি ধারক তৈরি করার আগে, কোডটি আরও গভীরভাবে দেখে নেওয়া যাক। বিতরণ করা প্রশিক্ষণ ব্যবহারের জন্য নির্দিষ্ট কিছু উপাদান রয়েছে।

  • main() ফাংশনে, MirroredStrategy অবজেক্ট তৈরি হয়। এর পরে, আপনি কৌশলের সুযোগের মধ্যে আপনার মডেল ভেরিয়েবলের তৈরিকে মোড়ানো। এই ধাপটি TensorFlow কে বলে যে কোন ভেরিয়েবলগুলিকে GPU জুড়ে মিরর করা উচিত।
  • ব্যাচের আকার num_replicas_in_sync দ্বারা স্কেল করা হয়েছে। টেনসরফ্লোতে সিঙ্ক্রোনাস ডেটা সমান্তরাল কৌশলগুলি ব্যবহার করার সময় ব্যাচের আকার স্কেল করা একটি সর্বোত্তম অনুশীলন। আপনি এখানে আরো জানতে পারবেন।

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

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

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

touch Dockerfile

আপনার flowers-multi-gpu/ ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ Dockerfile
+ trainer/
    + task.py

ডকারফাইল খুলুন এবং এতে নিম্নলিখিতগুলি অনুলিপি করুন:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

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

ধাপ 3: ধারক তৈরি করুন

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

PROJECT_ID='your-cloud-project'

আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি রেপো তৈরি করুন। আমরা প্রথম ল্যাবে তৈরি রেপো ব্যবহার করব।

REPO_NAME='flower-app'

আর্টিফ্যাক্ট রেজিস্ট্রিতে আপনার কন্টেইনার ইমেজের ইউআরআই সহ একটি পরিবর্তনশীল সংজ্ঞায়িত করুন:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image_distributed:single_machine

ডকার কনফিগার করুন

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

তারপর, আপনার flowers-multi-gpu ডিরেক্টরির রুট থেকে নিম্নলিখিতগুলি চালিয়ে ধারকটি তৈরি করুন:

docker build ./ -t $IMAGE_URI

অবশেষে, এটি আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিন:

docker push $IMAGE_URI

কনটেইনারটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিয়ে, আপনি এখন প্রশিক্ষণের কাজ শুরু করতে প্রস্তুত।

ধাপ 4: SDK দিয়ে কাজ চালান

এই বিভাগে, আপনি কীভাবে ভার্টেক্স এআই পাইথন SDK ব্যবহার করে বিতরণকৃত প্রশিক্ষণ কাজটি কনফিগার এবং চালু করবেন তা দেখতে পাবেন।

লঞ্চার থেকে, একটি TensorFlow 2 নোটবুক তৈরি করুন৷

নতুন_নোটবুক

Vertex AI SDK আমদানি করুন।

from google.cloud import aiplatform

তারপর, একটি CustomContainerTrainingJob সংজ্ঞায়িত করুন।

আপনাকে container_uri {PROJECT_ID} এবং staging_bucket{YOUR_BUCKET} প্রতিস্থাপন করতে হবে।

job = aiplatform.CustomContainerTrainingJob(display_name='flowers-multi-gpu',
                                            container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:single_machine',
                                            staging_bucket='gs://{YOUR_BUCKET}')

একবার কাজটি সংজ্ঞায়িত হয়ে গেলে, আপনি কাজটি চালাতে পারেন। আপনি অ্যাক্সিলারেটরের সংখ্যা 2 তে সেট করবেন। যদি আমরা শুধুমাত্র 1 GPU ব্যবহার করি তবে এটি বিতরণ করা প্রশিক্ষণ হিসাবে বিবেচিত হবে না । আপনি যখন 2 বা তার বেশি এক্সিলারেটর ব্যবহার করেন তখন একটি একক মেশিনে বিতরণ করা প্রশিক্ষণ।

my_custom_job.run(replica_count=1,
                  machine_type='n1-standard-4',
                  accelerator_type='NVIDIA_TESLA_V100',
                  accelerator_count=2)

কনসোলে, আপনি আপনার কাজের অগ্রগতি দেখতে সক্ষম হবেন।

multigpu_job

6. [ঐচ্ছিক] বহু-কর্মী প্রশিক্ষণ

এখন আপনি একাধিক GPU সহ একটি একক মেশিনে বিতরণ প্রশিক্ষণের চেষ্টা করেছেন, আপনি একাধিক মেশিনে প্রশিক্ষণের মাধ্যমে আপনার বিতরণকৃত প্রশিক্ষণ দক্ষতাকে পরবর্তী স্তরে নিয়ে যেতে পারেন। খরচ কম রাখতে, আমরা সেই মেশিনগুলিতে কোনও GPU যোগ করব না, তবে আপনি চাইলে GPU যোগ করে পরীক্ষা করতে পারেন।

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

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

ধাপ 1: প্রশিক্ষণ কোড লিখুন

flowers-multi-machine নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এতে সিডি করুন:

mkdir flowers-multi-machine
cd flowers-multi-machine

প্রশিক্ষণ কোড এবং একটি পাইথন ফাইলের জন্য একটি ডিরেক্টরি তৈরি করতে নিম্নলিখিতটি চালান যেখানে আপনি নীচের কোডটি যোগ করবেন।

mkdir trainer
touch trainer/task.py

আপনার flowers-multi-machine/ ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ trainer/
    + task.py

এরপর, আপনি এইমাত্র তৈরি করা task.py ফাইলটি খুলুন এবং নীচের কোডটি অনুলিপি করুন৷

আপনাকে BUCKET_ROOT{your-gcs-bucket} ক্লাউড স্টোরেজ বাকেট দিয়ে প্রতিস্থাপন করতে হবে যেখানে আপনি ল্যাব 1 -এ ফুলের ডেটাসেট সংরক্ষণ করেছেন।

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'
SAVE_MODEL_DIR = f'{BUCKET_ROOT}/multi-machine-output'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''

  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  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 distribution strategy
  strategy = tf.distribute.MultiWorkerMirroredStrategy()

  # Get data
  GLOBAL_BATCH_SIZE = BATCH_SIZE * strategy.num_replicas_in_sync
  train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

  # Wrap variable creation within strategy scope
  with strategy.scope():
    model = create_model()
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(),
                  metrics=['accuracy'])

  history = model.fit(
    train_dataset,
    validation_data=validation_dataset,
    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(SAVE_MODEL_DIR, task_type, task_id)
  model.save(write_model_path)

if __name__ == "__main__":
    main()

আপনি ধারক তৈরি করার আগে, কোডটি আরও গভীরভাবে দেখে নেওয়া যাক। কোডটিতে কয়েকটি উপাদান রয়েছে যা MultiWorkerMirroredStrategy এর সাথে কাজ করার জন্য আপনার প্রশিক্ষণ অ্যাপ্লিকেশনের জন্য প্রয়োজনীয়।

  • main() ফাংশনে, MultiWorkerMirroredStrategy অবজেক্ট তৈরি করা হয়। এর পরে, আপনি কৌশলের সুযোগের মধ্যে আপনার মডেল ভেরিয়েবলের তৈরিকে মোড়ানো। এই গুরুত্বপূর্ণ পদক্ষেপটি টেনসরফ্লোকে বলে যে কোন ভেরিয়েবলগুলি প্রতিলিপি জুড়ে মিরর করা উচিত।
  • ব্যাচের আকার num_replicas_in_sync দ্বারা স্কেল করা হয়েছে। টেনসরফ্লোতে সিঙ্ক্রোনাস ডেটা সমান্তরাল কৌশলগুলি ব্যবহার করার সময় ব্যাচের আকার স্কেল করা একটি সর্বোত্তম অনুশীলন।
  • আপনার মডেল সংরক্ষণ করা মাল্টি-ওয়ার্কার ক্ষেত্রে একটু বেশি জটিল কারণ প্রতিটি শ্রমিকের জন্য গন্তব্য আলাদা হতে হবে। প্রধান কর্মী পছন্দসই মডেল ডিরেক্টরিতে সংরক্ষণ করবে, অন্য কর্মীরা মডেলটিকে অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করবে। একাধিক কর্মীকে একই স্থানে লেখা থেকে বিরত রাখার জন্য এই অস্থায়ী ডিরেক্টরিগুলি অনন্য হওয়া গুরুত্বপূর্ণ। সঞ্চয় সম্মিলিত ক্রিয়াকলাপগুলিকে ধারণ করতে পারে, যার অর্থ হল সমস্ত কর্মীদের সংরক্ষণ করতে হবে এবং কেবল প্রধান নয়। ফাংশন _is_chief() , _get_temp_dir() , write_filepath() , পাশাপাশি main() ফাংশনের মধ্যে রয়েছে বয়লারপ্লেট কোড যা মডেল সংরক্ষণ করতে সাহায্য করে।

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

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

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

touch Dockerfile

আপনার flowers-multi-machine/ ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ Dockerfile
+ trainer/
    + task.py

ডকারফাইল খুলুন এবং এতে নিম্নলিখিতগুলি অনুলিপি করুন:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-8

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

ধাপ 3: ধারক তৈরি করুন

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

PROJECT_ID='your-cloud-project'

আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি রেপো তৈরি করুন। আমরা প্রথম ল্যাবে তৈরি রেপো ব্যবহার করব।

REPO_NAME='flower-app'

Google আর্টিফ্যাক্ট রেজিস্ট্রিতে আপনার কন্টেইনার ইমেজের URI সহ একটি পরিবর্তনশীল সংজ্ঞায়িত করুন:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image_distributed:multi_machine

ডকার কনফিগার করুন

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

তারপরে, আপনার flowers-multi-machine ডিরেক্টরির মূল থেকে নিম্নলিখিতগুলি চালিয়ে ধারকটি তৈরি করুন:

docker build ./ -t $IMAGE_URI

অবশেষে, এটি আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিন:

docker push $IMAGE_URI

কনটেইনারটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিয়ে, আপনি এখন প্রশিক্ষণের কাজ শুরু করতে প্রস্তুত।

ধাপ 4: SDK দিয়ে কাজ চালান

এই বিভাগে, আপনি কীভাবে ভার্টেক্স এআই পাইথন SDK ব্যবহার করে বিতরণকৃত প্রশিক্ষণ কাজটি কনফিগার এবং চালু করবেন তা দেখতে পাবেন।

লঞ্চার থেকে, একটি TensorFlow 2 নোটবুক তৈরি করুন৷

নতুন_নোটবুক

Vertex AI SDK আমদানি করুন।

from google.cloud import aiplatform

তারপর, worker_pool_specs সংজ্ঞায়িত করুন।

Vertex AI বিভিন্ন ধরনের মেশিনের কাজ কভার করার জন্য 4টি কর্মী পুল প্রদান করে।

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

কর্মী পুল 1 হল যেখানে আপনি আপনার ক্লাস্টারের জন্য অতিরিক্ত কর্মীদের কনফিগার করেন।

worker_pool_specs তালিকার প্রথম অভিধানটি ওয়ার্কার পুল 0 প্রতিনিধিত্ব করে এবং দ্বিতীয় অভিধানটি ওয়ার্কার পুল 1 প্রতিনিধিত্ব করে। এই নমুনায়, দুটি কনফিগ অভিন্ন। যাইহোক, আপনি যদি 3টি মেশিন জুড়ে প্রশিক্ষণ দিতে চান, তাহলে আপনি replica_count 2-এ সেট করে ওয়ার্কার পুল 1-এ অতিরিক্ত কর্মী যোগ করবেন। আপনি যদি GPU যোগ করতে চান, তাহলে আপনাকে উভয়ের জন্য machine_spec এ আর্গুমেন্ট accelerator_type এবং accelerator_count যোগ করতে হবে। শ্রমিক পুল মনে রাখবেন যে আপনি যদি MultiWorkerMirroredStrategy এর সাথে GPU ব্যবহার করতে চান, ক্লাস্টারের প্রতিটি মেশিনে অবশ্যই একটি অভিন্ন GPU গুলি থাকতে হবে। কাজটি অন্যথায় ব্যর্থ হবে।

আপনাকে image_uri{PROJECT_ID} প্রতিস্থাপন করতে হবে।

# The spec of the worker pools including machine type and Docker image
# Be sure to replace PROJECT_ID in the "image_uri" with your project.

worker_pool_specs=[
     {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-4",
        },
        "container_spec": {"image_uri": "us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:multi_machine"}
      },
      {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-4",
        },
        "container_spec": {"image_uri": "us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image_distributed:multi_machine"}
      }
          ]

এরপর একটি CustomJob তৈরি করুন এবং চালান, স্টেজিং এর জন্য আপনার প্রজেক্টে একটি বালতি দিয়ে staging_bucket -এ {YOUR_BUCKET} প্রতিস্থাপন করুন।

my_custom_job = aiplatform.CustomJob(display_name='flowers-multi-worker',
                                     worker_pool_specs=worker_pool_specs,
                                     staging_bucket='gs://{YOUR_BUCKET}')

my_custom_job.run()

কনসোলে, আপনি আপনার কাজের অগ্রগতি দেখতে সক্ষম হবেন।

বহু_কর্মী_চাকরি

🎉 অভিনন্দন! 🎉

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

  • TensorFlow এর সাথে বিতরণকৃত প্রশিক্ষণের কাজ চালান

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

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

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

উদাহরণ বন্ধ করুন

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

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