प्रोटोटाइप से प्रोडक्शन तक: पसंद के मुताबिक तैयार किए गए मॉडल से अनुमान पाना

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

इस लैब में, आपको Vertex AI का इस्तेमाल करके, कस्टम ट्रेन किए गए मॉडल से ऑनलाइन और एक साथ कई अनुमान पाने होंगे.

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

.

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

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

  • Vertex AI Model Registry में मॉडल अपलोड करना
  • किसी एंडपॉइंट पर मॉडल डिप्लॉय करना
  • यूज़र इंटरफ़ेस (यूआई) और SDK टूल की मदद से, ऑनलाइन और एक साथ कई अनुमान पाना

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

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

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

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

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

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

अपना एनवायरमेंट सेट अप करने के लिए, Vertex AI की मदद से कस्टम मॉडल की ट्रेनिंग लैब में दिए गए चरणों को पूरा करें.

4. रजिस्ट्री में मॉडल अपलोड करें

अनुमान पाने के लिए अपने मॉडल का इस्तेमाल करने से पहले, हमें उसे Vertex AI Model Registry पर अपलोड करना होगा. यह एक रिपॉज़िटरी है, जहां अपने एमएल मॉडल के लाइफ़साइकल को मैनेज किया जा सकता है.

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

training_prediction

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

कंसोल में मॉडल सेक्शन पर जाएं.

मॉडल मेन्यू

इंपोर्ट करें को चुनें

import_model

नए मॉडल के तौर पर इंपोर्ट करें चुनें. इसके बाद, अपने मॉडल के लिए कोई नाम दें

new_model

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

इसके बाद, उस Cloud Storage बकेट का पाथ दें जहां आपने कस्टम ट्रेनिंग जॉब में मॉडल आर्टफ़ैक्ट सेव किए हैं. यह कुछ ऐसा दिखना चाहिए gs://{PROJECT_ID}-bucket/model_output

हम 'पूरी जानकारी देने वाले' सेक्शन को छोड़कर आगे बढ़ेंगे. हालांकि, अगर आपको Vertex Explainable AI के बारे में ज़्यादा जानकारी चाहिए, तो दस्तावेज़ देखें.

मॉडल इंपोर्ट होने पर, यह आपको रजिस्ट्री में दिखेगा.

flower_model

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

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. मॉडल को एंडपॉइंट पर डिप्लॉय करना

Vertex AI में दो तरह के अनुमान लगाने के काम किए जा सकते हैं: बैच और ऑनलाइन.

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

दूसरी ओर, अगर आपको अपने मॉडल में फ़्लाइट के दौरान भेजे गए डेटा से, कम इंतज़ार के साथ अनुमान चाहिए, तो आपको ऑनलाइन अनुमान का इस्तेमाल करना होगा.

अब मॉडल रजिस्ट्री में है, इसलिए हम इसका इस्तेमाल बैच का अनुमान लगाने के लिए कर सकते हैं.

हालांकि, अगर हमें ऑनलाइन अनुमान पाना है, तो हमें मॉडल को एंडपॉइंट पर डिप्लॉय करना होगा. इससे, कम इंतज़ार के साथ अनुमान लगाने के लिए, सेव किए गए मॉडल के आर्टफ़ैक्ट को फ़िज़िकल रिसॉर्स से जोड़ा जाता है.

किसी एंडपॉइंट पर डिप्लॉय करने के लिए, मॉडल के सबसे दाईं ओर मौजूद तीन बिंदु चुनें. इसके बाद, एंडपॉइंट पर डिप्लॉय करें को चुनें.

deploy_model

अपने एंडपॉइंट को कोई नाम दें. इसके बाद, बाकी सेटिंग में कोई बदलाव न करें और जारी रखें पर क्लिक करें

endpoint_name

एंडपॉइंट ऑटो स्केलिंग के साथ काम करते हैं. इसका मतलब है कि आपके पास कम से कम और ज़्यादा से ज़्यादा संख्या सेट करने की सुविधा है. साथ ही, इन सीमाओं में ट्रैफ़िक की मांग को पूरा करने के लिए, कंप्यूट नोड बड़े पैमाने पर काम करेंगे.

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

endpoint_compute

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

इसके बाद, डिप्लॉय करें पर क्लिक करें

डिप्लॉय होने में कुछ मिनट लगेंगे. इसके बाद, आपको अपने मॉडल के डिप्लॉयमेंट स्टेटस के तौर पर Vertex AI पर डिप्लॉय किया गया दिखेगा.

अगर आपको SDK टूल की मदद से कोई मॉडल डिप्लॉय करना है, तो नीचे दिया गया कमांड चलाएं.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. अनुमान पाना

ऑनलाइन अनुमान

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

डेमो के मकसद से, हम Workbench से इस एंडपॉइंट को कॉल करेंगे.

पिछले लैब में बनाई गई नोटबुक पर वापस जाएं. लॉन्चर से, TensorFlow 2 वाली नई नोटबुक बनाएं.

tf_kernel

Vertex AI Python SDK, numpy, और PIL इंपोर्ट करना

from google.cloud import aiplatform

import numpy as np
from PIL import Image

नीचे दी गई इमेज डाउनलोड करें और उसे अपने वर्कबेंच इंस्टेंस में अपलोड करें. हम डैंडलायन की इस इमेज पर मॉडल की जांच करेंगे.

test_image

सबसे पहले, एंडपॉइंट तय करें. आपको नीचे दिए गए {PROJECT_NUMBER} और {ENDPOINT_ID} को बदलना होगा.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

आपको अपना Endpoint_id, Cloud Console के एंडपॉइंट सेक्शन में मिल सकता है.

endpoint_id

साथ ही, आपको अपना प्रोजेक्ट नंबर, कंसोल के होम पेज पर दिखेगा. ध्यान दें कि यह प्रोजेक्ट आईडी से अलग होता है.

project_number

नीचे दिया गया कोड, PIL की मदद से इमेज को खोलता है और उसका साइज़ बदलता है.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

इसके बाद, numpy डेटा को float32 टाइप और सूची में बदलें. हम इसे सूची में बदल देते हैं, क्योंकि numpy डेटा को JSON में सीरियल नहीं किया जा सकता. इसलिए, हम इसे अपने अनुरोध के मुख्य हिस्से में नहीं भेज सकते.

x_test = np.asarray(im).astype(np.float32).tolist()

आखिर में, endpoint.predict को कॉल करें.

endpoint.predict(instances=x_test).predictions

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

एक साथ कई अनुमान

बैच अनुमान के लिए, अपने डेटा को फ़ॉर्मैट करने के अलग-अलग तरीके हैं. आसानी के लिए, हम numpy डेटा को JSON फ़ाइल में डंप कर देंगे और फ़ाइल को Cloud Storage में सेव कर देंगे.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

इसके बाद, मॉडल तय करें. यह एंडपॉइंट तय करने जैसा ही है. हालांकि, आपको ENDPOINT_ID के बजाय MODEL_ID देना होगा.

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

मॉडल आईडी देखने के लिए, कंसोल के मॉडल सेक्शन में जाकर, मॉडल का नाम और वर्शन चुनें. इसके बाद, वर्शन की जानकारी चुनें

model_id

आखिर में, एक साथ कई इनपुट के लिए अनुमान लगाने वाली जॉब को कॉल करने के लिए SDK टूल का इस्तेमाल करें. इसके लिए, उस Cloud Storage पाथ को पास करें जहां आपने json फ़ाइल सेव की है. साथ ही, अनुमान के नतीजों को सेव करने के लिए Cloud Storage की कोई जगह दें.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

कंसोल के 'बैच में अनुमान' सेक्शन में जाकर, अनुमान लगाने की प्रोसेस की प्रोग्रेस देखी जा सकती है. ध्यान दें कि किसी एक इमेज के लिए बैच अनुमान लगाने का काम करना काम नहीं करता.

batch_pred

आगे क्या करना है

इस उदाहरण में, हमने अनुमान लगाने से पहले, टेस्ट इमेज को NumPy में बदल दिया है. ज़्यादा असली इस्तेमाल के उदाहरणों के लिए, शायद आपको खुद ही इमेज भेजनी होगी और उसे पहले NumPy में लोड नहीं करना होगा. ऐसा करने के लिए, आपको इमेज के बाइट को डिकोड करने के लिए, TensorFlow के सर्विंग फ़ंक्शन में बदलाव करना होगा. इसके लिए थोड़ा ज़्यादा काम करना पड़ता है, लेकिन बड़ी इमेज और ऐप्लिकेशन बनाने के लिए यह तरीका ज़्यादा असरदार होगा. इस नोटबुक में इसका एक उदाहरण देखा जा सकता है.

🎉 बधाई हो! 🎉

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

  • Vertex AI Model Registry में मॉडल अपलोड करना
  • एक साथ कई अनुमान और ऑनलाइन अनुमान पाना

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

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

अगर आपको मॉडल का इस्तेमाल नहीं करना है, तो आपको उन्हें एंडपॉइंट से अनडिप्लॉय करना होगा. एंडपॉइंट को पूरी तरह से भी मिटाया जा सकता है. ज़रूरत पड़ने पर, किसी भी समय किसी एंडपॉइंट पर मॉडल को फिर से डिप्लॉय किया जा सकता है.

undeploy_model

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

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

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

स्टोरेज मिटाना