1. ওভারভিউ
এই ল্যাবে, আপনি অনলাইন ভবিষ্যদ্বাণীর জন্য একই VM-এ একাধিক মডেল হোস্ট করতে Vertex AI- তে সহ-হোস্টিং মডেল বৈশিষ্ট্যটি ব্যবহার করবেন।
আপনি কি শিখুন
আপনি কিভাবে শিখবেন:
- একটি
DeploymentResourcePool
তৈরি করুন - একটি
DeploymentResourcePool
মধ্যে মডেল স্থাপন
Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $2 ।
2. ভার্টেক্স এআই-এর ভূমিকা
এই ল্যাবটি Google ক্লাউডে উপলব্ধ নতুন AI পণ্য অফার ব্যবহার করে। Vertex AI Google ক্লাউড জুড়ে ML অফারগুলিকে একটি নিরবচ্ছিন্ন বিকাশের অভিজ্ঞতায় সংহত করে৷ পূর্বে, অটোএমএল এবং কাস্টম মডেলগুলির সাথে প্রশিক্ষিত মডেলগুলি পৃথক পরিষেবার মাধ্যমে অ্যাক্সেসযোগ্য ছিল। নতুন অফারটি অন্যান্য নতুন পণ্যের সাথে একটি একক API-এ উভয়কে একত্রিত করে। আপনি বিদ্যমান প্রকল্পগুলিকে Vertex AI-তে স্থানান্তর করতে পারেন। আপনার কোন প্রতিক্রিয়া থাকলে, অনুগ্রহ করে সমর্থন পৃষ্ঠাটি দেখুন।
Vertex AI এন্ড-টু-এন্ড ML ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য অন্তর্ভুক্ত করে। এই ল্যাবটি নীচে হাইলাইট করা পণ্যগুলিতে ফোকাস করবে: পূর্বাভাস এবং ওয়ার্কবেঞ্চ৷
3. কেস ওভারভিউ ব্যবহার করুন
Vertex AI পূর্বাভাস পরিষেবাতে মডেলগুলি স্থাপন করার সময়, প্রতিটি মডেল ডিফল্টভাবে তার নিজস্ব VM-এ স্থাপন করা হয়। হোস্টিংকে আরও সাশ্রয়ী করতে আপনি একই VM-এ একাধিক মডেল হোস্ট করতে পারেন, যার ফলে মেমরি এবং কম্পিউটেশনাল সংস্থানগুলির আরও ভাল ব্যবহার হয়। আপনি একই VM-এ মোতায়েন করার জন্য বেছে নেওয়া মডেলের সংখ্যা মডেলের আকার এবং ট্র্যাফিক প্যাটার্নের উপর নির্ভর করবে, তবে এই বৈশিষ্ট্যটি বিশেষভাবে এমন পরিস্থিতিতে উপযোগী যেখানে আপনার কাছে বিরল ট্র্যাফিক সহ অনেকগুলি স্থাপন করা মডেল রয়েছে।
কো-হোস্টিং মডেল সাপোর্ট ডিপ্লোয়মেন্ট রিসোর্স পুলের ধারণা প্রবর্তন করে, যা ভিএম-এর মধ্যে রিসোর্স শেয়ার করার জন্য মডেলকে একত্রিত করে। মডেলরা একটি VM শেয়ার করতে পারে যদি তারা একটি এন্ডপয়েন্ট শেয়ার করে এবং এছাড়াও যদি সেগুলি বিভিন্ন এন্ডপয়েন্টে মোতায়েন করা হয়। বর্তমানে, একই রিসোর্স পুলের মডেলগুলিতে ভার্টেক্স প্রেডিকশন প্রি-বিল্ট কন্টেইনারগুলির ফ্রেমওয়ার্ক সংস্করণ সহ একই ধারক চিত্র থাকতে হবে। উপরন্তু, Tensorflow মডেল ফ্রেমওয়ার্ক সহ শুধুমাত্র Vertex Prediction prebuilt কন্টেইনার এই রিলিজে সমর্থিত, অন্যান্য মডেল ফ্রেমওয়ার্ক এবং কাস্টম কন্টেনার এখনও সমর্থিত নয়।
4. আপনার পরিবেশ সেট আপ করুন
এই কোডল্যাব চালানোর জন্য আপনার একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে যাতে বিলিং সক্ষম থাকে৷ একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।
ধাপ 1: Compute Engine API সক্ষম করুন
কম্পিউট ইঞ্জিনে নেভিগেট করুন এবং সক্ষম নির্বাচন করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।
ধাপ 2: Vertex AI API সক্ষম করুন
আপনার ক্লাউড কনসোলের Vertex AI বিভাগে নেভিগেট করুন এবং Vertex AI API সক্ষম করুন ক্লিক করুন।
ধাপ 3: একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন
আপনার ক্লাউড কনসোলের ভার্টেক্স এআই বিভাগ থেকে, ওয়ার্কবেঞ্চে ক্লিক করুন:
নোটবুক API সক্রিয় করুন যদি এটি ইতিমধ্যে না থাকে।
একবার সক্রিয় হলে, ম্যানেজড নোটবুক ক্লিক করুন:
তারপর নতুন নোটবুক নির্বাচন করুন।
আপনার নোটবুকে একটি নাম দিন এবং অনুমতির অধীনে পরিষেবা অ্যাকাউন্ট নির্বাচন করুন৷
উন্নত সেটিংস নির্বাচন করুন।
নিরাপত্তার অধীনে "টার্মিনাল সক্ষম করুন" নির্বাচন করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।
আপনি অন্যান্য উন্নত সেটিংসের মতোই ছেড়ে যেতে পারেন।
পরবর্তী, তৈরি করুন ক্লিক করুন। দৃষ্টান্তের ব্যবস্থা করতে কয়েক মিনিট সময় লাগবে।
একবার ইন্সট্যান্স তৈরি হয়ে গেলে, OPEN JUPYTERLAB নির্বাচন করুন।
5. ট্রেন মডেল
আমরা সহ-হোস্টিং বৈশিষ্ট্যটি চেষ্টা করার আগে, আমাদের প্রথমে একটি মডেলকে প্রশিক্ষণ দিতে হবে এবং সংরক্ষিত মডেলের শিল্পকর্মগুলিকে একটি ক্লাউড স্টোরেজ বালতিতে সংরক্ষণ করতে হবে৷ প্রশিক্ষণের কাজ শুরু করতে আমরা ওয়ার্কবেঞ্চ নোটবুক নির্বাহক ব্যবহার করব।
ধাপ 1: একটি ক্লাউড স্টোরেজ বালতি তৈরি করুন
যদি আপনার প্রজেক্টে একটি বিদ্যমান বালতি থাকে যা আপনি ব্যবহার করতে চান, আপনি এই ধাপটি এড়িয়ে যেতে পারেন। অন্যথায়, লঞ্চার থেকে একটি নতুন টার্মিনাল সেশন খুলুন।
টার্মিনাল থেকে, আপনার প্রকল্পের জন্য একটি env ভেরিয়েবল সংজ্ঞায়িত করতে নিম্নলিখিতটি চালান, আপনার প্রকল্পের আইডি দিয়ে your-cloud-project
প্রতিস্থাপন নিশ্চিত করুন:
PROJECT_ID='your-cloud-project'
পরবর্তী, আপনার প্রকল্পে একটি নতুন বালতি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান।
BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET
ধাপ 2: নোটবুক এক্সিকিউশন চালু করুন
আপনার ওয়ার্কবেঞ্চ ইনস্ট্যান্সের লঞ্চার থেকে, একটি নতুন টেনসরফ্লো 2 নোটবুক খুলুন।
নিচের কোডটি IMDB মুভি রিভিউ ডেটাসেটে একটি বাইনারি সেন্টিমেন্ট ক্লাসিফায়ার (ইতিবাচক বা নেতিবাচক) প্রশিক্ষণ দেয়। কোডটি আপনার নোটবুকে আটকান।
নিশ্চিত করুন যে আপনি {YOUR_BUCKET}
কে আগের ধাপে তৈরি করা বালতি দিয়ে প্রতিস্থাপন করেছেন (বা আপনার প্রজেক্টের অন্য একটি বালতি) এখানেই আমরা সংরক্ষিত মডেলের আর্টিফ্যাক্টগুলি সঞ্চয় করব, যা আমরা পরবর্তীতে Vertex AI মডেল রেজিস্ট্রিতে মডেল আপলোড করার সময় প্রয়োজন হবে৷
import numpy as np
import tensorflow_datasets as tfds
import tensorflow as tf
# REPLACE WITH YOUR BUCKET!
OUTPUT_PATH='gs://{YOUR_BUCKET}/model_output'
BUFFER_SIZE = 10000
BATCH_SIZE = 64
VOCAB_SIZE = 1000
# Load data
dataset, info = tfds.load('imdb_reviews', with_info=True,
as_supervised=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
train_dataset = train_dataset.shuffle(BUFFER_SIZE).batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)
test_dataset = test_dataset.batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)
# Create text encoder
encoder = tf.keras.layers.TextVectorization(
max_tokens=VOCAB_SIZE)
encoder.adapt(train_dataset.map(lambda text, label: text))
# Create model
model = tf.keras.Sequential([
encoder,
tf.keras.layers.Embedding(
input_dim=len(encoder.get_vocabulary()),
output_dim=64,
# Use masking to handle the variable sequence lengths
mask_zero=True),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1)
])
# Compile model
model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
optimizer=tf.keras.optimizers.Adam(1e-4),
metrics=['accuracy'])
# Fit model
history = model.fit(train_dataset, epochs=10,
validation_data=test_dataset,
validation_steps=30)
# Save model
model.save(OUTPUT_PATH)
এর পরে, এক্সিকিউট বোতামটি নির্বাচন করুন।
তারপর নিচের মত করে আপনার এক্সিকিউশন কনফিগার করুন এবং SUBMIT এ ক্লিক করুন
কনসোলের এক্সিকিউশন ট্যাব থেকে, আপনি আপনার প্রশিক্ষণ কাজের অবস্থা ট্র্যাক করতে পারেন।
6. মডেল স্থাপন
ধাপ 1: মডেল আপলোড করুন
এক্সিকিউশন সম্পন্ন হলে, মডেল আপলোড করতে ওয়ার্কবেঞ্চ নোটবুকে ফিরে যান। একটি নতুন TensorFlow নোটবুক তৈরি করুন।
প্রথমে, Vertex AI Python SDK আমদানি করুন
from google.cloud import aiplatform
তারপরে ট্রেনিং কোডে আপনার নির্দিষ্ট করা বালতি দিয়ে {YOUR_BUCKET}
প্রতিস্থাপন করে মডেলটি আপলোড করুন।
# replace {YOUR_BUCKET}
model_1 = aiplatform.Model.upload(display_name='text-model-1',
artifact_uri='gs://{YOUR_BUCKET}/model_output',
serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')
প্রদর্শনের উদ্দেশ্যে, আমরা এই মডেলটিকে দুবার আপলোড করব, Vertex AI-তে দুটি ভিন্ন মডেলের সংস্থান তৈরি করব। এটি যাতে আমরা একটি স্থাপনার রিসোর্স পুলের মধ্যে একটি একক শেষ পয়েন্টে একাধিক মডেল স্থাপনের পরীক্ষা করতে পারি। একটি বাস্তব পরিস্থিতিতে, একই সংরক্ষিত আর্টিফ্যাক্টগুলি থেকে মডেল তৈরি করার পরিবর্তে আপনার কাছে দুটি ভিন্ন মডেল থাকবে, কিন্তু এটি একটি শর্টকাট তাই আমাদের আর একটি প্রশিক্ষণ কার্যকর করতে হবে না৷ উপরন্তু, আপনি একই স্থাপনার রিসোর্স পুলের মধ্যে দুটি মডেলকে বিভিন্ন প্রান্তে স্থাপন করতেও বেছে নিতে পারেন।
# replace {YOUR_BUCKET}
model_2 = aiplatform.Model.upload(display_name='text-model-2',
artifact_uri='gs://{YOUR_BUCKET}/model_output',
serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')
Vertex AI মডেল রেজিস্ট্রিতে, আপনার এখন উভয় মডেলই দেখতে হবে। মোতায়েনের স্থিতি ফাঁকা কারণ আমরা এখনও মডেলগুলি স্থাপন করিনি৷
ধাপ 2: একটি শেষ পয়েন্ট তৈরি করুন
একটি শেষ পয়েন্ট তৈরি করুন। মনে রাখবেন যে এটি একটি মডেল মোতায়েনের থেকে একটি এন্ডপয়েন্টে ভিন্ন।
endpoint = aiplatform.Endpoint.create('cohost-endpoint')
যখন এন্ডপয়েন্ট তৈরি হয়, আপনি এটি কনসোলে দেখতে পাবেন।
ধাপ 3: DeploymentResourcePool তৈরি করুন
আপনি নিম্নলিখিত কমান্ড দিয়ে DeploymentResourcePool তৈরি করতে পারেন। আপনার প্রকল্প আইডি দিয়ে {YOUR_PROJECT}
প্রতিস্থাপন করতে ভুলবেন না।
# replace {YOUR_PROJECT}
PROJECT_ID={YOUR_PROJECT}
REGION="us-central1"
VERTEX_API_URL=REGION + "-aiplatform.googleapis.com"
VERTEX_PREDICTION_API_URL=REGION + "-prediction-aiplatform.googleapis.com"
MULTI_MODEL_API_VERSION="v1beta1"
# Give the pool a name
DEPLOYMENT_RESOURCE_POOL_ID="my-resource-pool"
import json
import pprint
pp = pprint.PrettyPrinter(indent=4)
CREATE_RP_PAYLOAD = {
"deployment_resource_pool":{
"dedicated_resources":{
"machine_spec":{
"machine_type":"n1-standard-4"
},
"min_replica_count":1,
"max_replica_count":2
}
},
"deployment_resource_pool_id":DEPLOYMENT_RESOURCE_POOL_ID
}
CREATE_RP_REQUEST=json.dumps(CREATE_RP_PAYLOAD)
pp.pprint("CREATE_RP_REQUEST: " + CREATE_RP_REQUEST)
!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://{VERTEX_API_URL}/{MULTI_MODEL_API_VERSION}/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools \
-d '{CREATE_RP_REQUEST}'
দৌড়ে পুল দেখতে পারেন
!curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://{VERTEX_API_URL}/{MULTI_MODEL_API_VERSION}/projects/{PROJECT_ID}/locations/{REGION}/deploymentResourcePools/{DEPLOYMENT_RESOURCE_POOL_ID}
ধাপ 4: মডেলগুলিকে শেষ পয়েন্টে স্থাপন করুন
এখন যেহেতু রিসোর্স পুল তৈরি করা হয়েছে, আমরা রিসোর্স পুলের মধ্যে মডেলগুলি স্থাপন করতে পারি।
প্রথমে, আমরা model_1
স্থাপন করব। MODEL_1_ID
এবং ENDPOINT_ID
সংশ্লিষ্ট আইডি দিয়ে প্রতিস্থাপন করতে ভুলবেন না।
MODEL_1_ID="{MODEL_1_ID}"
ENDPOINT_ID="{ENDPOINT_ID}"
নিম্নলিখিত কমান্ডটি model_1
রিসোর্স পুলের মধ্যে শেষ পয়েন্টে স্থাপন করবে।
MODEL_NAME = "projects/{project_id}/locations/{region}/models/{model_id}".format(project_id=PROJECT_ID, region=REGION, model_id=MODEL_1_ID)
SHARED_RESOURCE = "projects/{project_id}/locations/{region}/deploymentResourcePools/{deployment_resource_pool_id}".format(project_id=PROJECT_ID, region=REGION, deployment_resource_pool_id=DEPLOYMENT_RESOURCE_POOL_ID)
DEPLOY_MODEL_PAYLOAD = {
"deployedModel": {
"model": MODEL_NAME,
"shared_resources": SHARED_RESOURCE
},
"trafficSplit": {
"0": 100
}
}
DEPLOY_MODEL_REQUEST=json.dumps(DEPLOY_MODEL_PAYLOAD)
pp.pprint("DEPLOY_MODEL_REQUEST: " + DEPLOY_MODEL_REQUEST)
!curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://{VERTEX_API_URL}/{MULTI_MODEL_API_VERSION}/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:deployModel \
-d '{DEPLOY_MODEL_REQUEST}'
এটি কয়েক মিনিট সময় নেবে, কিন্তু এটি হয়ে গেলে আপনি কনসোলের শেষ পয়েন্টে মোতায়েন করা মডেলটি দেখতে পাবেন।
পরবর্তী, আমরা একই স্থাপনার পুলের মধ্যে model_2
স্থাপন করতে পারি। আমরা এটিকে model_1
হিসাবে একই শেষ পয়েন্টে স্থাপন করব। যাইহোক, আপনি একই রিসোর্স পুলের মধ্যে একটি ভিন্ন এন্ডপয়েন্টে model_2
স্থাপন করতেও বেছে নিতে পারেন।
model_2
এর জন্য ID সহ MODEL_ID
আপডেট করুন। আবার, আপনি model_2.name
চালিয়ে এই আইডি পেতে পারেন
MODEL_2_ID="{MODEL_2_ID}"
তারপর model_2
স্থাপন করুন। যেহেতু আমরা ইতিমধ্যে model_1
এন্ডপয়েন্টে স্থাপন করেছি, তাই আমাদের trafficSplit
আপডেট করতে হবে যাতে ট্রাফিক দুটি মডেলের মধ্যে বিভক্ত হয়। আমরা যদি একই রিসোর্স পুলের মধ্যে একটি ভিন্ন এন্ডপয়েন্টে model_2
স্থাপন করতে পছন্দ করি তাহলে আমাদের trafficSplit
আপডেট করতে হবে না ।
ট্রাফিক বিভাজন আপডেট করতে, আপনাকে model_1
এর জন্য DeployedModel ID সংজ্ঞায়িত করতে হবে। নোট করুন যে এটি মডেল আইডি থেকে আলাদা।
DEPLOYED_MODEL_1_ID = {DEPLOYED_MODEL_1_ID}
তারপরে দ্বিতীয় মডেলটি স্থাপন করতে নিম্নলিখিতটি চালান।
MODEL_NAME = "projects/{project_id}/locations/{region}/models/{model_id}".format(project_id=PROJECT_ID, region=REGION, model_id=MODEL_2_ID)
SHARED_RESOURCE = "projects/{project_id}/locations/{region}/deploymentResourcePools/{deployment_resource_pool_id}".format(project_id=PROJECT_ID, region=REGION, deployment_resource_pool_id=DEPLOYMENT_RESOURCE_POOL_ID)
#`trafficSplit` is a map from a DeployedModel's ID to the percentage of this Endpoint's traffic that should be forwarded to that DeployedModel.
# The traffic percentage values for an endpoint must add up to 100.
# The key for the model being deployed is "0".
DEPLOY_MODEL_PAYLOAD = {
"deployedModel": {
"model": MODEL_NAME,
"shared_resources": SHARED_RESOURCE
},
"trafficSplit": {
"0": 50,
DEPLOYED_MODEL_1_ID: 50
}
}
DEPLOY_MODEL_REQUEST=json.dumps(DEPLOY_MODEL_PAYLOAD)
pp.pprint("DEPLOY_MODEL_REQUEST: " + DEPLOY_MODEL_REQUEST)
!curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://{VERTEX_API_URL}/{MULTI_MODEL_API_VERSION}/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:deployModel \
-d '{DEPLOY_MODEL_REQUEST}'
আবার, এই উদাহরণে দুটি মডেল একই এন্ডপয়েন্টে স্থাপন করা হয়েছিল, কিন্তু আপনি একই রিসোর্স পুলে মডেলগুলিকে সহ-হোস্ট করতে পারেন যা বিভিন্ন প্রান্তে স্থাপন করা হয়। সেক্ষেত্রে আপনাকে ট্রাফিক বিভাজন নিয়ে চিন্তা করতে হবে না।
দ্বিতীয় মডেলটি স্থাপন করার পরে, আপনি তাদের উভয়কেই কনসোলে দেখতে পাবেন।
ধাপ 5: ভবিষ্যদ্বাণী পান
চূড়ান্ত পদক্ষেপ হল শেষ বিন্দু পরীক্ষা করা এবং পূর্বাভাস পাওয়া।
প্রথমত, আমাদের পরীক্ষার বাক্য সংজ্ঞায়িত করুন।
x_test=['The movie was cool. The animation and the graphics were out of this world. I would recommend this movie.']
তারপরে, শেষ পয়েন্টে ভবিষ্যদ্বাণী করুন যা শেষ পয়েন্টে স্থাপন করা মডেলগুলির একটি থেকে একটি ভবিষ্যদ্বাণী ফিরিয়ে দেবে।
endpoint.predict(instances=x_test)
🎉 অভিনন্দন! 🎉
আপনি শিখেছেন কিভাবে Vertex AI ব্যবহার করতে হয়:
- অনলাইন ভবিষ্যদ্বাণীর জন্য একই VM-এ সহ-হোস্ট মডেল
ভার্টেক্সের বিভিন্ন অংশ সম্পর্কে আরও জানতে, ডকুমেন্টেশন দেখুন।
7. পরিষ্কার করা
আপনি যদি সেগুলি ব্যবহার করার পরিকল্পনা না করেন তবে আপনি শেষপয়েন্ট থেকে মডেলগুলি আনডিপ্লয় করতে চাইবেন৷ এছাড়াও আপনি শেষ পয়েন্ট সম্পূর্ণরূপে মুছে ফেলতে পারেন। আপনার প্রয়োজন হলে আপনি সর্বদা একটি মডেলকে শেষ পয়েন্টে পুনরায় স্থাপন করতে পারেন।
ওয়ার্কবেঞ্চ 180 নিষ্ক্রিয় মিনিটের পরে স্বয়ংক্রিয়ভাবে নোটবুকের সময় শেষ হয়ে যায়, তাই আপনাকে দৃষ্টান্তটি বন্ধ করার বিষয়ে চিন্তা করতে হবে না। আপনি যদি দৃষ্টান্তটি ম্যানুয়ালি বন্ধ করতে চান, তাহলে কনসোলের Vertex AI Workbench বিভাগে স্টপ বোতামে ক্লিক করুন। আপনি যদি নোটবুকটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে মুছুন বোতামটি ক্লিক করুন।
আপনার ক্লাউড কনসোলে নেভিগেশন মেনু ব্যবহার করে স্টোরেজ বাকেট মুছে ফেলতে, স্টোরেজ ব্রাউজ করুন, আপনার বালতি নির্বাচন করুন এবং মুছুন ক্লিক করুন: