Vertex AI: डिस्ट्रिब्यूटेड हाइपर पैरामीटर ट्यूनिंग

1. खास जानकारी

इस लैब में, आपको हाइपर पैरामीटर ट्यूनिंग और डिस्ट्रिब्यूटेड ट्रेनिंग के लिए, Vertex AI का इस्तेमाल करने का तरीका बताया जाएगा. यह लैब, मॉडल कोड के लिए TensorFlow का इस्तेमाल करती है, लेकिन ये सिद्धांत अन्य एमएल फ़्रेमवर्क पर भी लागू होते हैं.

आपको ये सब सीखने को मिलेगा

आपको, इनके बारे में जानकारी मिलेगी:

  • कस्टम कंटेनर पर डिस्ट्रिब्यूटेड ट्रेनिंग का इस्तेमाल करके, मॉडल को ट्रेनिंग दें
  • अपने-आप हाइपर पैरामीटर ट्यूनिंग के लिए, अपने ट्रेनिंग कोड को कई बार आज़माने की सुविधा लॉन्च करना

Google Cloud पर इस लैब को चलाने की कुल लागत करीब 6 डॉलर है.

2. Vertex AI के बारे में जानकारी

यह लैब, Google Cloud पर उपलब्ध एआई (AI) प्रॉडक्ट के सबसे नए वर्शन का इस्तेमाल करती है. Vertex AI, Google Cloud के सभी मशीन लर्निंग प्लैटफ़ॉर्म को आसानी से डेवलप करने के लिए इंटिग्रेट करता है. पहले, AutoML और कस्टम मॉडल की मदद से ट्रेन किए गए मॉडल अलग-अलग सेवाओं से ऐक्सेस किए जा सकते थे. नई सेवा में, एक एपीआई से नए प्रॉडक्ट और इन दोनों का इस्तेमाल किया जा सकता है. आपके पास मौजूदा प्रोजेक्ट को Vertex AI पर माइग्रेट करने का विकल्प भी है. अगर आपकी कोई शिकायत है, तो कृपया सहायता पेज पर जाएं.

Vertex AI में कई तरह के प्रॉडक्ट शामिल हैं, जो मशीन लर्निंग के वर्कफ़्लो को मैनेज करने में मदद करते हैं. इस लैब में, ट्रेनिंग और वर्कबेंच पर फ़ोकस किया जाएगा.

Vertex प्रॉडक्ट की खास जानकारी

3. इस्तेमाल के उदाहरण की खास जानकारी

इस लैब में, TensorFlow डेटासेट से घोड़ों या इंसानों के डेटासेट पर तैयार किए गए इमेज क्लासिफ़िकेशन मॉडल के लिए, सबसे अच्छे पैरामीटर खोजने के लिए, हाइपर पैरामीटर ट्यूनिंग का इस्तेमाल किया जाएगा.

हाइपर पैरामीटर ट्यूनिंग

Vertex AI की ट्रेनिंग के साथ हाइपर पैरामीटर ट्यूनिंग की सुविधा, आपके चुने गए हाइपर पैरामीटर की वैल्यू के साथ आपके ट्रेनिंग ऐप्लिकेशन को कई ट्रायल चलाकर काम करती है. इन वैल्यू को आपकी तय की गई सीमाओं में ही सेट किया जाता है. Vertex AI, हर ट्रायल के नतीजों पर नज़र रखता है और बाद के ट्रायल के लिए अडजस्टमेंट करता है.

Vertex AI की ट्रेनिंग के साथ हाइपर पैरामीटर ट्यूनिंग का इस्तेमाल करने के लिए, आपको अपने ट्रेनिंग कोड में दो बदलाव करने होंगे:

  1. अपने मुख्य ट्रेनिंग मॉड्यूल में हर उस हाइपर पैरामीटर के लिए कमांड लाइन आर्ग्युमेंट तय करें जिसे आपको ट्यून करना है.
  2. अपने ऐप्लिकेशन के कोड में, उससे जुड़े हाइपर पैरामीटर को सेट करने के लिए, उन आर्ग्युमेंट में पास की गई वैल्यू का इस्तेमाल करें.

डिस्ट्रिब्यूटेड ट्रेनिंग

अगर आपके पास एक ही जीपीयू है, तो TensorFlow, इस ऐक्सेलरेटर का इस्तेमाल करके मॉडल ट्रेनिंग की रफ़्तार को तेज़ करेगा. इसके लिए आपको अलग से कुछ नहीं करना होगा. हालांकि, अगर एक से ज़्यादा जीपीयू के इस्तेमाल से आपको और ज़्यादा फ़ायदा चाहिए, तो आपको tf.distribute का इस्तेमाल करना होगा. यह TensorFlow का मॉड्यूल है, जिसकी मदद से अलग-अलग डिवाइसों पर कंप्यूटेशन की जांच की जा सकती है.

यह लैब tf.distribute.MirroredStrategy का इस्तेमाल करता है. इसे कोड में कुछ ही बदलाव करके, ट्रेनिंग ऐप्लिकेशन में जोड़ा जा सकता है. इस रणनीति से, आपके डिवाइस पर मौजूद हर जीपीयू पर मॉडल की एक कॉपी बन जाती है. बाद के ग्रेडिएंट अपडेट सिंक्रोनस तरीके से होंगे. इसका मतलब है कि हर जीपीयू, इनपुट डेटा के अलग-अलग स्लाइस के आधार पर, मॉडल से होते हुए फ़ॉरवर्ड और बैकवर्ड पास की गणना करता है. इसके बाद, इनमें से हर स्लाइस के कंप्यूट किए गए ग्रेडिएंट सभी जीपीयू के लिए एग्रीगेट किए जाते हैं और इसका औसत तौर पर all-reduce कहा जाता है. मॉडल पैरामीटर, इन औसत ग्रेडिएंट का इस्तेमाल करके अपडेट किए जाते हैं.

इस लैब को पूरा करने के लिए, यह ज़रूरी नहीं है कि जानकारी दी गई हो. हालांकि, अगर आपको TensorFlow में, डिस्ट्रिब्यूटेड ट्रेनिंग के काम करने के तरीके के बारे में ज़्यादा जानना है, तो यह वीडियो देखें:

4. अपना एनवायरमेंट सेट अप करें

इस कोडलैब को चलाने के लिए, आपके पास Google Cloud Platform का ऐसा प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो. प्रोजेक्ट बनाने के लिए, यहां दिए गए निर्देशों का पालन करें.

पहला चरण: Compute Engine API चालू करना

Compute Engine पर जाएं और अगर यह पहले से चालू नहीं है, तो चालू करें को चुनें.

दूसरा चरण: Container Registry API को चालू करना

कंटेनर रजिस्ट्री पर जाएं और अगर पहले से ऐसा नहीं हुआ है, तो चालू करें को चुनें. अपनी पसंद के मुताबिक ट्रेनिंग जॉब के लिए कंटेनर बनाने में इसका इस्तेमाल किया जा सकता है.

तीसरा चरण: Vertex AI API को चालू करना

अपने Cloud Console के Vertex AI सेक्शन पर जाएं और Vertex AI API को चालू करें पर क्लिक करें.

Vertex AI डैशबोर्ड

चौथा चरण: Vertex AI Workbench इंस्टेंस बनाना

अपने Cloud Console के Vertex AI सेक्शन में जाकर, Workbench पर क्लिक करें:

Vertex AI का मेन्यू

अगर Notebooks API पहले से चालू नहीं है, तो उसे चालू करें.

Notebook_api

इसके बाद, मैनेज की गई किताबें पर क्लिक करें:

Notebooks_UI

इसके बाद, नई नोटबुक चुनें.

new_notebook

अपनी नोटबुक को कोई नाम दें और फिर बेहतर सेटिंग पर क्लिक करें.

create_notebook

'बेहतर सेटिंग' में जाकर, डिवाइस को कुछ समय तक इस्तेमाल न करने पर, उसे बंद करने की सुविधा चालू करें और फिर उसे 60 मिनट पर सेट करें. इसका मतलब है कि इस्तेमाल न किए जाने पर, आपकी notebook अपने-आप बंद हो जाएगी. इससे आपको बेवजह खर्च नहीं करना पड़ेगा.

idle_timeout

सुरक्षा में जाकर, "टर्मिनल चालू करें" चुनें अगर यह पहले से चालू नहीं है.

चालू-टर्मिनल

अन्य सभी बेहतर सेटिंग को वैसे ही रहने दिया जा सकता है.

इसके बाद, बनाएं पर क्लिक करें. इस इंस्टेंस को सेट अप होने में कुछ मिनट लगेंगे.

इंस्टेंस बनाने के बाद, JupyterLab खोलें को चुनें.

open_jupyterlab

पहली बार किसी नए इंस्टेंस का इस्तेमाल करने पर, आपसे पुष्टि करने के लिए कहा जाएगा. ऐसा करने के लिए, यूज़र इंटरफ़ेस (यूआई) में दिया गया तरीका अपनाएं.

पुष्टि करें

5. ट्रेनिंग कोड में बदलाव करने की अनुमति दें

शुरू करने के लिए, लॉन्चर मेन्यू में जाकर, अपने notebook के इंस्टेंस में टर्मिनल विंडो खोलें:

launcher_terminal

vertex-codelab नाम की एक नई डायरेक्ट्री बनाएं और उसमें सीडी लें.

mkdir vertex-codelab
cd vertex-codelab

ट्रेनिंग कोड और Python फ़ाइल की डायरेक्ट्री बनाने के लिए, नीचे दिया गया तरीका अपनाएं:

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 को पता चलता है कि सभी जीपीयू में कौनसे वैरिएबल डुप्लीकेट होने चाहिए.
  2. बैच का साइज़, num_replicas_in_sync के हिसाब से बढ़ाया गया है. TensorFlow में सिंक्रोनस डेटा पैरलिज़्म रणनीतियों का इस्तेमाल करते समय बैच साइज़ को स्केल करना सबसे सही तरीका है. आपको यहां ज़्यादा जानकारी मिल सकती है.

हाइपर पैरामीटर ट्यूनिंग

  1. स्क्रिप्ट, hypertune लाइब्रेरी को इंपोर्ट करती है. बाद में, कंटेनर इमेज बनाते समय हमें यह पक्का करना होगा कि हमने यह लाइब्रेरी इंस्टॉल की है.
  2. get_args() फ़ंक्शन, ऐसे हर हाइपर पैरामीटर के लिए कमांड लाइन आर्ग्युमेंट तय करता है जिसे आपको ट्यून करना है. इस उदाहरण में, जिन हाइपर पैरामीटर को ट्यून किया जाएगा वे लर्निंग रेट, ऑप्टिमाइज़र में मोमेंटम वैल्यू, और मॉडल की आखिरी छिपी लेयर में यूनिट की संख्या हैं, लेकिन दूसरे लोगों के साथ बेझिझक एक्सपेरिमेंट किया जा सकता है. इसके बाद, उन आर्ग्युमेंट में पास की गई वैल्यू का इस्तेमाल, कोड में उससे जुड़े हाइपर पैरामीटर को सेट करने के लिए किया जाता है. जैसे, learning_rate = args.learning_rate सेट करें
  3. main() फ़ंक्शन के आखिर में, hypertune लाइब्रेरी का इस्तेमाल उस मेट्रिक को तय करने के लिए किया जाता है जिसे आपको ऑप्टिमाइज़ करना है. TensorFlow में, Keras model.fit तरीका History ऑब्जेक्ट दिखाता है. History.history एट्रिब्यूट, एक के बाद एक चलने वाले epoch का इस्तेमाल करके, ट्रेनिंग में हुई कमी की वैल्यू और मेट्रिक की वैल्यू का रिकॉर्ड है. अगर आपने पुष्टि करने के लिए डेटा को model.fit पर पास किया है, तो History.history एट्रिब्यूट में, पुष्टि न होने का डेटा और मेट्रिक की वैल्यू भी शामिल होंगी. उदाहरण के लिए, अगर आपने तीन epoch के लिए एक मॉडल को ट्रेनिंग दी है. इसमें, पुष्टि करने वाला डेटा इस्तेमाल किया गया है और 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. कोड को कंटेनर में रखें

अपने कोड को कंटेनर बनाने के लिए सबसे पहले, Dockerfile बनाएं. Dockerfile में, आप इमेज को चलाने के लिए ज़रूरी सभी कमांड शामिल करेंगे. यह सभी ज़रूरी लाइब्रेरी को इंस्टॉल करेगा और ट्रेनिंग कोड के लिए एंट्री पॉइंट सेट अप करेगा.

पहला चरण: Dockerfile लिखें

अपने Terminal से, पक्का करें कि आप vertex-codelab डायरेक्ट्री में हैं और एक खाली Dockerfile बनाएं:

touch Dockerfile

अब आपकी vertex-codelab डायरेक्ट्री में यह जानकारी होनी चाहिए:

+ Dockerfile
+ trainer/
    + task.py

Dockerfile खोलें और इसमें यहां दी गई जानकारी कॉपी करें:

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

यह Dockerfile, डीप लर्निंग कंटेनर TensorFlow Enterprise 2.7 जीपीयू Docker इमेज का इस्तेमाल करता है. Google Cloud पर डीप लर्निंग कंटेनर में, कई सामान्य एमएल और डेटा साइंस फ़्रेमवर्क पहले से इंस्टॉल होते हैं. इमेज को डाउनलोड करने के बाद, Dockerfile ट्रेनिंग कोड के लिए एंट्रीपॉइंट सेट अप करता है.

दूसरा चरण: कंटेनर बनाना

अपने प्रोजेक्ट के लिए env वैरिएबल तय करने के लिए, अपने Terminal से, इसे चलाएं और your-cloud-project को अपने प्रोजेक्ट के आईडी से बदलना न भूलें:

PROJECT_ID='your-cloud-project'

Google Container Registry में, अपनी कंटेनर इमेज के यूआरआई के साथ वैरिएबल तय करें:

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

Docker कॉन्फ़िगर करें

gcloud auth configure-docker

इसके बाद, अपनी vertex-codelab डायरेक्ट्री के रूट से नीचे दिए गए निर्देशों को चलाकर कंटेनर बनाएं:

docker build ./ -t $IMAGE_URI

आखिर में, इसे Google कंटेनर रजिस्ट्री में भेजें:

docker push $IMAGE_URI

तीसरा चरण: Cloud Storage बकेट बनाना

अपनी ट्रेनिंग जॉब में, हम स्टेजिंग बकेट के पाथ पर जाएंगे.

अपने प्रोजेक्ट में एक नया बकेट बनाने के लिए, अपने Terminal में इन्हें चलाएं.

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

7. हाइपर पैरामीटर ट्यूनिंग जॉब लॉन्च करें

पहला चरण: हाइपर पैरामीटर ट्यूनिंग के साथ कस्टम ट्रेनिंग जॉब बनाना

लॉन्चर से, एक नई TensorFlow 2 Notebook खोलें.

new_notebook

Vertex AI Python SDK टूल इंपोर्ट करें.

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

हाइपर पैरामीटर ट्यूनिंग जॉब को लॉन्च करने के लिए, आपको पहले worker_pool_specs तय करना होगा. इससे मशीन टाइप और Docker इमेज की जानकारी मिलती है. नीचे दिए गए स्पेसिफ़िकेशन में, दो NVIDIA Tesla V100 जीपीयू के साथ एक मशीन के बारे में बताया गया है.

आपको अपने प्रोजेक्ट के 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 तय करें. यह एक डिक्शनरी है, जिसमें उन पैरामीटर के बारे में बताया जाता है जिन्हें आपको ऑप्टिमाइज़ करना है. डिक्शनरी कुंजी वह स्ट्रिंग होती है जो आपने हर हाइपर पैरामीटर के लिए कमांड लाइन आर्ग्युमेंट को असाइन की होती है. डिक्शनरी की वैल्यू, पैरामीटर की खास जानकारी होती है.

हर हाइपर पैरामीटर के लिए, आपको टाइप और ट्यूनिंग सेवा की ओर से आज़माई जाने वाली वैल्यू की सीमाएं तय करनी होंगी. हाइपर पैरामीटर दो तरह के हो सकते हैं. जैसे, डबल, पूर्णांक, कैटगरी या डिस्क्रीट. अगर आपने टाइप डबल या पूर्णांक चुना है, तो आपको कम से कम और ज़्यादा से ज़्यादा वैल्यू देनी होगी. अगर आपने 'कैटगरी' या 'अलग-अलग' विकल्प चुना है, तो आपको वैल्यू भी देनी होगी. डबल और पूर्णांक टाइप के लिए, आपको स्केलिंग वैल्यू भी देनी होगी. सबसे बढ़िया स्केल चुनने के तरीके के बारे में ज़्यादा जानने के लिए यह वीडियो देखें.

# 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: खोज एल्गोरिदम को ग्रिड, रैंडम या डिफ़ॉल्ट (कोई नहीं) पर सेट किया जा सकता है. डिफ़ॉल्ट विकल्प, संभावित हाइपर पैरामीटर वैल्यू के स्पेस को खोजने के लिए बेज़ियन ऑप्टिमाइज़ेशन को लागू करता है. यह सुझाया गया एल्गोरिदम है. इस एल्गोरिदम के बारे में यहां ज़्यादा जानें.

नौकरी शुरू होने के बाद, यूज़र इंटरफ़ेस (यूआई) में इसकी स्थिति को HYPERPARAMETER ट्यूनिंग जॉब टैब में ट्रैक किया जा सकता है.

HP_job

काम पूरा होने के बाद, हाइपर पैरामीटर वैल्यू का सबसे अच्छा कॉम्बिनेशन खोजने के लिए, ट्रायल के नतीजों को देखा और क्रम से लगाया जा सकता है.

HP_results

🎉 बधाई हो! 🎉

आपने Vertex AI को इस्तेमाल करने का तरीका सीख लिया है, ताकि:

  • डिस्ट्रिब्यूटेड ट्रेनिंग के साथ हाइपर पैरामीटर ट्यूनिंग करने का जॉब चलाना

Vertex AI के अलग-अलग हिस्सों के बारे में ज़्यादा जानने के लिए, यह दस्तावेज़ पढ़ें.

8. साफ़-सफ़ाई सेवा

हमने notebook को इस तरह से कॉन्फ़िगर किया है कि उसका समय 60 मिनट बाद बंद हो जाए. इसलिए, हमें इंस्टेंस बंद होने की चिंता करने की ज़रूरत नहीं है. अगर आपको मैन्युअल तरीके से इंस्टेंस शट डाउन करना है, तो कंसोल के Vertex AI Workbench सेक्शन में, 'रोकें' बटन पर क्लिक करें. अगर आपको नोटबुक को पूरी तरह से मिटाना है, तो मिटाएं बटन पर क्लिक करें.

मिटाएं

अपने Cloud Console में नेविगेशन मेन्यू का इस्तेमाल करके, स्टोरेज बकेट मिटाने के लिए स्टोरेज पर जाएं. इसके बाद, अपनी बकेट चुनें और मिटाएं पर क्लिक करें:

स्टोरेज मिटाएं