ভার্টেক্স এআই: পূর্বাভাসের জন্য প্রসেস ডেটা এবং পোস্ট করার জন্য স্কলারনের সাথে কাস্টম ভবিষ্যদ্বাণী রুটিন ব্যবহার করুন

১. ভূমিকা

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

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

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

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

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

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

440e66b5fde4cee7.png

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

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

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

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

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

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

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

আপনি যা তৈরি করবেন

আপনি aiml-vpc নামে একটি VPC নেটওয়ার্ক সেট আপ করবেন, যা একটি ওয়ার্কবেঞ্চ সাবনেট নিয়ে গঠিত। এই সাবনেটটি একটি ব্যবহারকারী-পরিচালিত নোটবুক ডেপ্লয় করতে এবং us-central1-এ ডেপ্লয় করা অনলাইন প্রেডিকশন ও মডেল এন্ডপয়েন্ট অ্যাক্সেস করতে ব্যবহৃত হবে, যা নিচের চিত্র ১-এ দেখানো হয়েছে।

                                                                            Figure1

6ce21c7fdae12b4f.png

৪. টিউটোরিয়াল এপিআই সক্রিয় করুন

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

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

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

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

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

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

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

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

৫. aiml-vpc তৈরি করুন

এই টিউটোরিয়ালটিতে ক্লাউড শেলে gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $variables ব্যবহার করা হয়েছে।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

aiml-vpc তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

ব্যবহারকারী-পরিচালিত নোটবুক সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে ওয়ার্কবেঞ্চ-সাবনেটটি তৈরি করুন।

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

ক্লাউড রাউটার এবং NAT কনফিগারেশন

এই টিউটোরিয়ালে সফটওয়্যার প্যাকেজ ডাউনলোড করার জন্য ক্লাউড ন্যাট (Cloud NAT) ব্যবহার করা হয়েছে, কারণ ব্যবহারকারী-পরিচালিত নোটবুকটির কোনো এক্সটার্নাল আইপি অ্যাড্রেস নেই। ক্লাউড ন্যাট ইগ্রেস ন্যাট (egress NAT) সুবিধা প্রদান করে, যার অর্থ হলো ইন্টারনেট হোস্টগুলোকে ব্যবহারকারী-পরিচালিত নোটবুকের সাথে যোগাযোগ শুরু করার অনুমতি দেওয়া হয় না, যা এটিকে আরও সুরক্ষিত করে তোলে।

ক্লাউড শেলের ভিতরে, us-central1 নামে আঞ্চলিক ক্লাউড রাউটারটি তৈরি করুন।

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

ক্লাউড শেলের ভিতরে, us-central1 নামে আঞ্চলিক ক্লাউড ন্যাট গেটওয়ে তৈরি করুন।

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

৬. ব্যবহারকারী পরিচালিত নোটবুক তৈরি করুন

একটি ব্যবহারকারী পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করুন (নোটবুক)

পরবর্তী অংশে, আপনি একটি ব্যবহারকারী-পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করবেন যা এই টিউটোরিয়ালে ব্যবহৃত Vertex Workbench (নোটবুক)-এর সাথে যুক্ত থাকবে।

এই টিউটোরিয়ালে, সার্ভিস অ্যাকাউন্টের ক্ষেত্রে নিম্নলিখিত নিয়মগুলো প্রয়োগ করা হবে:

ক্লাউড শেলের ভিতরে সার্ভিস অ্যাকাউন্টটি তৈরি করুন।

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে স্টোরেজ অ্যাডমিন রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে 'Vertex AI User' রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিন রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটি তালিকাভুক্ত করুন এবং ব্যবহারকারী-পরিচালিত নোটবুক তৈরি করার সময় যে ইমেল ঠিকানাটি ব্যবহার করা হবে তা নোট করে রাখুন।

gcloud iam service-accounts list

ব্যবহারকারী পরিচালিত নোটবুক তৈরি করুন

পরবর্তী অংশে, পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্ট user-managed-notebook-sa-কে অন্তর্ভুক্ত করে একটি ইউজার-ম্যানেজড নোটবুক তৈরি করুন।

ক্লাউড শেলের ভিতরে প্রাইভেট-ক্লায়েন্ট ইনস্ট্যান্সটি তৈরি করুন।

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --shielded-secure-boot \
      --subnet-region=us-central1 \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

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

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

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

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

84a53a5b528f2507.png

আপনার টার্মিনাল থেকে, আপনার প্রোজেক্টের জন্য একটি এনভ ভ্যারিয়েবল নির্ধারণ করতে নিম্নলিখিত কমান্ডটি চালান, এবং অবশ্যই '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 নামে একটি নতুন পাইথন ৩ নোটবুক তৈরি করুন।

f230930e0b79650c.png

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

+ cpr-codelab/
    + task.ipynb

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

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

%%writefile requirements.txt
fastapi
uvicorn==0.17.6
joblib~=1.1.1
numpy>=1.17.3, <1.24.0
scikit-learn~=1.0.0
pandas
google-cloud-storage>=2.2.1,<3.0.0dev
google-cloud-aiplatform[prediction]>=1.18.2

আপনি যে মডেলটি ডেপ্লয় করবেন, সেটিতে আপনার নোটবুক এনভায়রনমেন্টের চেয়ে ভিন্ন কিছু ডিপেন্ডেন্সি আগে থেকে ইনস্টল করা থাকবে। এই কারণে, আপনি 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(sparse=False), [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"}

আমাদের ট্রেনিং ডেটার ক্ল্যারিটি ফিচারটি সবসময় সংক্ষিপ্ত আকারে ছিল (যেমন "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 সার্ভার
  • রুট/পোর্ট ইত্যাদি সেট আপ করার দায়িত্বে নিয়োজিত।
  1. অনুরোধ হ্যান্ডলার
  • অনুরোধ পরিচালনার ক্ষেত্রে ওয়েবসার্ভার-সম্পর্কিত বিষয়গুলোর জন্য দায়ী, যেমন—অনুরোধের মূল অংশকে ডিসিরিয়ালাইজ করা, প্রতিক্রিয়াকে সিরিয়ালাইজ করা, প্রতিক্রিয়ার হেডার নির্ধারণ করা ইত্যাদি।
  • এই উদাহরণে, আপনি SDK-তে দেওয়া ডিফল্ট হ্যান্ডলার, google.cloud.aiplatform.prediction.handler.PredictionHandler ব্যবহার করবেন।
  1. ভবিষ্যদ্বাণীকারী
  • পূর্বাভাস অনুরোধ প্রক্রিয়াকরণের জন্য এমএল লজিকের দায়িত্বে নিয়োজিত।

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

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

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

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

262df1246b28657e.png

আপনার নোটবুকে 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)]}

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

  • লোড মেথডটি প্রিপ্রসেসিং আর্টিফ্যাক্ট লোড করে, যা এই ক্ষেত্রে একটি ডিকশনারি এবং এটি হীরার স্বচ্ছতার মানগুলোকে তাদের সংক্ষিপ্ত রূপের সাথে ম্যাপ করে।
  • প্রিপ্রসেস মেথডটি ওই আর্টিফ্যাক্টটি ব্যবহার করে এটি নিশ্চিত করে যে, সার্ভ করার সময় ক্ল্যারিটি ফিচারটি তার সংক্ষিপ্ত রূপে থাকে। যদি তা না থাকে, তবে এটি সম্পূর্ণ স্ট্রিংটিকে তার সংক্ষিপ্ত রূপে রূপান্তর করে।
  • 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]])

🎉 অভিনন্দন! 🎉

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

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

কসমোপাপের মতে কোডল্যাবগুলো অসাধারণ!!

e6d3675ca7c6911f.jpeg

এরপর কী?

আরও পড়ুন ও ভিডিও

রেফারেন্স নথি