Vertex AI: পূর্বাভাসের জন্য ডেটা প্রিপ্রসেস এবং পোস্টপ্রসেস করতে Sklearn-এর সাথে কাস্টম ভবিষ্যদ্বাণী রুটিন ব্যবহার করুন

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি শিখবেন কীভাবে Vertex AI-তে কাস্টম প্রেডিকশন রুটিন ব্যবহার করে নিজস্ব প্রিপ্রসেসিং এবং পোস্টপ্রসেসিং লজিক লিখতে হয়। যদিও এই স্যাম্পলটিতে Scikit-learn ব্যবহার করা হয়েছে, কাস্টম প্রেডিকশন রুটিনগুলো XGBoost, PyTorch, এবং TensorFlow-এর মতো অন্যান্য পাইথন এমএল ফ্রেমওয়ার্কের সাথেও কাজ করতে পারে।

আপনি যা শিখবেন

আপনি শিখবেন কীভাবে:

  • কাস্টম প্রেডিকশন রুটিন ব্যবহার করে কাস্টম প্রেডিকশন লজিক লিখুন
  • কাস্টম পরিবেশন পাত্র এবং মডেলটি স্থানীয়ভাবে পরীক্ষা করুন।
  • Vertex AI Predictions-এ কাস্টম সার্ভিং কন্টেইনারটি পরীক্ষা করুন

গুগল ক্লাউডে এই ল্যাবটি চালানোর মোট খরচ প্রায় মার্কিন ডলার।

২. ভার্টেক্স এআই-এর পরিচিতি

এই ল্যাবটি গুগল ক্লাউডে উপলব্ধ সর্বাধুনিক এআই প্রোডাক্টটি ব্যবহার করে। ভার্টেক্স এআই গুগল ক্লাউডের এমএল অফারিংগুলোকে একটি নির্বিঘ্ন ডেভেলপমেন্ট অভিজ্ঞতায় একীভূত করে। পূর্বে, অটোএমএল (AutoML) দিয়ে প্রশিক্ষিত মডেল এবং কাস্টম মডেলগুলো আলাদা সার্ভিসের মাধ্যমে অ্যাক্সেস করা যেত। নতুন অফারিংটি অন্যান্য নতুন প্রোডাক্টের সাথে উভয়কে একটি একক এপিআই-তে একত্রিত করেছে। আপনি আপনার বিদ্যমান প্রোজেক্টগুলোও ভার্টেক্স এআই-তে মাইগ্রেট করতে পারেন।

ভার্টেক্স এআই-এর এন্ড-টু-এন্ড এমএল ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য রয়েছে। এই ল্যাবটি প্রেডিকশনস এবং ওয়ার্কবেঞ্চ-এর উপর আলোকপাত করবে।

ভার্টেক্স পণ্যের সংক্ষিপ্ত বিবরণ

৩. ব্যবহারের ক্ষেত্রের সংক্ষিপ্ত বিবরণ

ব্যবহারের ক্ষেত্র

এই ল্যাবে, আপনি হীরার কাট, স্বচ্ছতা এবং আকারের মতো বৈশিষ্ট্যের উপর ভিত্তি করে এর মূল্য পূর্বাভাস দেওয়ার জন্য একটি র‍্যান্ডম ফরেস্ট রিগ্রেশন মডেল তৈরি করবেন।

ডেটা পরিবেশনের সময় তা মডেলের প্রত্যাশিত ফরম্যাটে আছে কিনা, তা যাচাই করার জন্য আপনি কাস্টম প্রিপ্রসেসিং লজিক লিখবেন। এছাড়াও, প্রেডিকশনগুলোকে রাউন্ড করতে এবং সেগুলোকে স্ট্রিং-এ রূপান্তর করার জন্য আপনি কাস্টম পোস্টপ্রসেসিং লজিক লিখবেন। এই লজিকটি লেখার জন্য, আপনি কাস্টম প্রেডিকশন রুটিন ব্যবহার করবেন।

কাস্টম পূর্বাভাস রুটিনের পরিচিতি

ভার্টেক্স এআই-এর আগে থেকে তৈরি কন্টেইনারগুলো মেশিন লার্নিং ফ্রেমওয়ার্কের প্রেডিকশন অপারেশন সম্পাদন করার মাধ্যমে প্রেডিকশনের অনুরোধগুলো সামাল দেয়। কাস্টম প্রেডিকশন রুটিন আসার আগে, যদি আপনি প্রেডিকশন করার পূর্বে ইনপুট প্রিপ্রসেস করতে চাইতেন, অথবা ফলাফল ফেরত দেওয়ার পূর্বে মডেলের প্রেডিকশন পোস্টপ্রসেস করতে চাইতেন, তাহলে আপনাকে একটি কাস্টম কন্টেইনার তৈরি করতে হতো।

একটি কাস্টম সার্ভিং কন্টেইনার তৈরি করার জন্য এমন একটি HTTP সার্ভার লিখতে হয়, যা প্রশিক্ষিত মডেলটিকে আবৃত করে, HTTP অনুরোধগুলোকে মডেলের ইনপুটে এবং মডেলের আউটপুটগুলোকে প্রতিক্রিয়াতে রূপান্তরিত করে।

কাস্টম প্রেডিকশন রুটিনের মাধ্যমে ভার্টেক্স এআই আপনার জন্য সার্ভিং-সম্পর্কিত উপাদানগুলো সরবরাহ করে, যাতে আপনি আপনার মডেল এবং ডেটা ট্রান্সফরমেশনের উপর মনোযোগ দিতে পারেন।

৪. আপনার পরিবেশ প্রস্তুত করুন

এই কোডল্যাবটি চালানোর জন্য আপনার বিলিং চালু করা একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট প্রয়োজন হবে। প্রজেক্ট তৈরি করতে, এখানের নির্দেশাবলী অনুসরণ করুন।

ধাপ ১: কম্পিউট ইঞ্জিন এপিআই সক্রিয় করুন

Compute Engine- এ যান এবং যদি আগে থেকে সক্রিয় করা না থাকে তবে 'Enable' নির্বাচন করুন। আপনার নোটবুক ইনস্ট্যান্স তৈরি করার জন্য এটি প্রয়োজন হবে।

ধাপ ২: আর্টিফ্যাক্ট রেজিস্ট্রি এপিআই সক্রিয় করুন

আর্টিফ্যাক্ট রেজিস্ট্রি- তে যান এবং যদি আগে থেকে সক্রিয় করা না থাকে, তবে সেটি নির্বাচন করুন। একটি কাস্টম সার্ভিং কন্টেইনার তৈরি করতে আপনি এটি ব্যবহার করবেন।

ধাপ ৩: Vertex AI API সক্রিয় করুন

আপনার ক্লাউড কনসোলের Vertex AI বিভাগে যান এবং Enable Vertex AI API-তে ক্লিক করুন।

ভার্টেক্স এআই ড্যাশবোর্ড

ধাপ ৪: একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন

আপনার ক্লাউড কনসোলের Vertex AI সেকশন থেকে Workbench-এ ক্লিক করুন:

ভার্টেক্স এআই মেনু

নোটবুকস এপিআই (Notebooks API) সক্রিয় করুন, যদি আগে থেকে সক্রিয় করা না থাকে।

নোটবুক_এপিআই

একবার সক্রিয় হয়ে গেলে, INSTANCES-এ ক্লিক করুন এবং তারপরে CREATE NEW নির্বাচন করুন।

ডিফল্ট অপশনগুলো গ্রহণ করুন এবং তৈরি করুন-এ ক্লিক করুন।

ইনস্ট্যান্সটি প্রস্তুত হয়ে গেলে, সেটি খোলার জন্য OPEN JUPYTERLAB-এ ক্লিক করুন।

৫. প্রশিক্ষণ কোড লিখুন

ধাপ ১: একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন

আপনি মডেল এবং প্রিপ্রসেসিং আর্টিফ্যাক্টগুলো একটি ক্লাউড স্টোরেজ বাকেটে সংরক্ষণ করবেন। আপনার প্রোজেক্টে যদি আগে থেকেই ব্যবহারের জন্য কোনো বাকেট থাকে, তবে আপনি এই ধাপটি বাদ দিতে পারেন।

লঞ্চার থেকে একটি নতুন টার্মিনাল সেশন খুলুন।

ওপেন_টার্মিনাল

আপনার টার্মিনাল থেকে, আপনার প্রোজেক্টের জন্য একটি এনভ ভ্যারিয়েবল নির্ধারণ করতে নিম্নলিখিত কমান্ডটি চালান, এবং অবশ্যই your-cloud-project এর জায়গায় আপনার প্রোজেক্টের আইডি বসাবেন:

PROJECT_ID='your-cloud-project'

এরপরে, আপনার প্রোজেক্টে একটি নতুন বাকেট তৈরি করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।

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

ধাপ ২: মডেলকে প্রশিক্ষণ দিন

টার্মিনাল থেকে cpr-codelab নামে একটি নতুন ডিরেক্টরি তৈরি করুন এবং তার ভেতরে প্রবেশ করুন।

mkdir cpr-codelab
cd cpr-codelab

ফাইল ব্রাউজারে নতুন cpr-codelab ডিরেক্টরিতে যান এবং তারপরে লঞ্চারটি ব্যবহার করে task.ipynb নামে একটি নতুন পাইথন ৩ নোটবুক তৈরি করুন।

ফাইল_ব্রাউজার

আপনার cpr-codelab ডিরেক্টরিটি এখন দেখতে এইরকম হবে:

+ cpr-codelab/
    + task.ipynb

নোটবুকে নিম্নলিখিত কোডটি পেস্ট করুন।

প্রথমে, একটি requirements.txt ফাইল তৈরি করুন।

%%writefile requirements.txt
fastapi
uvicorn==0.17.6
joblib~=1.0
numpy~=1.20
scikit-learn>=1.2.2
pandas
google-cloud-storage>=1.26.0,<2.0.0dev
google-cloud-aiplatform[prediction]>=1.16.0

আপনি যে মডেলটি ডেপ্লয় করবেন, সেটিতে আপনার নোটবুক এনভায়রনমেন্টের চেয়ে ভিন্ন কিছু ডিপেন্ডেন্সি আগে থেকে ইনস্টল করা থাকবে। এই কারণে, আপনি requirements.txt ফাইলে মডেলটির সমস্ত ডিপেন্ডেন্সির একটি তালিকা তৈরি করবেন এবং তারপর pip ব্যবহার করে নোটবুকে হুবহু একই ডিপেন্ডেন্সিগুলো ইনস্টল করবেন। পরবর্তীতে, Vertex AI-তে ডেপ্লয় করার আগে এনভায়রনমেন্টগুলো মিলে যাচ্ছে কিনা তা পুনরায় যাচাই করার জন্য আপনি মডেলটি স্থানীয়ভাবে পরীক্ষা করবেন।

নোটবুকে Pip ব্যবহার করে ডিপেন্ডেন্সিগুলো ইনস্টল করুন।

!pip install -U --user -r requirements.txt

মনে রাখবেন, pip install সম্পন্ন হওয়ার পর আপনাকে কার্নেলটি পুনরায় চালু করতে হবে।

রিস্টার্ট_কার্নেল

এরপরে, সেই ডিরেক্টরিগুলো তৈরি করুন যেখানে আপনি মডেল এবং প্রিপ্রসেসিং আর্টিফ্যাক্টগুলো সংরক্ষণ করবেন।

USER_SRC_DIR = "src_dir"
!mkdir $USER_SRC_DIR
!mkdir model_artifacts

# copy the requirements to the source dir
!cp requirements.txt $USER_SRC_DIR/requirements.txt

আপনার cpr-codelab ডিরেক্টরিটি এখন দেখতে এইরকম হবে:

+ cpr-codelab/
    + model_artifacts/
    + scr_dir/
        + requirements.txt
    + task.ipynb
    + requirements.txt

ডিরেক্টরি কাঠামো তৈরি হয়ে গেলে, এবার মডেলকে প্রশিক্ষণ দেওয়ার পালা!

প্রথমে লাইব্রেরিগুলো ইম্পোর্ট করুন।

import seaborn as sns
import numpy as np
import pandas as pd

from sklearn import preprocessing
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import make_pipeline
from sklearn.compose import make_column_transformer

import joblib
import logging

# set logging to see the docker container logs
logging.basicConfig(level=logging.INFO)

এরপর নিম্নলিখিত ভেরিয়েবলগুলো নির্ধারণ করুন। PROJECT_ID জায়গায় আপনার প্রজেক্ট আইডি এবং BUCKET_NAME জায়গায় আগের ধাপে তৈরি করা বাকেটের নাম বসাতে ভুলবেন না।

REGION = "us-central1"
MODEL_ARTIFACT_DIR = "sklearn-model-artifacts"
REPOSITORY = "diamonds"
IMAGE = "sklearn-image"
MODEL_DISPLAY_NAME = "diamonds-cpr"

# Replace with your project
PROJECT_ID = "{PROJECT_ID}"

# Replace with your bucket
BUCKET_NAME = "gs://{BUCKET_NAME}"

seaborn লাইব্রেরি থেকে ডেটা লোড করুন এবং তারপর দুটি ডেটাফ্রেম তৈরি করুন, একটিতে ফিচারগুলো এবং অন্যটিতে লেবেলগুলো থাকবে।

data = sns.load_dataset('diamonds', cache=True, data_home=None)

label = 'price'

y_train = data['price']
x_train = data.drop(columns=['price'])

চলুন প্রশিক্ষণ ডেটাটি দেখি। আপনি দেখতে পাচ্ছেন যে প্রতিটি সারি একটি হীরার আকৃতিকে প্রতিনিধিত্ব করে।

x_train.head()

এবং লেবেলগুলো, যেগুলো হলো সংশ্লিষ্ট দাম।

y_train.head()

এখন, ক্যাটাগরিক্যাল ফিচারগুলোকে ওয়ান-হট এনকোড করতে এবং নিউমেরিক্যাল ফিচারগুলোকে স্কেল করতে একটি স্কিকিট-লার্ন (sklearn) কলাম ট্রান্সফর্ম সংজ্ঞায়িত করুন।

column_transform = make_column_transformer(
    (preprocessing.OneHotEncoder(), [1,2,3]),
    (preprocessing.StandardScaler(), [0,4,5,6,7,8]))

র‍্যান্ডম ফরেস্ট মডেল সংজ্ঞায়িত করুন

regr = RandomForestRegressor(max_depth=10, random_state=0)

এরপর, একটি sklearn পাইপলাইন তৈরি করুন। এর মানে হলো, এই পাইপলাইনে দেওয়া ডেটা প্রথমে এনকোড/স্কেল করা হবে এবং তারপরে মডেলে পাঠানো হবে।

my_pipeline = make_pipeline(column_transform, regr)

প্রশিক্ষণ ডেটার উপর পাইপলাইনটি ফিট করুন।

my_pipeline.fit(x_train, y_train)

মডেলটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা তা নিশ্চিত করতে চলুন এটি পরীক্ষা করে দেখি। একটি টেস্ট স্যাম্পল পাস করে মডেলটির predict মেথডটি কল করুন।

my_pipeline.predict([[0.23, 'Ideal', 'E', 'SI2', 61.5, 55.0, 3.95, 3.98, 2.43]])

এখন আমরা পাইপলাইনটি model_artifacts ডিরেক্টরিতে সেভ করে ক্লাউড স্টোরেজ বাকেটে কপি করতে পারি।

joblib.dump(my_pipeline, 'model_artifacts/model.joblib')

!gsutil cp model_artifacts/model.joblib {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/

ধাপ ৩: একটি প্রিপ্রসেসিং আর্টিফ্যাক্ট সংরক্ষণ করুন

এরপর আপনি একটি প্রিপ্রসেসিং আর্টিফ্যাক্ট তৈরি করবেন। মডেল সার্ভার চালু হলে এই আর্টিফ্যাক্টটি কাস্টম কন্টেইনারে লোড হবে। আপনার প্রিপ্রসেসিং আর্টিফ্যাক্ট প্রায় যেকোনো ধরনের হতে পারে (যেমন একটি পিকেল ফাইল), কিন্তু এক্ষেত্রে আপনি একটি ডিকশনারি একটি JSON ফাইলে লিখবেন।

clarity_dict={"Flawless": "FL",
              "Internally Flawless": "IF",
              "Very Very Slightly Included": "VVS1",
              "Very Slightly Included": "VS2",
              "Slightly Included": "S12",
              "Included": "I3"}

আমাদের ট্রেনিং ডেটার clarity ফিচারটি সবসময় সংক্ষিপ্ত আকারে ছিল (যেমন "Flawless"-এর পরিবর্তে "FL")। ডেটা সার্ভ করার সময়, আমরা নিশ্চিত করতে চাই যে এই ফিচারের ডেটাও সংক্ষিপ্ত আকারে আছে। এর কারণ হলো, আমাদের মডেল "FL"-কে ওয়ান-হট এনকোড করতে জানলেও "Flawless"-কে পারে না। এই কাস্টম প্রিপ্রসেসিং লজিকটি আপনি পরে লিখবেন। কিন্তু আপাতত, এই লুক-আপ টেবিলটি একটি json ফাইলে সেভ করুন এবং তারপর সেটি ক্লাউড স্টোরেজ বাকেটে রাইট করুন।

import json
with open("model_artifacts/preprocessor.json", "w") as f:
    json.dump(clarity_dict, f)

!gsutil cp model_artifacts/preprocessor.json {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/

আপনার স্থানীয় cpr-codelab ডিরেক্টরিটি এখন দেখতে এইরকম হবে:

+ cpr-codelab/
    + model_artifacts/
        + model.joblib
        + preprocessor.json
    + scr_dir/
        + requirements.txt
    + task.ipynb
    + requirements.txt

৬. সিপিআর মডেল সার্ভার ব্যবহার করে একটি কাস্টম পরিবেশন পাত্র তৈরি করুন।

মডেলটি প্রশিক্ষিত হয়ে গেলে এবং প্রিপ্রসেসিং আর্টিফ্যাক্টটি সংরক্ষণ করা হয়ে গেলে, এখন কাস্টম সার্ভিং কন্টেইনার তৈরি করার সময় এসেছে। সাধারণত একটি সার্ভিং কন্টেইনার তৈরি করতে মডেল সার্ভার কোড লিখতে হয়। তবে, কাস্টম প্রেডিকশন রুটিনের ক্ষেত্রে, ভার্টেক্স এআই প্রেডিকশনস আপনার জন্য একটি মডেল সার্ভার তৈরি করে দেয় এবং একটি কাস্টম কন্টেইনার ইমেজ বিল্ড করে দেয়।

একটি কাস্টম সার্ভিং কন্টেইনারে নিম্নলিখিত ৩টি কোড রয়েছে:

  1. মডেল সার্ভার (এটি SDK দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হবে এবং scr_dir/ ফোল্ডারে সংরক্ষিত হবে)
    • মডেলটি হোস্ট করে এমন HTTP সার্ভার
    • রুট/পোর্ট ইত্যাদি সেট আপ করার দায়িত্বে নিয়োজিত।
  2. অনুরোধ হ্যান্ডলার
    • অনুরোধ পরিচালনার ক্ষেত্রে ওয়েবসার্ভার-সম্পর্কিত বিষয়গুলোর জন্য দায়ী, যেমন—অনুরোধের মূল অংশকে ডিসিরিয়ালাইজ করা, প্রতিক্রিয়াকে সিরিয়ালাইজ করা, প্রতিক্রিয়ার হেডার নির্ধারণ করা ইত্যাদি।
    • এই উদাহরণে, আপনি SDK-তে দেওয়া ডিফল্ট হ্যান্ডলার, google.cloud.aiplatform.prediction.handler.PredictionHandler ব্যবহার করবেন।
  3. ভবিষ্যদ্বাণীকারী
    • পূর্বাভাস অনুরোধ প্রক্রিয়াকরণের জন্য এমএল লজিকের দায়িত্বে নিয়োজিত।

আপনার ব্যবহারের প্রয়োজন অনুযায়ী এই প্রতিটি উপাদানকে কাস্টমাইজ করা যেতে পারে। এই উদাহরণে, আপনি শুধু প্রেডিক্টরটি ইমপ্লিমেন্ট করবেন।

একটি প্রেডিকশন অনুরোধ প্রক্রিয়াকরণের জন্য প্রয়োজনীয় এমএল লজিকের দায়িত্বে থাকে প্রেডিক্টর, যেমন কাস্টম প্রিপ্রসেসিং এবং পোস্টপ্রসেসিং। কাস্টম প্রেডিকশন লজিক লেখার জন্য, আপনাকে Vertex AI Predictor ইন্টারফেসের একটি সাবক্লাস তৈরি করতে হবে।

কাস্টম প্রেডিকশন রুটিনের এই রিলিজে পুনঃব্যবহারযোগ্য XGBoost এবং Sklearn প্রেডিক্টর রয়েছে, কিন্তু আপনার যদি অন্য কোনো ফ্রেমওয়ার্ক ব্যবহার করার প্রয়োজন হয়, তবে আপনি বেস প্রেডিক্টরকে সাবক্লাস করে নিজের প্রেডিক্টর তৈরি করে নিতে পারেন।

নিচে আপনি Sklearn প্রেডিক্টরের একটি উদাহরণ দেখতে পারেন। এই কাস্টম মডেল সার্ভারটি তৈরি করার জন্য আপনাকে শুধু এই কোডটুকুই লিখতে হবে।

sklearn_predictor

আপনার নোটবুকে SklearnPredictor কে সাবক্লাস করার জন্য নিচের কোডটি পেস্ট করুন এবং এটিকে src_dir/ ফোল্ডারের একটি পাইথন ফাইলে লিখুন। উল্লেখ্য যে, এই উদাহরণে আমরা শুধুমাত্র load , preprocess , এবং postprocess মেথডগুলো কাস্টমাইজ করছি, predict মেথডটি নয়।

%%writefile $USER_SRC_DIR/predictor.py

import joblib
import numpy as np
import json

from google.cloud import storage
from google.cloud.aiplatform.prediction.sklearn.predictor import SklearnPredictor


class CprPredictor(SklearnPredictor):

    def __init__(self):
        return

    def load(self, artifacts_uri: str) -> None:
        """Loads the sklearn pipeline and preprocessing artifact."""

        super().load(artifacts_uri)

        # open preprocessing artifact
        with open("preprocessor.json", "rb") as f:
            self._preprocessor = json.load(f)


    def preprocess(self, prediction_input: np.ndarray) -> np.ndarray:
        """Performs preprocessing by checking if clarity feature is in abbreviated form."""

        inputs = super().preprocess(prediction_input)

        for sample in inputs:
            if sample[3] not in self._preprocessor.values():
                sample[3] = self._preprocessor[sample[3]]
        return inputs

    def postprocess(self, prediction_results: np.ndarray) -> dict:
        """Performs postprocessing by rounding predictions and converting to str."""

        return {"predictions": [f"${value}" for value in np.round(prediction_results)]}

চলুন এই পদ্ধতিগুলোর প্রত্যেকটি আরও গভীরভাবে খতিয়ে দেখি।

  • load মেথডটি প্রিপ্রসেসিং আর্টিফ্যাক্ট লোড করে, যা এই ক্ষেত্রে একটি ডিকশনারি এবং এটি হীরার স্বচ্ছতার মানগুলোকে তাদের সংক্ষিপ্ত রূপের সাথে ম্যাপ করে।
  • preprocess মেথডটি ওই আর্টিফ্যাক্টটি ব্যবহার করে এটি নিশ্চিত করে যে, সার্ভ করার সময় ক্ল্যারিটি ফিচারটি তার সংক্ষিপ্ত রূপে থাকে। যদি তা না থাকে, তবে এটি সম্পূর্ণ স্ট্রিংটিকে তার সংক্ষিপ্ত রূপে রূপান্তর করে।
  • postprocess মেথডটি পূর্বাভাসিত মানটিকে একটি $ চিহ্নসহ স্ট্রিং হিসেবে ফেরত দেয় এবং মানটিকে রাউন্ড করে।

এরপর, ইমেজটি বিল্ড করার জন্য Vertex AI Python SDK ব্যবহার করুন। কাস্টম প্রেডিকশন রুটিন ব্যবহার করে Dockerfile তৈরি করা হবে এবং আপনার জন্য ইমেজটি বিল্ড হয়ে যাবে।

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

import os

from google.cloud.aiplatform.prediction import LocalModel

from src_dir.predictor import CprPredictor  # Should be path of variable $USER_SRC_DIR

local_model = LocalModel.build_cpr_model(
    USER_SRC_DIR,
    f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
    predictor=CprPredictor,
    requirements_path=os.path.join(USER_SRC_DIR, "requirements.txt"),
)

ভবিষ্যদ্বাণীর জন্য দুটি নমুনা সহ একটি টেস্ট ফাইল লিখুন। ইনস্ট্যান্সগুলোর মধ্যে একটির সংক্ষিপ্ত ক্ল্যারিটি নাম আছে, কিন্তু অন্যটিকে প্রথমে রূপান্তর করতে হবে।

import json

sample = {"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

with open('instances.json', 'w') as fp:
    json.dump(sample, fp)

একটি স্থানীয় মডেল স্থাপন করে কন্টেইনারটি স্থানীয়ভাবে পরীক্ষা করুন।

with local_model.deploy_to_local_endpoint(
    artifact_uri = 'model_artifacts/', # local path to artifacts
) as local_endpoint:
    predict_response = local_endpoint.predict(
        request_file='instances.json',
        headers={"Content-Type": "application/json"},
    )

    health_check_response = local_endpoint.run_health_check()

আপনি এর মাধ্যমে পূর্বাভাসের ফলাফল দেখতে পারেন:

predict_response.content

৭. ভার্টেক্স এআই-তে মডেলটি স্থাপন করুন

এখন যেহেতু আপনি কন্টেইনারটি স্থানীয়ভাবে পরীক্ষা করেছেন, তাই ইমেজটি আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করার এবং মডেলটি ভার্টেক্স এআই মডেল রেজিস্ট্রি-তে আপলোড করার সময় এসেছে।

প্রথমে, আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাক্সেস করার জন্য ডকারকে কনফিগার করুন।

!gcloud artifacts repositories create {REPOSITORY} --repository-format=docker \
--location=us-central1 --description="Docker repository"


!gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet

তারপর, ছবিটি পুশ করুন।

local_model.push_image()

এবং মডেলটি আপলোড করুন।

model = aiplatform.Model.upload(local_model = local_model,
                                display_name=MODEL_DISPLAY_NAME,
                                artifact_uri=f"{BUCKET_NAME}/{MODEL_ARTIFACT_DIR}",)

মডেলটি আপলোড হয়ে গেলে, আপনি এটি কনসোলে দেখতে পাবেন:

মডেল_রেজিস্ট্রি

এরপর, মডেলটি ডেপ্লয় করুন যাতে আপনি এটি অনলাইন প্রেডিকশনের জন্য ব্যবহার করতে পারেন। কাস্টম প্রেডিকশন রুটিনগুলো ব্যাচ প্রেডিকশনের সাথেও কাজ করে, তাই যদি আপনার ব্যবহারের ক্ষেত্রে অনলাইন প্রেডিকশনের প্রয়োজন না হয়, তবে মডেলটি ডেপ্লয় করার দরকার নেই।

endpoint = model.deploy(machine_type="n1-standard-2")

সবশেষে, একটি পূর্বাভাস পাওয়ার মাধ্যমে স্থাপন করা মডেলটি পরীক্ষা করুন।

endpoint.predict(instances=[[0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43]])

🎉 অভিনন্দন! 🎉

আপনি শিখেছেন কীভাবে ভার্টেক্স এআই ব্যবহার করে:

  • কাস্টম প্রেডিকশন রুটিন ব্যবহার করে নিজস্ব প্রিপ্রসেসিং ও পোস্টপ্রসেসিং লজিক লিখুন

Vertex AI-এর বিভিন্ন অংশ সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।

৮. পরিচ্ছন্নতা

আপনি যদি এই ল্যাবে তৈরি করা নোটবুকটি ব্যবহার করা চালিয়ে যেতে চান, তবে ব্যবহার না করার সময় এটি বন্ধ করে রাখার পরামর্শ দেওয়া হচ্ছে। গুগল ক্লাউড কনসোলের ওয়ার্কবেঞ্চ UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপরে স্টপ (Stop) নির্বাচন করুন।

যদি আপনি নোটবুকটি সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে উপরের ডানদিকে থাকা ডিলিট বোতামটিতে ক্লিক করুন।

স্টপ_এনবি

আপনার ডিপ্লয় করা এন্ডপয়েন্টটি ডিলিট করতে, কনসোলের এন্ডপয়েন্টস সেকশনে যান, আপনার তৈরি করা এন্ডপয়েন্টটিতে ক্লিক করুন এবং তারপরে ‘Undeploy model from endpoint ’ সিলেক্ট করুন।

ডিলিট_এন্ডপয়েন্ট

কন্টেইনার ইমেজটি ডিলিট করতে, আর্টিফ্যাক্ট রেজিস্ট্রি-তে যান, আপনার তৈরি করা রিপোজিটরিটি সিলেক্ট করুন এবং ডিলিট সিলেক্ট করুন।

ছবি মুছুন

স্টোরেজ বাকেটটি ডিলিট করতে, আপনার ক্লাউড কনসোলের নেভিগেশন মেনু ব্যবহার করে স্টোরেজ-এ যান, আপনার বাকেটটি সিলেক্ট করুন এবং ডিলিট-এ ক্লিক করুন।

স্টোরেজ মুছে ফেলুন