ভার্টেক্স এআই: ডিস্ট্রিবিউটেড হাইপারপ্যারামিটার টিউনিং

1. ওভারভিউ

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

আপনি কি শিখুন

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

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

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

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

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

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

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

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

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

হাইপারপ্যারামিটার টিউনিং

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

Vertex AI প্রশিক্ষণের সাথে হাইপারপ্যারামিটার টিউনিং ব্যবহার করতে, আপনার প্রশিক্ষণ কোডে দুটি পরিবর্তন করতে হবে:

  1. আপনি টিউন করতে চান এমন প্রতিটি হাইপারপ্যারামিটারের জন্য আপনার প্রধান প্রশিক্ষণ মডিউলে একটি কমান্ড-লাইন আর্গুমেন্ট সংজ্ঞায়িত করুন।
  2. আপনার অ্যাপ্লিকেশনের কোডে সংশ্লিষ্ট হাইপারপ্যারামিটার সেট করতে সেই আর্গুমেন্টে পাস করা মান ব্যবহার করুন।

বিতরণ করা প্রশিক্ষণ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

নোটবুক API সক্রিয় করুন যদি এটি ইতিমধ্যে না থাকে।

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

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

নোটবুক_ইউআই

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

নতুন_নোটবুক

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

তৈরি_নোটবুক

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

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

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

সক্রিয়-টার্মিনাল

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

পরবর্তী, তৈরি করুন ক্লিক করুন। দৃষ্টান্তের ব্যবস্থা করতে কয়েক মিনিট সময় লাগবে।

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

open_jupyterlab

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

প্রমাণীকরণ

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

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

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

vertex-codelab নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং এতে cd দিন।

mkdir vertex-codelab
cd vertex-codelab

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

mkdir trainer
touch trainer/task.py

আপনার vertex-codelab ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ trainer/
    + task.py

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

import tensorflow as tf
import tensorflow_datasets as tfds
import argparse
import hypertune
import os

NUM_EPOCHS = 10
BATCH_SIZE = 64

def get_args():
  '''Parses args. Must include all hyperparameters you want to tune.'''

  parser = argparse.ArgumentParser()
  parser.add_argument(
      '--learning_rate',
      required=True,
      type=float,
      help='learning rate')
  parser.add_argument(
      '--momentum',
      required=True,
      type=float,
      help='SGD momentum value')
  parser.add_argument(
      '--num_units',
      required=True,
      type=int,
      help='number of units in last hidden layer')
  args = parser.parse_args()
  return args


def preprocess_data(image, label):
  '''Resizes and scales images.'''

  image = tf.image.resize(image, (150,150))
  return tf.cast(image, tf.float32) / 255., label


def create_dataset(batch_size):
  '''Loads Horses Or Humans dataset and preprocesses data.'''

  data, info = tfds.load(name='horses_or_humans', as_supervised=True, with_info=True)

  # Create train dataset
  train_data = data['train'].map(preprocess_data)
  train_data  = train_data.shuffle(1000)
  train_data  = train_data.batch(batch_size)

  # Create validation dataset
  validation_data = data['test'].map(preprocess_data)
  validation_data  = validation_data.batch(batch_size)

  return train_data, validation_data


def create_model(num_units, learning_rate, momentum):
  '''Defines and compiles model.'''

  inputs = tf.keras.Input(shape=(150, 150, 3))
  x = tf.keras.layers.Conv2D(16, (3, 3), activation='relu')(inputs)
  x = tf.keras.layers.MaxPooling2D((2, 2))(x)
  x = tf.keras.layers.Conv2D(32, (3, 3), activation='relu')(x)
  x = tf.keras.layers.MaxPooling2D((2, 2))(x)
  x = tf.keras.layers.Conv2D(64, (3, 3), activation='relu')(x)
  x = tf.keras.layers.MaxPooling2D((2, 2))(x)
  x = tf.keras.layers.Flatten()(x)
  x = tf.keras.layers.Dense(num_units, activation='relu')(x)
  outputs = tf.keras.layers.Dense(1, activation='sigmoid')(x)
  model = tf.keras.Model(inputs, outputs)
  model.compile(
      loss='binary_crossentropy',
      optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=momentum),
      metrics=['accuracy'])
  return model


def main():
  args = get_args()

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

  # Get data
  GLOBAL_BATCH_SIZE = BATCH_SIZE * strategy.num_replicas_in_sync
  train_data, validation_data = create_dataset(GLOBAL_BATCH_SIZE)

  # Wrap variable creation within strategy scope
  with strategy.scope():
    model = create_model(args.num_units, args.learning_rate, args.momentum)

  # Train model
  history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=validation_data)

  # Define metric
  hp_metric = history.history['val_accuracy'][-1]

  hpt = hypertune.HyperTune()
  hpt.report_hyperparameter_tuning_metric(
      hyperparameter_metric_tag='accuracy',
      metric_value=hp_metric,
      global_step=NUM_EPOCHS)


if __name__ == "__main__":
    main()

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

বিতরণ করা প্রশিক্ষণ

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

হাইপারপ্যারামিটার টিউনিং

  1. স্ক্রিপ্ট hypertune লাইব্রেরি আমদানি করে। পরে যখন আমরা কন্টেইনার ইমেজ তৈরি করি, তখন আমাদের নিশ্চিত করতে হবে যে আমরা এই লাইব্রেরিটি ইনস্টল করেছি।
  2. get_args() ফাংশনটি প্রতিটি হাইপারপ্যারামিটারের জন্য একটি কমান্ড-লাইন আর্গুমেন্ট সংজ্ঞায়িত করে যা আপনি টিউন করতে চান। এই উদাহরণে, যে হাইপারপ্যারামিটারগুলি টিউন করা হবে তা হল শেখার হার, অপ্টিমাইজারে ভরবেগের মান এবং মডেলের শেষ লুকানো স্তরে ইউনিটের সংখ্যা, তবে অন্যদের সাথে পরীক্ষা করতে নির্দ্বিধায়। এই আর্গুমেন্টে পাস করা মান তারপর কোডে সংশ্লিষ্ট হাইপারপ্যারামিটার সেট করতে ব্যবহার করা হয় (যেমন, সেট learning_rate = args.learning_rate )
  3. main() ফাংশনের শেষে, আপনি যে মেট্রিকটি অপ্টিমাইজ করতে চান তা নির্ধারণ করতে hypertune লাইব্রেরি ব্যবহার করা হয়। TensorFlow-এ, Keras model.fit পদ্ধতি একটি History বস্তু প্রদান করে। History.history অ্যাট্রিবিউট হল পরপর যুগে প্রশিক্ষণের ক্ষতির মান এবং মেট্রিক্স মানগুলির একটি রেকর্ড। আপনি যদি model.fit জন্য বৈধতা ডেটা পাস করেন তাহলে History.history অ্যাট্রিবিউটের মধ্যে বৈধতা ক্ষতি এবং মেট্রিক্সের মানও অন্তর্ভুক্ত থাকবে। উদাহরণ স্বরূপ, আপনি যদি বৈধতা ডেটা সহ তিনটি যুগের জন্য একটি মডেল প্রশিক্ষিত করেন এবং একটি মেট্রিক হিসাবে accuracy প্রদান করেন, তাহলে History.history অ্যাট্রিবিউটটি নিম্নলিখিত অভিধানের অনুরূপ হবে৷
{
 "accuracy": [
   0.7795261740684509,
   0.9471358060836792,
   0.9870933294296265
 ],
 "loss": [
   0.6340447664260864,
   0.16712145507335663,
   0.04546636343002319
 ],
 "val_accuracy": [
   0.3795261740684509,
   0.4471358060836792,
   0.4870933294296265
 ],
 "val_loss": [
   2.044623374938965,
   4.100203514099121,
   3.0728273391723633
 ]

আপনি যদি হাইপারপ্যারামিটার টিউনিং পরিষেবাটি এমন মানগুলি আবিষ্কার করতে চান যা মডেলের বৈধতা নির্ভুলতাকে সর্বাধিক করে, আপনি মেট্রিকটিকে val_accuracy তালিকার শেষ এন্ট্রি (বা NUM_EPOCS - 1 ) হিসাবে সংজ্ঞায়িত করুন৷ তারপর, HyperTune একটি উদাহরণে এই মেট্রিকটি পাস করুন। আপনি hyperparameter_metric_tag এর জন্য আপনার পছন্দের স্ট্রিং বাছাই করতে পারেন, কিন্তু আপনি যখন হাইপারপ্যারামিটার টিউনিং কাজ শুরু করবেন তখন আপনাকে আবার স্ট্রিংটি ব্যবহার করতে হবে।

6. কন্টেইনারাইজ কোড

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

ধাপ 1: ডকারফাইল লিখুন

আপনার টার্মিনাল থেকে, নিশ্চিত করুন যে আপনি vertex-codelab ডিরেক্টরিতে আছেন এবং একটি খালি ডকারফাইল তৈরি করুন:

touch Dockerfile

আপনার vertex-codelab ডিরেক্টরিতে এখন আপনার নিম্নলিখিতগুলি থাকা উচিত:

+ Dockerfile
+ trainer/
    + task.py

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

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

WORKDIR /

# Installs hypertune library
RUN pip install cloudml-hypertune

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

এই ডকারফাইলটি ডিপ লার্নিং কন্টেইনার টেনসরফ্লো এন্টারপ্রাইজ 2.7 জিপিইউ ডকার ইমেজ ব্যবহার করে। Google ক্লাউডে ডিপ লার্নিং কন্টেনারগুলি অনেক সাধারণ ML এবং ডেটা সায়েন্স ফ্রেমওয়ার্ক আগে থেকে ইনস্টল করা আছে। সেই ছবিটি ডাউনলোড করার পরে, এই ডকারফাইল প্রশিক্ষণ কোডের জন্য এন্ট্রিপয়েন্ট সেট আপ করে।

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

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

PROJECT_ID='your-cloud-project'

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

IMAGE_URI="gcr.io/$PROJECT_ID/horse-human-codelab:latest"

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

gcloud auth configure-docker

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

docker build ./ -t $IMAGE_URI

সবশেষে, এটিকে Google কন্টেইনার রেজিস্ট্রিতে পুশ করুন:

docker push $IMAGE_URI

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

আমাদের প্রশিক্ষণের কাজে, আমরা একটি স্টেজিং বালতিতে পাড়ি দেব।

আপনার প্রকল্পে একটি নতুন বালতি তৈরি করতে আপনার টার্মিনালে নিম্নলিখিতটি চালান।

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

7. হাইপারপ্যারামিটার টিউনিং কাজ চালু করুন

ধাপ 1: হাইপারপ্যারামিটার টিউনিং সহ কাস্টম প্রশিক্ষণ কাজ তৈরি করুন

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

নতুন_নোটবুক

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

from google.cloud import aiplatform
from google.cloud.aiplatform import hyperparameter_tuning as hpt

হাইপারপ্যারামিটার টিউনিং কাজ চালু করতে, আপনাকে প্রথমে worker_pool_specs সংজ্ঞায়িত করতে হবে, যা মেশিনের ধরন এবং ডকার ইমেজ নির্দিষ্ট করে। নিম্নলিখিত বৈশিষ্ট্য দুটি NVIDIA Tesla V100 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 = [{
    "machine_spec": {
        "machine_type": "n1-standard-4",
        "accelerator_type": "NVIDIA_TESLA_V100",
        "accelerator_count": 2
    },
    "replica_count": 1,
    "container_spec": {
        "image_uri": "gcr.io/{PROJECT_ID}/horse-human-codelab:latest"
    }
}]

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

প্রতিটি হাইপারপ্যারামিটারের জন্য, টিউনিং পরিষেবা চেষ্টা করবে এমন মানগুলির জন্য আপনাকে প্রকারের পাশাপাশি সীমানা নির্ধারণ করতে হবে। হাইপারপ্যারামিটার হতে পারে দ্বৈত, পূর্ণসংখ্যা, শ্রেণীগত, বা বিচ্ছিন্ন। আপনি যদি Double বা Integer টাইপ নির্বাচন করেন, তাহলে আপনাকে একটি সর্বনিম্ন এবং সর্বোচ্চ মান প্রদান করতে হবে। এবং যদি আপনি শ্রেণীগত বা বিচ্ছিন্ন নির্বাচন করেন তবে আপনাকে মান প্রদান করতে হবে। দ্বৈত এবং পূর্ণসংখ্যা প্রকারের জন্য, আপনাকে স্কেলিং মানও প্রদান করতে হবে। আপনি এই ভিডিওতে কীভাবে সেরা স্কেল বাছাই করবেন সে সম্পর্কে আরও শিখতে পারেন।

# Dictionary representing parameters to optimize.
# The dictionary key is the parameter_id, which is passed into your training
# job as a command line argument,
# And the dictionary value is the parameter specification of the metric.
parameter_spec = {
    "learning_rate": hpt.DoubleParameterSpec(min=0.001, max=1, scale="log"),
    "momentum": hpt.DoubleParameterSpec(min=0, max=1, scale="linear"),
    "num_units": hpt.DiscreteParameterSpec(values=[64, 128, 512], scale=None)
}

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

# Dicionary representing metrics to optimize.
# The dictionary key is the metric_id, which is reported by your training job,
# And the dictionary value is the optimization goal of the metric.
metric_spec={'accuracy':'maximize'}

একবার স্পেসগুলি সংজ্ঞায়িত হয়ে গেলে, আপনি একটি CustomJob তৈরি করবেন, যেটি সাধারণ বৈশিষ্ট্য যা হাইপারপ্যারামিটার টিউনিং ট্রায়ালগুলির প্রতিটিতে আপনার কাজ চালানোর জন্য ব্যবহার করা হবে।

আপনার আগে তৈরি করা বালতি দিয়ে আপনাকে {YOUR_BUCKET} প্রতিস্থাপন করতে হবে।

# Replace YOUR_BUCKET
my_custom_job = aiplatform.CustomJob(display_name='horses-humans',
                              worker_pool_specs=worker_pool_specs,
                              staging_bucket='gs://{YOUR_BUCKET}')

তারপর, HyperparameterTuningJob তৈরি করুন এবং চালান।

hp_job = aiplatform.HyperparameterTuningJob(
    display_name='horses-humans',
    custom_job=my_custom_job,
    metric_spec=metric_spec,
    parameter_spec=parameter_spec,
    max_trial_count=6,
    parallel_trial_count=2,
    search_algorithm=None)

hp_job.run()

উল্লেখ্য কয়েকটি যুক্তি আছে:

  • max_trial_count: পরিষেবাটি চালানো হবে এমন ট্রায়ালের সংখ্যার উপর আপনাকে একটি ঊর্ধ্বসীমা রাখতে হবে। আরও ট্রায়ালগুলি সাধারণত ভাল ফলাফলের দিকে নিয়ে যায়, তবে রিটার্ন হ্রাস করার একটি বিন্দু থাকবে, যার পরে অতিরিক্ত ট্রায়ালগুলি আপনি যে মেট্রিকটি অপ্টিমাইজ করার চেষ্টা করছেন তার উপর সামান্য বা কোন প্রভাব ফেলবে না। অল্প সংখ্যক ট্রায়াল দিয়ে শুরু করা এবং স্কেল করার আগে আপনার নির্বাচিত হাইপারপ্যারামিটারগুলি কতটা প্রভাবশালী তা বোঝার জন্য এটি একটি সর্বোত্তম অনুশীলন।
  • parallel_trial_count: আপনি যদি সমান্তরাল ট্রায়াল ব্যবহার করেন, পরিষেবাটি একাধিক প্রশিক্ষণ প্রক্রিয়াকরণ ক্লাস্টারের বিধান করে। সমান্তরাল ট্রায়ালের সংখ্যা বাড়ালে হাইপারপ্যারামিটার টিউনিং কাজ চালানোর জন্য যে সময় লাগে তা হ্রাস করে; যাইহোক, এটি সামগ্রিকভাবে কাজের কার্যকারিতা কমাতে পারে। এর কারণ হল ডিফল্ট টিউনিং কৌশলটি পরবর্তী ট্রায়ালগুলিতে মান নির্ধারণের জন্য পূর্ববর্তী পরীক্ষার ফলাফলগুলি ব্যবহার করে।
  • search_algorithm: আপনি সার্চ অ্যালগরিদমকে গ্রিড, এলোমেলো বা ডিফল্ট (কোনটিই নয়) সেট করতে পারেন। ডিফল্ট বিকল্পটি সম্ভাব্য হাইপারপ্যারামিটার মানের স্থান অনুসন্ধান করতে Bayesian অপ্টিমাইজেশান প্রয়োগ করে এবং এটি প্রস্তাবিত অ্যালগরিদম। আপনি এখানে এই অ্যালগরিদম সম্পর্কে আরও জানতে পারেন।

কাজ শুরু হয়ে গেলে, আপনি হাইপারপ্যারামিটার টিউনিং জবস ট্যাবের অধীনে UI-তে স্থিতি ট্র্যাক করতে সক্ষম হবেন।

এইচপি_চাকরি

কাজ শেষ হয়ে গেলে, আপনি হাইপারপ্যারামিটার মানগুলির সেরা সমন্বয় আবিষ্কার করতে আপনার পরীক্ষার ফলাফলগুলি দেখতে এবং সাজাতে পারেন।

এইচপি_ফলাফল

🎉 অভিনন্দন! 🎉

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

  • বিতরণ করা প্রশিক্ষণ সহ একটি হাইপারপ্যারামিটার টিউনিং কাজ চালান

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

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

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

মুছে ফেলুন

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

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