Vertex AI: TensorFlow की मदद से, एक से ज़्यादा कर्मचारियों के लिए ट्रेनिंग और ट्रांसफ़र लर्निंग

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

इस लैब में, आपको TensorFlow के मॉडल के लिए, मल्टी-वर्कर ट्रेनिंग जॉब चलाने के लिए Vertex AI का इस्तेमाल करना होगा.

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

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

  • कई कर्मचारियों वाली ट्रेनिंग के लिए, ट्रेनिंग ऐप्लिकेशन कोड में बदलाव करें
  • Vertex AI यूज़र इंटरफ़ेस (यूआई) की मदद से, मल्टी-वर्कर ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करें
  • Vertex SDK टूल की मदद से, मल्टी-वर्कर ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करें

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

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

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

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

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

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

इस लैब में, TensorFlow डेटासेट से कैसावा के डेटासेट पर इमेज क्लासिफ़िकेशन मॉडल को ट्रेनिंग देने के लिए, ट्रांसफ़र लर्निंग का इस्तेमाल किया जाएगा. आपको जिस आर्किटेक्चर का इस्तेमाल करना है वह ResNet50 मॉडल है. इसे tf.keras.applications लाइब्रेरी से लिया गया है, जिसे Imagenet डेटासेट पर पहले से ट्रेन किया गया है.

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

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

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

MultiWorkerMirroredStrategy एक सिंक्रोनस डेटा समानता रणनीति है, जिसका इस्तेमाल आप सिर्फ़ कुछ कोड बदलावों के साथ कर सकते हैं. आपके क्लस्टर में मौजूद हर डिवाइस के लिए, इस मॉडल की एक कॉपी बनाई जाती है. बाद के ग्रेडिएंट अपडेट सिंक्रोनस तरीके से होंगे. इसका मतलब है कि हर वर्कर डिवाइस, इनपुट डेटा के अलग-अलग स्लाइस के आधार पर, मॉडल से आगे और पीछे वाले पास की गणना करता है. इसके बाद, इनमें से हर स्लाइस से कंप्यूट किए गए ग्रेडिएंट को एक मशीन और क्लस्टर की सभी मशीनों में एग्रीगेट किया जाता है और ऑल-रिड्यूस यानी ऑल-रिड्यूस नाम की प्रोसेस में कम (आम तौर पर औसत) किया जाता है. इसके बाद, ऑप्टिमाइज़र इन कम ग्रेडिएंट के साथ पैरामीटर को अपडेट करता है, जिससे डिवाइस सिंक में रहते हैं. TensorFlow के साथ उपलब्ध कराई गई ट्रेनिंग के बारे में ज़्यादा जानने के लिए, यहां दिया गया वीडियो देखें:

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

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

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

Compute Engine पर जाएं और अगर यह पहले से चालू नहीं है, तो चालू करें को चुनें. आपको अपना notebook इंस्टेंस बनाने के लिए इसकी ज़रूरत होगी.

दूसरा चरण: 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

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

enable_terminal

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

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

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

open_jupyterlab

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

पुष्टि करें

5. ट्रेनिंग ऐप्लिकेशन कोड को कंटेनर में बदलें

आपको इस ट्रेनिंग जॉब को Vertex में सबमिट करने के लिए, Docker कंटेनर में अपना ट्रेनिंग ऐप्लिकेशन कोड डालना होगा. इसके बाद, इस कंटेनर को Google Container Registry में भेजना होगा. इस तरीके का इस्तेमाल करके, किसी भी फ़्रेमवर्क के साथ बनाए गए मॉडल को ट्रेनिंग दी जा सकती है.

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

टर्मिनल को नोटबुक में खोलें

cassava नाम की एक नई डायरेक्ट्री बनाएं और उसमें सीडी लें:

mkdir cassava
cd cassava

पहला चरण: Dockerfile बनाएं

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

अपने Terminal से, एक खाली Dockerfile बनाएं:

touch Dockerfile

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

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

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

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

PROJECT_ID='your-cloud-project'

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

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

तीसरा चरण: मॉडल ट्रेनिंग कोड जोड़ना

अपने Terminal से, ट्रेनिंग कोड और Python फ़ाइल की डायरेक्ट्री बनाने के लिए इन कोड को चलाएं, जिनमें कोड जोड़ना है:

mkdir trainer
touch trainer/task.py

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

+ Dockerfile
+ trainer/
    + task.py

इसके बाद, अभी-अभी बनाई गई task.py फ़ाइल खोलें और नीचे दिए गए कोड को कॉपी करें. आपको {your-gcs-bucket} को उस Cloud Storage बकेट के नाम से बदलना होगा जिसे आपने अभी-अभी बनाया है.

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 एपीआई के MultiWorkerMirroredStrategy का इस्तेमाल करता है.

कोड में कुछ कॉम्पोनेंट होते हैं, जो आपके कोड को MultiWorkerMirroredStrategy के साथ काम करने के लिए ज़रूरी होते हैं.

  1. डेटा को शार्ड किया जाना चाहिए. इसका मतलब है कि हर वर्कर को पूरे डेटासेट का एक सबसेट असाइन किया गया है. इसलिए, हर चरण में हर वर्कर, ओवरलैप न होने वाले डेटासेट एलिमेंट का ग्लोबल बैच साइज़ प्रोसेस करेगा. यह शार्डिंग tf.data.experimental.AutoShardPolicy के साथ अपने आप होती है, जिसे FILE या DATA पर सेट किया जा सकता है. इस उदाहरण में, create_dataset() फ़ंक्शन AutoShardPolicy को DATA पर सेट करता है, क्योंकि कसावा के डेटासेट को एक से ज़्यादा फ़ाइलों के तौर पर डाउनलोड नहीं किया गया है. हालांकि, अगर आपने इस नीति को 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 वैरिएबल तय करने के लिए, अपने Terminal से, इसे चलाएं और your-cloud-project को अपने प्रोजेक्ट के आईडी से बदलना न भूलें:

PROJECT_ID='your-cloud-project'

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

IMAGE_URI="gcr.io/$PROJECT_ID/multiworker:cassava"

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

gcloud auth configure-docker

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

docker build ./ -t $IMAGE_URI

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

docker push $IMAGE_URI

कंटेनर रजिस्ट्री में भेजे गए कंटेनर के साथ, अब आप ट्रेनिंग का काम शुरू करने के लिए तैयार हैं.

6. Vertex AI में मल्टीवर्कर ट्रेनिंग का काम करें

यह लैब, Google Container Registry पर मौजूद कस्टम कंटेनर के ज़रिए कस्टम ट्रेनिंग का इस्तेमाल करती है. हालांकि, पहले से बने कंटेनर की मदद से भी ट्रेनिंग दी जा सकती है.

शुरू करने के लिए, अपने Cloud Console के Vertex सेक्शन में, ट्रेनिंग सेक्शन पर जाएं:

uCAIP मेन्यू

पहला चरण: ट्रेनिंग जॉब कॉन्फ़िगर करना

अपने ट्रेनिंग जॉब के पैरामीटर डालने के लिए, बनाएं पर क्लिक करें.

  • डेटासेट में जाकर, मैनेज किया जा रहा कोई डेटासेट नहीं है चुनें
  • इसके बाद, ट्रेनिंग के तरीके के तौर पर कस्टम ट्रेनिंग (ऐडवांस) चुनें और जारी रखें पर क्लिक करें.
  • मॉडल का नाम के लिए multiworker-cassava (या जिसे भी आप अपने मॉडल को पुकारना चाहते हैं) डालें
  • जारी रखें पर क्लिक करें

कंटेनर सेटिंग चरण में, कस्टम कंटेनर चुनें:

कस्टम कंटेनर का विकल्प

पहले बॉक्स (कंटेनर इमेज) में, पिछले सेक्शन से अपने IMAGE_URI वैरिएबल की वैल्यू डालें. यह आपके प्रोजेक्ट आईडी के साथ gcr.io/your-cloud-project/multiworker:cassava होना चाहिए. बाकी फ़ील्ड को खाली छोड़ दें और जारी रखें पर क्लिक करें.

जारी रखें पर दोबारा क्लिक करके, Hhyperपैरामीटर चरण को छोड़ें.

दूसरा चरण: कंप्यूट क्लस्टर को कॉन्फ़िगर करें

Vertex AI में अलग-अलग तरह के मशीन से होने वाले टास्क को पूरा करने के लिए, चार वर्कर पूल उपलब्ध हैं.

वर्कर पूल 0, प्राइमरी, चीफ़, शेड्यूलर या "मास्टर" को कॉन्फ़िगर करता है. MultiWorkerMirroredStrategy में, सभी मशीनों को वर्कर के तौर पर दर्ज किया जाता है. ये ऐसी फ़िज़िकल मशीन होती हैं जिन पर डुप्लीकेट कंप्यूटेशन इस्तेमाल किया जाता है. हर मशीन के काम करने के अलावा, एक कर्मचारी की ज़रूरत होती है, जो कुछ और काम भी करे. जैसे, चेकपॉइंट सेव करना और TensorBoard में खास जानकारी वाली फ़ाइलें लिखना. इस मशीन को चीफ़ के नाम से जाना जाता है. यहां सिर्फ़ एक चीफ़ वर्कर होता है. इसलिए, वर्कर पूल 0 के लिए आपके वर्कर की संख्या हमेशा 1 होगी.

कंप्यूट और कीमत में, चुने गए क्षेत्र को वैसे ही रहने दें और वर्कर पूल 0 को इस तरह से कॉन्फ़िगर करें:

Worker_pool_0

वर्कर पूल 1 में, अपने क्लस्टर के लिए वर्कर को कॉन्फ़िगर किया जाता है.

वर्कर पूल 1 को इस तरह कॉन्फ़िगर करें:

Worker_pool_1

क्लस्टर को अब सिर्फ़ दो सीपीयू वाली मशीनों के लिए कॉन्फ़िगर किया गया है. ट्रेनिंग ऐप्लिकेशन कोड चलने पर, MultiWorkerMirroredStrategy दोनों मशीनों पर ट्रेनिंग देगा.

MultiWorkerMirroredStrategy में सिर्फ़ मुख्य और कर्मचारी वाले टास्क टाइप होते हैं. इसलिए, अतिरिक्त वर्कर पूल को कॉन्फ़िगर करने की ज़रूरत नहीं होती. हालांकि, अगर TensorFlow के ParameterServerStrategy का इस्तेमाल किया जाता, तो आपको वर्कर पूल 2 में अपने पैरामीटर सर्वर कॉन्फ़िगर करने होते. अगर आपको अपने क्लस्टर में कोई समीक्षक जोड़ना है, तो आपको उस मशीन को वर्कर पूल 3 में कॉन्फ़िगर करना होगा.

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

ट्रेनिंग के क्षेत्र में नौकरियां

🎉 बधाई हो! 🎉

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

  • कस्टम कंटेनर में दिए गए ट्रेनिंग कोड के लिए, मल्टी-वर्कर ट्रेनिंग जॉब लॉन्च करना. आपने इस उदाहरण में TensorFlow मॉडल का इस्तेमाल किया है, लेकिन आप कस्टम या बिल्ट-इन कंटेनर का इस्तेमाल करके किसी भी फ़्रेमवर्क के साथ बनाए गए मॉडल को ट्रेनिंग दे सकते हैं.

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

7. [ज़रूरी नहीं] Vertex SDK टूल का इस्तेमाल करना

पिछले सेक्शन में, यूज़र इंटरफ़ेस (यूआई) के ज़रिए ट्रेनिंग जॉब को लॉन्च करने का तरीका दिखाया गया था. इस सेक्शन में, Vertex Python API का इस्तेमाल करके, ट्रेनिंग जॉब सबमिट करने का एक अन्य तरीका बताया गया है.

अपने notebook के इंस्टेंस पर वापस जाएं और लॉन्चर से TensorFlow 2 नोटबुक बनाएं:

new_notebook

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

from google.cloud import aiplatform

मल्टी-वर्कर ट्रेनिंग जॉब को लॉन्च करने के लिए, आपको सबसे पहले वर्कर पूल की स्पेसिफ़िकेशन तय करनी होगी. ध्यान दें कि खास जानकारी में जीपीयू का इस्तेमाल करना ज़रूरी नहीं है. अगर आपको पिछले सेक्शन में दिखाया गया है, तो सिर्फ़ सीपीयू वाला क्लस्टर करवाने के लिए, 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()

पसंद के मुताबिक बनाई गई नौकरियां टैब में, आपके कंसोल के ट्रेनिंग सेक्शन में आपको अपनी ट्रेनिंग की नौकरी दिखेगी:

पसंद के मुताबिक नौकरियां

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

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

इंस्टेंस रोकें

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

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