1. खास जानकारी
इस लैब में, कस्टम ट्रेनिंग जॉब चलाने के लिए, Vertex AI का इस्तेमाल किया जाएगा.
यह लैब, प्रॉटोटाइप से प्रोडक्शन तक वीडियो सीरीज़ का हिस्सा है. फूलों के डेटासेट का इस्तेमाल करके, इमेज क्लासिफ़िकेशन मॉडल बनाया जाएगा. ज़्यादा जानने के लिए, इससे मिलता-जुलता वीडियो देखें:
.
आपको ये सब सीखने को मिलेगा
आपको, इनके बारे में जानकारी मिलेगी:
- Vertex AI Workbench की मदद से मैनेज की जा रही नोटबुक बनाएं
- Vertex AI के यूज़र इंटरफ़ेस (यूआई) से, कस्टम ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करना
- Vertex AI Python SDK की मदद से, कस्टम ट्रेनिंग जॉब को कॉन्फ़िगर और लॉन्च करना
Google Cloud पर इस लैब को चलाने की कुल लागत करीब $1 है.
2. Vertex AI के बारे में जानकारी
यह लैब, Google Cloud पर उपलब्ध एआई प्रॉडक्ट के सबसे नए वर्शन का इस्तेमाल करता है. Vertex AI, Google Cloud के सभी एमएल ऑफ़र को डेवलपमेंट के बेहतर अनुभव के साथ इंटिग्रेट करता है. पहले, AutoML की मदद से ट्रेन किए गए मॉडल और कस्टम मॉडल को अलग-अलग सेवाओं से ऐक्सेस किया जा सकता था. नई सेवा में, एक एपीआई से नए प्रॉडक्ट और इन दोनों का इस्तेमाल किया जा सकता है. मौजूदा प्रोजेक्ट को Vertex AI पर भी माइग्रेट किया जा सकता है.
Vertex AI में कई अलग-अलग प्रॉडक्ट शामिल हैं, ताकि एंड-टू-एंड एमएल वर्कफ़्लो को बेहतर बनाया जा सके. इस लैब में, नीचे हाइलाइट किए गए प्रॉडक्ट पर फ़ोकस किया जाएगा: ट्रेनिंग और वर्कबेंच
3. अपना एनवायरमेंट सेट अप करना
इस कोडलैब को चलाने के लिए, आपके पास बिलिंग की सुविधा वाला Google Cloud Platform प्रोजेक्ट होना चाहिए. प्रोजेक्ट बनाने के लिए, यहां दिए गए निर्देशों का पालन करें.
पहला चरण: Compute Engine API चालू करना
Compute Engine पर जाएं और अगर यह पहले से चालू नहीं है, तो चालू करें को चुनें.
दूसरा चरण: Artifact Registry API को चालू करना
आर्टफ़ैक्ट रजिस्ट्री पर जाएं और अगर यह पहले से चालू नहीं है, तो चालू करें को चुनें. इसका इस्तेमाल, कस्टम ट्रेनिंग जॉब के लिए कंटेनर बनाने के लिए किया जाएगा.
तीसरा चरण: Vertex AI API को चालू करना
अपने Cloud Console के Vertex AI सेक्शन पर जाएं और Vertex AI API चालू करें पर क्लिक करें.
चौथा चरण: Vertex AI Workbench इंस्टेंस बनाना
अपने Cloud Console के Vertex AI सेक्शन में, वर्कबेंच पर क्लिक करें:
अगर Notebooks API पहले से चालू नहीं है, तो उसे चालू करें.
इसके बाद, मैनेज की गई किताबें पर क्लिक करें:
इसके बाद, नई नोटबुक चुनें.
अपनी नोटबुक को कोई नाम दें. इसके बाद, अनुमति में जाकर, सेवा खाता चुनें
ऐडवांस सेटिंग को चुनें.
अगर टर्मिनल की सुविधा पहले से चालू नहीं है, तो सुरक्षा में जाकर, "टर्मिनल चालू करें" को चुनें.
अन्य सभी बेहतर सेटिंग को वैसे ही रहने दिया जा सकता है.
इसके बाद, बनाएं पर क्लिक करें. इंस्टेंस को प्रोवाइड करने में कुछ मिनट लगेंगे.
इंस्टेंस बनाने के बाद, JUPYTERLAB खोलें को चुनें.
4. ट्रेनिंग ऐप्लिकेशन कोड को कंटेनर में डालना
आपको अपने ट्रेनिंग ऐप्लिकेशन कोड को Docker कंटेनर में डालकर और इस कंटेनर को Google आर्टफ़ैक्ट रजिस्ट्री में डालकर, इस ट्रेनिंग जॉब को Vertex AI में सबमिट करना होगा. इस तरीके का इस्तेमाल करके, किसी भी फ़्रेमवर्क के साथ बनाए गए मॉडल को ट्रेनिंग दी जा सकती है.
शुरू करने के लिए, अपने नोटबुक इंस्टेंस में, लॉन्चर मेन्यू से Terminal विंडो खोलें:
पहला चरण: Cloud Storage की बकेट बनाना
इस ट्रेनिंग जॉब में, आपको ट्रेन किए गए TensorFlow मॉडल को Cloud Storage बकेट में एक्सपोर्ट करना होगा. आपको ट्रेनिंग के लिए डेटा को Cloud Storage की बकेट में भी सेव करना होगा.
अपने प्रोजेक्ट के लिए env वैरिएबल तय करने के लिए, अपने Terminal से, इसे चलाएं और your-cloud-project
को अपने प्रोजेक्ट के आईडी से बदलना न भूलें:
PROJECT_ID='your-cloud-project'
इसके बाद, अपने प्रोजेक्ट में नई बकेट बनाने के लिए, अपने टर्मिनल में यह कोड चलाएं.
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
दूसरा चरण: डेटा को Cloud Storage बकेट में कॉपी करना
हमें फूलों का डेटासेट, Cloud Storage में ले जाना है. डेमो के मकसद से, आपको सबसे पहले डेटासेट को इस Workbench इंस्टेंस में डाउनलोड करना होगा. इसके बाद, उसे किसी बकेट में कॉपी करना होगा.
डेटा डाउनलोड करें और उसे अनटैग करें.
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
नाम की एक नई डायरेक्ट्री बनाएं और उसमें cd करें:
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 में, आपको इमेज को चलाने के लिए ज़रूरी सभी निर्देश शामिल करने होंगे. इससे सभी ज़रूरी लाइब्रेरी इंस्टॉल हो जाएंगी और ट्रेनिंग कोड के लिए एंट्री पॉइंट सेट अप हो जाएगा.
अपने टर्मिनल से, flowers डायरेक्ट्री के रूट में एक खाली 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 कमांड से बेस इमेज के बारे में पता चलता है. यह पैरंट इमेज होती है, जिस पर आपकी बनाई गई इमेज बनाई जाएगी. बेस इमेज के तौर पर, Deep Learning Container TensorFlow Enterprise 2.8 GPU Docker इमेज का इस्तेमाल किया जाएगा. Google Cloud पर डीप लर्निंग कंटेनर में, एमएल और डेटा साइंस के कई सामान्य फ़्रेमवर्क पहले से इंस्टॉल होते हैं.
WORKDIR कमांड, इमेज पर मौजूद उस डायरेक्ट्री के बारे में बताता है जहां अगले निर्देश चलाए जाते हैं.
COPY कमांड, ट्रेनर कोड को Docker इमेज में कॉपी करता है. ध्यान दें कि इस उदाहरण में, हमारी ट्रेनर डायरेक्ट्री में सिर्फ़ एक Python फ़ाइल है. हालांकि, ज़्यादा असरदार उदाहरण के लिए, आपके पास अन्य फ़ाइलें भी हो सकती हैं. हो सकता है कि एक कोड का नाम data.py
हो, जो डेटा को प्री-प्रोसेस करता हो और दूसरे कोड का नाम model.py
हो, जिसमें सिर्फ़ मॉडल कोड हो. ज़्यादा जटिल ट्रेनिंग कोड के लिए, Python प्रोजेक्ट को पैकेज करने के बारे में Python के दस्तावेज़ देखें.
अगर आपको कोई और लाइब्रेरी जोड़नी है, तो pip install (उदाहरण के लिए: RUN pip install -r requirements.txt
) के लिए RUN कमांड का इस्तेमाल किया जा सकता है. हालांकि, यहां दिए गए उदाहरण के लिए, हमें किसी और चीज़ की ज़रूरत नहीं है.
आखिर में, ENTRYPOINT कमांड, ट्रेनर को शुरू करने के लिए एंट्री पॉइंट सेट करता है. ट्रेनिंग जॉब शुरू करने पर, यह कोड चलेगा. हमारे मामले में, task.py
फ़ाइल को एक्ज़ीक्यूट किया जा रहा है.
Vertex AI Training के लिए Docker फ़ाइलें लिखने के बारे में ज़्यादा जानने के लिए, यहां जाएं.
चौथा चरण: कंटेनर बनाना
अपने प्रोजेक्ट के लिए एनवायरमेंट वैरिएबल तय करने के लिए, Workbench नोटबुक के टर्मिनल से यह कोड चलाएं. साथ ही, 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
Docker कॉन्फ़िगर करना
gcloud auth configure-docker \
us-central1-docker.pkg.dev
इसके बाद, अपनी flower
डायरेक्ट्री के रूट से, कंटेनर बनाने के लिए यह कमांड चलाएं:
docker build ./ -t $IMAGE_URI
आखिर में, इसे Artifact Registry में पुश करें:
docker push $IMAGE_URI
आर्टफ़ैक्ट रजिस्ट्री में कंटेनर को पुश करने के बाद, ट्रेनिंग जॉब शुरू की जा सकती है.
5. Vertex AI में कस्टम ट्रेनिंग जॉब चलाएं
यह लैब Google Artifact Registry पर मौजूद कस्टम कंटेनर के ज़रिए कस्टम ट्रेनिंग का इस्तेमाल करती है. हालांकि, आपके पास पहले से बने कंटेनर की मदद से भी ट्रेनिंग देने का विकल्प होता है.
शुरू करने के लिए, अपने Cloud Console के Vertex सेक्शन में ट्रेनिंग सेक्शन पर जाएं:
पहला चरण: ट्रेनिंग जॉब कॉन्फ़िगर करना
ट्रेनिंग जॉब के लिए पैरामीटर डालने के लिए, बनाएं पर क्लिक करें.
- डेटासेट में जाकर, कोई मैनेज किया गया डेटासेट नहीं है चुनें
- इसके बाद, ट्रेनिंग के तरीके के तौर पर कस्टम ट्रेनिंग (बेहतर) चुनें और जारी रखें पर क्लिक करें.
- नए मॉडल को ट्रेन करें चुनें, फिर मॉडल का नाम के लिए
flowers-model
(या जिसे भी आप अपने मॉडल को कॉल करना चाहते हैं) डालें - जारी रखें पर क्लिक करें
कंटेनर की सेटिंग वाले चरण में, कस्टम कंटेनर चुनें:
पहले बॉक्स (कंटेनर इमेज) में, पिछले सेक्शन से अपने IMAGE_URI
वैरिएबल की वैल्यू डालें. यह इस तरह होना चाहिए: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest
, जिसमें आपका प्रोजेक्ट आईडी हो. बाकी फ़ील्ड खाली छोड़ें और जारी रखें पर क्लिक करें.
जारी रखें पर फिर से क्लिक करके, हाइपरपैरामीटर का चरण छोड़ें.
दूसरा चरण: Compute क्लस्टर कॉन्फ़िगर करना
वर्कर पूल 0 को इस तरह कॉन्फ़िगर करें:
फ़िलहाल, आपको छठा चरण छोड़ना होगा और इस सीरीज़ के अगले लैब में, अनुमान लगाने वाले कंटेनर को कॉन्फ़िगर करना होगा.
ट्रेनिंग जॉब शुरू करने के लिए, ट्रेनिंग शुरू करें पर क्लिक करें. अपने कंसोल के ट्रेनिंग सेक्शन में, ट्रेनिंग पाइपलाइन टैब में आपको हाल ही में लॉन्च की गई नौकरी दिखेगी:
🎉 बधाई हो! 🎉
आपने Vertex AI का इस्तेमाल करके, ये काम करने का तरीका जाना है:
- कस्टम कंटेनर में दिए गए ट्रेनिंग कोड के लिए, कस्टम ट्रेनिंग जॉब लॉन्च करें. आपने इस उदाहरण में TensorFlow मॉडल का इस्तेमाल किया है, लेकिन आप कस्टम या बिल्ट-इन कंटेनर का इस्तेमाल करके किसी भी फ़्रेमवर्क के साथ बनाए गए मॉडल को ट्रेनिंग दे सकते हैं.
Vertex के अलग-अलग हिस्सों के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
6. [ज़रूरी नहीं] Vertex AI Python SDK का इस्तेमाल करना
पिछले सेक्शन में, यूज़र इंटरफ़ेस (यूआई) की मदद से ट्रेनिंग जॉब लॉन्च करने का तरीका बताया गया था. इस सेक्शन में, आपको Vertex AI Python SDK का इस्तेमाल करके, ट्रेनिंग जॉब सबमिट करने का एक और तरीका दिखेगा.
अपने नोटबुक इंस्टेंस पर वापस जाएं और लॉन्चर से TensorFlow 2 नोटबुक बनाएं:
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)
डेमो के मकसद से, इस जॉब को पिछले सेक्शन के मुकाबले बड़ी मशीन पर चलाने के लिए कॉन्फ़िगर किया गया है. इसके अलावा, हम GPU का इस्तेमाल कर रहे हैं. अगर आपने machine-type
, accelerator_type
या accelerator_count
की वैल्यू नहीं दी है, तो जॉब डिफ़ॉल्ट रूप से n1-standard-4
पर चलेगा.
आपको कंसोल के ट्रेनिंग सेक्शन में, पसंद के मुताबिक बनाई गई नौकरियां टैब में, ट्रेनिंग वाली अपनी नौकरी दिखेगी.
7. साफ़-सफ़ाई सेवा
Vertex AI Workbench की मदद से मैनेज किए जा रहे नोटबुक में, कोई गतिविधि न होने पर बंद होने की सुविधा होती है. इसलिए, हमें इंस्टेंस को बंद करने की चिंता नहीं करनी पड़ती. अगर आपको इंस्टेंस को मैन्युअल तरीके से बंद करना है, तो कंसोल के Vertex AI Workbench सेक्शन में जाकर, 'बंद करें' बटन पर क्लिक करें. अगर आपको नोटबुक को पूरी तरह से मिटाना है, तो मिटाएं बटन पर क्लिक करें.
स्टोरेज बकेट मिटाने के लिए, अपने Cloud Console में नेविगेशन मेन्यू का इस्तेमाल करके, स्टोरेज पर जाएं. इसके बाद, अपनी बकेट चुनें और 'मिटाएं' पर क्लिक करें: