प्रोटोटाइप टू प्रोडक्शन: Vertex AI की मदद से कस्टम मॉडल को ट्रेनिंग देना

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

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

यह लैब, प्रोडक्शन का प्रोटोटाइप वीडियो सीरीज़ का हिस्सा है. फूलों के डेटासेट का इस्तेमाल करके, इमेज की कैटगरी तय करने वाला मॉडल बनाया जाएगा. ज़्यादा जानने के लिए, इससे मिलता-जुलता वीडियो देखें:

.

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

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

  • Vertex AI Workbench की मदद से मैनेज की जा रही नोटबुक बनाएं
  • Vertex AI यूज़र इंटरफ़ेस (यूआई) की मदद से, कस्टम ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करें
  • Vertex AI Python SDK की मदद से, कस्टम ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करना

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

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

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

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

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

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

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

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

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

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

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

तीसरा चरण: 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

बेहतर सेटिंग चुनें.

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

enable_terminal

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

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

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

open_jupyterlab

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

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

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

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

पहला चरण: Cloud Storage बकेट बनाना

इस ट्रेनिंग जॉब में, आपको ट्रेन किए गए TensorFlow के मॉडल को Cloud Storage बकेट में एक्सपोर्ट करना होगा. ट्रेनिंग के लिए उपलब्ध डेटा को Cloud Storage बकेट में भी सेव किया जा सकता है.

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

PROJECT_ID='your-cloud-project'

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

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

दूसरा चरण: Cloud Storage बकेट में डेटा कॉपी करना

हमें अपने फूलों का डेटासेट, Cloud Storage में ले जाना होगा. दिखाने के लिए, आपको सबसे पहले इस वर्कबेंच इंस्टेंस में डेटासेट डाउनलोड करना होगा. इसके बाद, इसे किसी बकेट में कॉपी करना होगा.

डेटा डाउनलोड करें और उससे छेड़छाड़ करें.

wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz

इसके बाद, इसे उस बकेट में कॉपी करें जिसे आपने अभी-अभी बनाया है. हम -r को इसलिए जोड़ते हैं क्योंकि हम पूरी डायरेक्ट्री को कॉपी करना चाहते हैं और -m को मल्टी-प्रोसेसिंग कॉपी बनाना चाहते हैं. इससे चीज़ें तेज़ी से बढ़ जाएंगी.

gsutil -m cp -r flower_photos $BUCKET

तीसरा चरण: ट्रेनिंग कोड लिखना

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

mkdir flowers
cd flowers

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

mkdir trainer
touch trainer/task.py

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

+ trainer/
    + task.py

अपने ट्रेनिंग ऐप्लिकेशन कोड को व्यवस्थित करने के तरीके के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.

इसके बाद, अभी-अभी बनाई गई task.py फ़ाइल खोलें और नीचे दिए गए कोड को कॉपी करें.

आपको {your-gcs-bucket} को उस Cloud Storage बकेट के नाम से बदलना होगा जिसे आपने अभी-अभी बनाया है.

Cloud Storage FUSE टूल की मदद से, Vertex AI Training की ट्रेनिंग जॉब में, Cloud Storage में मौजूद डेटा को लोकल फ़ाइल सिस्टम में फ़ाइलों के तौर पर ऐक्सेस किया जा सकता है. जब कोई कस्टम ट्रेनिंग जॉब शुरू किया जाता है, तो जॉब को एक डायरेक्ट्री /gcs दिखती है. इसमें आपकी सभी Cloud Storage बकेट सबडायरेक्ट्री के तौर पर शामिल होती हैं. यही वजह है कि ट्रेनिंग कोड में मौजूद डेटा पाथ, /gcs से शुरू होते हैं.

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

# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

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

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

चौथा चरण: Dockerfile बनाएं

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

अपने Terminal से, अपने फूल डायरेक्ट्री के रूट में एक खाली Dockerfile बनाएं:

touch Dockerfile

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

+ Dockerfile
+ trainer/
    + task.py

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

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

इस फ़ाइल में दिए गए निर्देशों की समीक्षा करें.

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

WorkDIR निर्देश इमेज पर उस डायरेक्ट्री के बारे में बताता है जहां बाद के निर्देश चलाए जाते हैं.

कॉपी कमांड, ट्रेनर कोड को Docker इमेज में कॉपी करता है. ध्यान दें कि इस उदाहरण में हमारी ट्रेनर डायरेक्ट्री में सिर्फ़ एक Python फ़ाइल है, लेकिन ज़्यादा व्यावहारिक उदाहरण के लिए, आपके पास अतिरिक्त फ़ाइलें हो सकती हैं. उदाहरण के लिए, data.py नाम की कंपनी, जो डेटा प्री-प्रोसेसिंग को मैनेज करती है और दूसरा model.py नाम की, जिसमें सिर्फ़ मॉडल कोड है वगैरह. ज़्यादा मुश्किल ट्रेनिंग कोड के लिए, Python प्रोजेक्ट की पैकेजिंग करना पर Python दस्तावेज़ देखें.

अगर आपको कोई दूसरी लाइब्रेरी जोड़नी है, तो पीआईपी (पिक्चर में पिक्चर) इंस्टॉल करने के लिए, RUN कमांड का इस्तेमाल करें. जैसे: RUN pip install -r requirements.txt. हालांकि, हमें यहां अपने उदाहरण के मुताबिक कुछ और करने की ज़रूरत नहीं है.

आखिर में, ENTRYPOINT कमांड, ट्रेनर को शुरू करने के लिए एंट्री पॉइंट सेट करता है. जब हम अपनी ट्रेनिंग का काम शुरू करेंगे, तब यह इवेंट ट्रिगर होगा. हमारे मामले में, task.py फ़ाइल को एक्ज़ीक्यूट किया जा रहा है.

Vertex AI की ट्रेनिंग के लिए Dockerfiles लिखने के बारे में ज़्यादा जानने के लिए, यहां क्लिक करें.

चौथा चरण: कंटेनर बनाना

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

PROJECT_ID='your-cloud-project'

Artifact Registry में, डेटा स्टोर करने की जगह बनाएं

REPO_NAME='flower-app'

gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"

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

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest

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

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

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

docker build ./ -t $IMAGE_URI

आखिर में, उसे Artifact Registry में भेजें:

docker push $IMAGE_URI

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

5. Vertex AI में कस्टम ट्रेनिंग जॉब चलाएं

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

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

ट्रेन का मेन्यू

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

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

create_training

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

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

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

पहले बॉक्स (कंटेनर इमेज) में, पिछले सेक्शन से अपने IMAGE_URI वैरिएबल की वैल्यू डालें. यह आपके प्रोजेक्ट आईडी के साथ us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest होना चाहिए. बाकी फ़ील्ड को खाली छोड़ दें और जारी रखें पर क्लिक करें.

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

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

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

worker_pool_0

फ़िलहाल, आपको छठा चरण छोड़ना होगा और इस सीरीज़ के अगले लैब में, अनुमान लगाने वाले कंटेनर को कॉन्फ़िगर करना होगा.

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

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

🎉 बधाई हो! 🎉

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

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

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

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

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

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

new_notebook

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

from google.cloud import aiplatform

इसके बाद, CustomContainerTrainingJob बनाएं. आपको container_uri में, {PROJECT_ID} को अपने प्रोजेक्ट के नाम से बदलना होगा. साथ ही, आपको staging_bucket में {BUCKET} को, पहले बनाए गए बकेट से बदलना होगा.

my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
                                               container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
                                               staging_bucket='gs://{BUCKET}')

इसके बाद, जॉब चलाएं.

my_job.run(replica_count=1,
           machine_type='n1-standard-8',
           accelerator_type='NVIDIA_TESLA_V100',
           accelerator_count=1)

दिखाने के लिए, इस जॉब को पिछले सेक्शन के मुकाबले बड़ी मशीन पर चलाने के लिए कॉन्फ़िगर किया गया है. इसके अलावा, हम जीपीयू का इस्तेमाल कर रहे हैं. अगर आप machine-type, accelerator_type या accelerator_count की जानकारी नहीं देते, तो यह जॉब डिफ़ॉल्ट रूप से n1-standard-4 पर चलेगा.

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

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

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

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

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

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