1. সংক্ষিপ্ত বিবরণ
এই ল্যাবে, আপনি শিখবেন কিভাবে Vertex ML Metadata দিয়ে আপনার Vertex Pipelines রান থেকে মেটাডেটা বিশ্লেষণ করতে হয়।
তুমি যা শিখো
তুমি শিখবে কিভাবে:
- Kubeflow Pipelines SDK ব্যবহার করে একটি ML পাইপলাইন তৈরি করুন যা Vertex AI তে একটি ডেটাসেট তৈরি করে এবং সেই ডেটাসেটে একটি কাস্টম Scikit-learn মডেল প্রশিক্ষণ এবং স্থাপন করে।
- কাস্টম পাইপলাইন উপাদানগুলি লিখুন যা আর্টিফ্যাক্ট এবং মেটাডেটা তৈরি করে
- ক্লাউড কনসোলে এবং প্রোগ্রাম্যাটিকভাবে উভয় ক্ষেত্রেই ভার্টেক্স পাইপলাইন রানের তুলনা করুন
- পাইপলাইন-জেনারেটেড আর্টিফ্যাক্টের বংশধারা ট্রেস করুন
- আপনার পাইপলাইন রান মেটাডেটা জিজ্ঞাসা করুন
গুগল ক্লাউডে এই ল্যাবটি পরিচালনা করতে মোট খরচ প্রায় $2 ।
2. ভার্টেক্স এআই-এর ভূমিকা
এই ল্যাবটি গুগল ক্লাউডে উপলব্ধ নতুন এআই পণ্য অফার ব্যবহার করে। ভার্টেক্স এআই গুগল ক্লাউড জুড়ে এমএল অফারগুলিকে একটি নিরবচ্ছিন্ন উন্নয়ন অভিজ্ঞতার জন্য একীভূত করে। পূর্বে, অটোএমএল এবং কাস্টম মডেলগুলির সাথে প্রশিক্ষিত মডেলগুলি পৃথক পরিষেবার মাধ্যমে অ্যাক্সেসযোগ্য ছিল। নতুন অফারটি অন্যান্য নতুন পণ্যগুলির সাথে উভয়কেই একটি একক API-তে একত্রিত করে। আপনি বিদ্যমান প্রকল্পগুলিকে ভার্টেক্স এআই-তে স্থানান্তর করতে পারেন।
মডেল প্রশিক্ষণ এবং স্থাপনা পরিষেবা ছাড়াও, Vertex AI-তে বিভিন্ন ধরণের MLOps পণ্য অন্তর্ভুক্ত রয়েছে, যার মধ্যে রয়েছে Vertex Pipelines, ML Metadata, Model Monitoring, Feature Store এবং আরও অনেক কিছু। আপনি নীচের চিত্রে সমস্ত Vertex AI পণ্য অফার দেখতে পারেন।

এই ল্যাবটি ভার্টেক্স পাইপলাইন এবং ভার্টেক্স এমএল মেটাডেটার উপর দৃষ্টি নিবদ্ধ করে।
আপনার যদি Vertex AI সম্পর্কে কোন প্রতিক্রিয়া থাকে, তাহলে অনুগ্রহ করে সহায়তা পৃষ্ঠাটি দেখুন।
এমএল পাইপলাইন কেন কার্যকর?
প্রথমেই জেনে নেওয়া যাক কেন আপনি পাইপলাইন ব্যবহার করতে চান। কল্পনা করুন আপনি একটি ML ওয়ার্কফ্লো তৈরি করছেন যার মধ্যে ডেটা প্রক্রিয়াকরণ, একটি মডেল প্রশিক্ষণ, হাইপারপ্যারামিটার টিউনিং, মূল্যায়ন এবং মডেল স্থাপন অন্তর্ভুক্ত। এই প্রতিটি ধাপের বিভিন্ন নির্ভরতা থাকতে পারে, যা আপনি যদি পুরো ওয়ার্কফ্লোটিকে একটি মনোলিথ হিসাবে বিবেচনা করেন তবে এটি অসহনীয় হয়ে উঠতে পারে। আপনি যখন আপনার ML প্রক্রিয়াটি স্কেল করতে শুরু করেন, তখন আপনি আপনার দলের অন্যদের সাথে আপনার ML ওয়ার্কফ্লো ভাগ করে নিতে চাইতে পারেন যাতে তারা এটি চালাতে পারে এবং কোড অবদান রাখতে পারে। একটি নির্ভরযোগ্য, পুনরুৎপাদনযোগ্য প্রক্রিয়া ছাড়া, এটি কঠিন হয়ে উঠতে পারে। পাইপলাইনের মাধ্যমে, আপনার ML প্রক্রিয়ার প্রতিটি ধাপ তার নিজস্ব ধারক। এটি আপনাকে স্বাধীনভাবে পদক্ষেপগুলি বিকাশ করতে এবং পুনরুৎপাদনযোগ্য উপায়ে প্রতিটি ধাপ থেকে ইনপুট এবং আউটপুট ট্র্যাক করতে দেয়। আপনি আপনার ক্লাউড পরিবেশে অন্যান্য ইভেন্টের উপর ভিত্তি করে আপনার পাইপলাইনের রান শিডিউল বা ট্রিগার করতে পারেন, যেমন নতুন প্রশিক্ষণ ডেটা উপলব্ধ হলে পাইপলাইন রান শুরু করা।
tl;dr : পাইপলাইনগুলি আপনার ML কর্মপ্রবাহ স্বয়ংক্রিয় এবং পুনরুৎপাদন করতে সাহায্য করে।
৩. ক্লাউড পরিবেশ সেটআপ
এই কোডল্যাবটি চালানোর জন্য আপনার বিলিং সক্ষম একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে। একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।
ক্লাউড শেল শুরু করুন
এই ল্যাবে আপনি একটি ক্লাউড শেল সেশনে কাজ করবেন, যা গুগলের ক্লাউডে চলমান একটি ভার্চুয়াল মেশিন দ্বারা হোস্ট করা একটি কমান্ড ইন্টারপ্রেটার। আপনি সহজেই আপনার নিজের কম্পিউটারে স্থানীয়ভাবে এই বিভাগটি চালাতে পারেন, তবে ক্লাউড শেল ব্যবহার করে প্রত্যেকেই একটি সামঞ্জস্যপূর্ণ পরিবেশে পুনরুৎপাদনযোগ্য অভিজ্ঞতার অ্যাক্সেস পান। ল্যাবের পরে, আপনি আপনার নিজের কম্পিউটারে এই বিভাগটি পুনরায় চেষ্টা করতে পারেন।

ক্লাউড শেল সক্রিয় করুন
ক্লাউড কনসোলের উপরের ডান দিক থেকে, ক্লাউড শেল সক্রিয় করতে নীচের বোতামে ক্লিক করুন:

যদি আপনি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন (ভাঁজের নীচে) দেখানো হবে যেখানে এটি কী তা বর্ণনা করা হবে। যদি তাই হয়, তাহলে Continue এ ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এই এককালীন স্ক্রিনটি কেমন দেখাবে:

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google Cloud-এ চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, কেবল একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার প্রকল্প আইডিতে সেট করা আছে।
আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
ক্লাউড শেলের কিছু পরিবেশগত ভেরিয়েবল আছে, যার মধ্যে GOOGLE_CLOUD_PROJECT অন্তর্ভুক্ত, যাতে আমাদের বর্তমান ক্লাউড প্রকল্পের নাম রয়েছে। আমরা এই ল্যাব জুড়ে বিভিন্ন জায়গায় এটি ব্যবহার করব। আপনি এটি চালিয়ে দেখতে পারেন:
echo $GOOGLE_CLOUD_PROJECT
API গুলি সক্ষম করুন
পরবর্তী ধাপগুলিতে, আপনি দেখতে পাবেন যে এই পরিষেবাগুলি কোথায় প্রয়োজন (এবং কেন), কিন্তু আপাতত, আপনার প্রকল্পটিকে কম্পিউট ইঞ্জিন, কন্টেইনার রেজিস্ট্রি এবং ভার্টেক্স এআই পরিষেবাগুলিতে অ্যাক্সেস দেওয়ার জন্য এই কমান্ডটি চালান:
gcloud services enable compute.googleapis.com \
containerregistry.googleapis.com \
aiplatform.googleapis.com
এটির ফলে এই বার্তার মতো একটি সফল বার্তা তৈরি হওয়া উচিত:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন
Vertex AI তে একটি প্রশিক্ষণ কাজ চালানোর জন্য, আমাদের সংরক্ষিত মডেল সম্পদ সংরক্ষণের জন্য একটি স্টোরেজ বাকেটের প্রয়োজন হবে। বাকেটটি আঞ্চলিক হতে হবে। আমরা এখানে us-central ব্যবহার করছি, তবে আপনি অন্য একটি অঞ্চল ব্যবহার করতে পারেন (শুধুমাত্র এই ল্যাব জুড়ে এটি প্রতিস্থাপন করুন)। যদি আপনার ইতিমধ্যেই একটি বাকেট থাকে তবে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।
একটি বাকেট তৈরি করতে আপনার ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডগুলি চালান:
BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME
এরপর আমরা আমাদের কম্পিউট সার্ভিস অ্যাকাউন্টকে এই বাকেটটিতে অ্যাক্সেস দেব। এটি নিশ্চিত করবে যে Vertex Pipelines-এর এই বাকেটটিতে ফাইল লেখার জন্য প্রয়োজনীয় অনুমতি রয়েছে। এই অনুমতি যোগ করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud projects describe $GOOGLE_CLOUD_PROJECT > project-info.txt
PROJECT_NUM=$(cat project-info.txt | sed -nre 's:.*projectNumber\: (.*):\1:p')
SVC_ACCOUNT="${PROJECT_NUM//\'/}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:$SVC_ACCOUNT --role roles/storage.objectAdmin
একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি করুন
আপনার ক্লাউড কনসোলের ভার্টেক্স এআই বিভাগ থেকে, ওয়ার্কবেঞ্চে ক্লিক করুন:

সেখান থেকে, ব্যবহারকারী-পরিচালিত নোটবুকের মধ্যে, নতুন নোটবুক ক্লিক করুন:

তারপর GPU ছাড়া TensorFlow Enterprise 2.3 (LTS সহ) ইনস্ট্যান্স টাইপ নির্বাচন করুন:

ডিফল্ট বিকল্পগুলি ব্যবহার করুন এবং তারপর তৈরি করুন ক্লিক করুন।
তোমার নোটবুক খুলো।
একবার ইনস্ট্যান্স তৈরি হয়ে গেলে, Open JupyterLab নির্বাচন করুন:

৪. ভার্টেক্স পাইপলাইন সেটআপ
Vertex Pipelines ব্যবহার করার জন্য আমাদের আরও কিছু অতিরিক্ত লাইব্রেরি ইনস্টল করতে হবে:
- Kubeflow Pipelines : এটি হল SDK যা আমরা আমাদের পাইপলাইন তৈরি করতে ব্যবহার করব। Vertex Pipelines Kubeflow Pipelines বা TFX উভয় দিয়ে তৈরি চলমান পাইপলাইনগুলিকে সমর্থন করে।
- Vertex AI SDK : এই SDK Vertex AI API কল করার অভিজ্ঞতাকে অপ্টিমাইজ করে। আমরা Vertex AI তে আমাদের পাইপলাইন চালানোর জন্য এটি ব্যবহার করব।
পাইথন নোটবুক তৈরি করুন এবং লাইব্রেরি ইনস্টল করুন
প্রথমে, আপনার নোটবুক ইনস্ট্যান্সের লঞ্চার মেনু থেকে, পাইথন 3 নির্বাচন করে একটি নোটবুক তৈরি করুন:

এই ল্যাবে আমরা যে দুটি পরিষেবা ব্যবহার করব তা ইনস্টল করতে, প্রথমে একটি নোটবুক সেলে ব্যবহারকারীর পতাকা সেট করুন:
USER_FLAG = "--user"
তারপর আপনার নোটবুক থেকে নিম্নলিখিতটি চালান:
!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0
!pip3 install {USER_FLAG} kfp==1.8.9
এই প্যাকেজগুলি ইনস্টল করার পরে আপনাকে কার্নেলটি পুনরায় চালু করতে হবে:
import os
if not os.getenv("IS_TESTING"):
# Automatically restart kernel after installs
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
এরপর, আপনি KFP SDK ভার্সনটি সঠিকভাবে ইনস্টল করেছেন কিনা তা পরীক্ষা করুন। এটি >=1.8 হওয়া উচিত:
!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
তারপর নিশ্চিত করুন যে আপনার Vertex AI SDK সংস্করণটি >= 1.6.2:
!pip list | grep aiplatform
আপনার প্রকল্প আইডি এবং বাকেট সেট করুন
এই ল্যাব জুড়ে আপনি আপনার ক্লাউড প্রোজেক্ট আইডি এবং আপনার আগে তৈরি করা বাকেটটি উল্লেখ করবেন। এরপর আমরা প্রতিটির জন্য ভেরিয়েবল তৈরি করব।
যদি আপনি আপনার প্রকল্প আইডি না জানেন তবে আপনি নিম্নলিখিতগুলি চালিয়ে এটি পেতে সক্ষম হতে পারেন:
import os
PROJECT_ID = ""
# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
PROJECT_ID = shell_output[0]
print("Project ID: ", PROJECT_ID)
অন্যথায়, এটি এখানে সেট করুন:
if PROJECT_ID == "" or PROJECT_ID is None:
PROJECT_ID = "your-project-id" # @param {type:"string"}
তারপর আপনার বাকেট নেম সংরক্ষণ করার জন্য একটি ভেরিয়েবল তৈরি করুন। যদি আপনি এটি এই ল্যাবে তৈরি করে থাকেন, তাহলে নিম্নলিখিতগুলি কাজ করবে। অন্যথায়, আপনাকে এটি ম্যানুয়ালি সেট করতে হবে:
BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"
লাইব্রেরি আমদানি করুন
এই কোডল্যাব জুড়ে আমরা যে লাইব্রেরিগুলি ব্যবহার করব তা আমদানি করতে নিম্নলিখিতগুলি যোগ করুন:
import matplotlib.pyplot as plt
import pandas as pd
from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline, component, Artifact, Dataset, Input, Metrics, Model, Output, InputPath, OutputPath
from google.cloud import aiplatform
# We'll use this namespace for metadata querying
from google.cloud import aiplatform_v1
ধ্রুবক সংজ্ঞায়িত করুন
আমাদের পাইপলাইন তৈরি করার আগে আমাদের শেষ যে কাজটি করতে হবে তা হল কিছু ধ্রুবক ভেরিয়েবল সংজ্ঞায়িত করা। PIPELINE_ROOT হল ক্লাউড স্টোরেজ পাথ যেখানে আমাদের পাইপলাইন দ্বারা তৈরি আর্টিফ্যাক্টগুলি লেখা হবে। আমরা এখানে অঞ্চল হিসাবে us-central1 ব্যবহার করছি, কিন্তু যদি আপনি আপনার বাকেট তৈরি করার সময় অন্য কোনও অঞ্চল ব্যবহার করে থাকেন, তাহলে নীচের কোডে REGION ভেরিয়েবলটি আপডেট করুন:
PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"
PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT
উপরের কোডটি রান করার পর, আপনার পাইপলাইনের রুট ডিরেক্টরিটি প্রিন্ট করা দেখতে পাবেন। এটি হল ক্লাউড স্টোরেজের অবস্থান যেখানে আপনার পাইপলাইনের আর্টিফ্যাক্টগুলি লেখা হবে। এটি gs://YOUR-BUCKET-NAME/pipeline_root/ ফর্ম্যাটে থাকবে।
৫. কাস্টম উপাদান সহ একটি ৩-পদক্ষেপের পাইপলাইন তৈরি করা
এই ল্যাবের মূল লক্ষ্য হলো পাইপলাইন রান থেকে মেটাডেটা বোঝা। এটি করার জন্য, আমাদের ভার্টেক্স পাইপলাইনে চালানোর জন্য একটি পাইপলাইনের প্রয়োজন হবে, যেখান থেকে আমরা শুরু করব। এখানে আমরা নিম্নলিখিত কাস্টম উপাদানগুলির সাথে একটি 3-পদক্ষেপের পাইপলাইন সংজ্ঞায়িত করব:
-
get_dataframe: একটি BigQuery টেবিল থেকে ডেটা পুনরুদ্ধার করে একটি Pandas DataFrame-এ রূপান্তর করুন। -
train_sklearn_model: কিছু মেট্রিক্স সহ একটি Scikit Learn মডেলকে প্রশিক্ষণ এবং রপ্তানি করতে Pandas DataFrame ব্যবহার করুন। -
deploy_model: Vertex AI-তে এক্সপোর্ট করা Scikit Learn মডেলটিকে একটি এন্ডপয়েন্টে স্থাপন করুন।
এই পাইপলাইনে, আমরা UCI মেশিন লার্নিং ড্রাই বিনস ডেটাসেট ব্যবহার করব, যা থেকে: KOKLU, M. এবং OZKAN, IA, (2020), "কম্পিউটার ভিশন এবং মেশিন লার্নিং টেকনিক ব্যবহার করে ড্রাই বিনসের মাল্টিক্লাস ক্লাসিফিকেশন।" ইন কম্পিউটারস অ্যান্ড ইলেকট্রনিক্স ইন এগ্রিকালচার, 174, 105507। DOI ।
এটি একটি ট্যাবুলার ডেটাসেট, এবং আমাদের পাইপলাইনে আমরা ডেটাসেটটি ব্যবহার করে একটি Scikit-learn মডেলকে প্রশিক্ষণ, মূল্যায়ন এবং স্থাপন করব যা বিনগুলিকে তাদের বৈশিষ্ট্যের উপর ভিত্তি করে 7 ধরণের মধ্যে একটিতে শ্রেণীবদ্ধ করে। আসুন কোডিং শুরু করি!
পাইথন ফাংশন ভিত্তিক উপাদান তৈরি করুন
KFP SDK ব্যবহার করে, আমরা পাইথন ফাংশনের উপর ভিত্তি করে উপাদান তৈরি করতে পারি। আমরা এই পাইপলাইনের 3টি উপাদানের জন্য এটি ব্যবহার করব।
BigQuery ডেটা ডাউনলোড করুন এবং CSV তে রূপান্তর করুন
প্রথমে, আমরা get_dataframe কম্পোনেন্টটি তৈরি করব:
@component(
packages_to_install=["google-cloud-bigquery", "pandas", "pyarrow", "db-dtypes"],
base_image="python:3.9",
output_component_file="create_dataset.yaml"
)
def get_dataframe(
bq_table: str,
output_data_path: OutputPath("Dataset")
):
from google.cloud import bigquery
import pandas as pd
import os
project_number = os.environ["CLOUD_ML_PROJECT_ID"]
bqclient = bigquery.Client(project=project_number)
table = bigquery.TableReference.from_string(
bq_table
)
rows = bqclient.list_rows(
table
)
dataframe = rows.to_dataframe(
create_bqstorage_client=True,
)
dataframe = dataframe.sample(frac=1, random_state=2)
dataframe.to_csv(output_data_path)
আসুন এই উপাদানটিতে কী ঘটছে তা ঘনিষ্ঠভাবে দেখে নেওয়া যাক:
- পাইপলাইনটি চালানোর সময়
@componentডেকোরেটর এই ফাংশনটিকে একটি কম্পোনেন্টে কম্পাইল করে। আপনি যখনই একটি কাস্টম কম্পোনেন্ট লিখবেন তখন এটি ব্যবহার করতে পারবেন। -
base_imageপ্যারামিটারটি এই উপাদানটি যে কন্টেইনার চিত্রটি ব্যবহার করবে তা নির্দিষ্ট করে। - এই কম্পোনেন্টটি কয়েকটি পাইথন লাইব্রেরি ব্যবহার করবে, যা আমরা
packages_to_installপ্যারামিটারের মাধ্যমে নির্দিষ্ট করি। -
output_component_fileপ্যারামিটারটি ঐচ্ছিক, এবং কম্পাইল করা কম্পোনেন্টটি কোন yaml ফাইলে লেখা হবে তা নির্দিষ্ট করে। সেলটি চালানোর পরে আপনি আপনার নোটবুক ইনস্ট্যান্সে সেই ফাইলটি লেখা দেখতে পাবেন। আপনি যদি এই কম্পোনেন্টটি কারো সাথে শেয়ার করতে চান, তাহলে আপনি তাদের তৈরি করা yaml ফাইলটি পাঠাতে পারেন এবং তাদের নিম্নলিখিতগুলি দিয়ে লোড করতে বলতে পারেন:
# This is optional, it shows how to load a component from a yaml file
# dataset_component = kfp.components.load_component_from_file('./create_dataset.yaml')
- এরপর, এই কম্পোনেন্টটি BigQuery পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে BigQuery থেকে আমাদের ডেটা একটি Pandas DataFrame-এ ডাউনলোড করে, এবং তারপর সেই ডেটার একটি আউটপুট আর্টিফ্যাক্ট তৈরি করে যা একটি CSV ফাইল হিসেবে তৈরি করে। এটি আমাদের পরবর্তী কম্পোনেন্টে ইনপুট হিসেবে পাঠানো হবে।
সাইকিট-লার্ন মডেলকে প্রশিক্ষণ দেওয়ার জন্য একটি উপাদান তৈরি করুন
এই কম্পোনেন্টে আমরা পূর্বে তৈরি করা CSV নেব এবং এটি একটি Scikit-learn decision tree মডেলকে প্রশিক্ষণ দেওয়ার জন্য ব্যবহার করব। এই কম্পোনেন্টটি Scikit মডেলটি রপ্তানি করবে, সাথে একটি Metrics আর্টিফ্যাক্ট থাকবে যার মধ্যে আমাদের মডেলের নির্ভুলতা, কাঠামো এবং এটিকে প্রশিক্ষণ দেওয়ার জন্য ব্যবহৃত ডেটাসেটের আকার অন্তর্ভুক্ত থাকবে:
@component(
packages_to_install=["sklearn", "pandas", "joblib", "db-dtypes"],
base_image="python:3.9",
output_component_file="beans_model_component.yaml",
)
def sklearn_train(
dataset: Input[Dataset],
metrics: Output[Metrics],
model: Output[Model]
):
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from joblib import dump
import pandas as pd
df = pd.read_csv(dataset.path)
labels = df.pop("Class").tolist()
data = df.values.tolist()
x_train, x_test, y_train, y_test = train_test_split(data, labels)
skmodel = DecisionTreeClassifier()
skmodel.fit(x_train,y_train)
score = skmodel.score(x_test,y_test)
print('accuracy is:',score)
metrics.log_metric("accuracy",(score * 100.0))
metrics.log_metric("framework", "Scikit Learn")
metrics.log_metric("dataset_size", len(df))
dump(skmodel, model.path + ".joblib")
ভার্টেক্স এআই-তে মডেলটি আপলোড এবং স্থাপন করার জন্য একটি উপাদান নির্ধারণ করুন।
অবশেষে, আমাদের শেষ উপাদানটি পূর্ববর্তী ধাপ থেকে প্রশিক্ষিত মডেলটি নেবে, এটিকে Vertex AI তে আপলোড করবে এবং এটিকে একটি শেষ বিন্দুতে স্থাপন করবে:
@component(
packages_to_install=["google-cloud-aiplatform"],
base_image="python:3.9",
output_component_file="beans_deploy_component.yaml",
)
def deploy_model(
model: Input[Model],
project: str,
region: str,
vertex_endpoint: Output[Artifact],
vertex_model: Output[Model]
):
from google.cloud import aiplatform
aiplatform.init(project=project, location=region)
deployed_model = aiplatform.Model.upload(
display_name="beans-model-pipeline",
artifact_uri = model.uri.replace("model", ""),
serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest"
)
endpoint = deployed_model.deploy(machine_type="n1-standard-4")
# Save data to the output params
vertex_endpoint.uri = endpoint.resource_name
vertex_model.uri = deployed_model.resource_name
এখানে আমরা পূর্বাভাসের জন্য একটি পূর্ব-নির্মিত কন্টেইনার ব্যবহার করে মডেলটি আপলোড করার জন্য Vertex AI SDK ব্যবহার করছি। এটি তারপর মডেলটিকে একটি এন্ডপয়েন্টে স্থাপন করে এবং মডেল এবং এন্ডপয়েন্ট রিসোর্স উভয়ের URI গুলি ফেরত পাঠায়। এই কোডল্যাবে পরে আপনি এই ডেটাকে আর্টিফ্যাক্ট হিসাবে ফেরত দেওয়ার অর্থ কী তা সম্পর্কে আরও জানতে পারবেন।
পাইপলাইন সংজ্ঞায়িত এবং কম্পাইল করুন
এখন যেহেতু আমরা আমাদের তিনটি উপাদান সংজ্ঞায়িত করেছি, এরপর আমরা আমাদের পাইপলাইন সংজ্ঞা তৈরি করব। এটি বর্ণনা করে যে কীভাবে ইনপুট এবং আউটপুট আর্টিফ্যাক্টগুলি ধাপগুলির মধ্যে প্রবাহিত হয়:
@pipeline(
# Default pipeline root. You can override it when submitting the pipeline.
pipeline_root=PIPELINE_ROOT,
# A name for the pipeline.
name="mlmd-pipeline",
)
def pipeline(
bq_table: str = "",
output_data_path: str = "data.csv",
project: str = PROJECT_ID,
region: str = REGION
):
dataset_task = get_dataframe(bq_table)
model_task = sklearn_train(
dataset_task.output
)
deploy_task = deploy_model(
model=model_task.outputs["model"],
project=project,
region=region
)
নিম্নলিখিতটি একটি JSON ফাইল তৈরি করবে যা আপনি পাইপলাইনটি চালানোর জন্য ব্যবহার করবেন:
compiler.Compiler().compile(
pipeline_func=pipeline, package_path="mlmd_pipeline.json"
)
দুটি পাইপলাইন রান শুরু করুন
এরপর আমরা আমাদের পাইপলাইনের দুটি ধাপ শুরু করব। প্রথমে আমাদের পাইপলাইন জব আইডিগুলির জন্য একটি টাইমস্ট্যাম্প সংজ্ঞায়িত করা যাক:
from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")
মনে রাখবেন যে আমাদের পাইপলাইন চালানোর সময় একটি প্যারামিটার লাগে: bq_table যা আমরা প্রশিক্ষণ ডেটার জন্য ব্যবহার করতে চাই। এই পাইপলাইন রানটি beans dataset এর একটি ছোট সংস্করণ ব্যবহার করবে:
run1 = aiplatform.PipelineJob(
display_name="mlmd-pipeline",
template_path="mlmd_pipeline.json",
job_id="mlmd-pipeline-small-{0}".format(TIMESTAMP),
parameter_values={"bq_table": "sara-vertex-demos.beans_demo.small_dataset"},
enable_caching=True,
)
এরপর, একই ডেটাসেটের একটি বৃহত্তর সংস্করণ ব্যবহার করে আরেকটি পাইপলাইন রান তৈরি করুন।
run2 = aiplatform.PipelineJob(
display_name="mlmd-pipeline",
template_path="mlmd_pipeline.json",
job_id="mlmd-pipeline-large-{0}".format(TIMESTAMP),
parameter_values={"bq_table": "sara-vertex-demos.beans_demo.large_dataset"},
enable_caching=True,
)
অবশেষে, উভয় রানের জন্য পাইপলাইন এক্সিকিউশন শুরু করুন। দুটি পৃথক নোটবুক সেলে এটি করা ভাল যাতে আপনি প্রতিটি রানের আউটপুট দেখতে পারেন।
run1.submit()
তারপর, দ্বিতীয় দৌড় শুরু করুন:
run2.submit()
এই সেলটি চালানোর পরে, আপনি Vertex AI কনসোলে প্রতিটি পাইপলাইন দেখার জন্য একটি লিঙ্ক দেখতে পাবেন। আপনার পাইপলাইন সম্পর্কে আরও বিস্তারিত দেখতে সেই লিঙ্কটি খুলুন:

যখন এটি সম্পূর্ণ হবে (এই পাইপলাইনটি প্রতি রানে প্রায় ১০-১৫ মিনিট সময় নেয়), আপনি এরকম কিছু দেখতে পাবেন:

এখন যেহেতু আপনার দুটি পাইপলাইন রান সম্পন্ন হয়েছে, আপনি পাইপলাইন আর্টিফ্যাক্ট, মেট্রিক্স এবং বংশের দিকে ঘনিষ্ঠভাবে নজর দেওয়ার জন্য প্রস্তুত।
৬. পাইপলাইনের শিল্পকর্ম এবং বংশধারা বোঝা
আপনার পাইপলাইন গ্রাফে, প্রতিটি ধাপের পরে আপনি ছোট ছোট বাক্স দেখতে পাবেন। এগুলো হল আর্টিফ্যাক্ট , অথবা পাইপলাইন ধাপ থেকে উৎপন্ন আউটপুট। অনেক ধরণের আর্টিফ্যাক্ট রয়েছে। এই নির্দিষ্ট পাইপলাইনে আমাদের কাছে ডেটাসেট, মেট্রিক্স, মডেল এবং এন্ডপয়েন্ট আর্টিফ্যাক্ট রয়েছে। প্রতিটি সম্পর্কে আরও বিস্তারিত জানতে UI এর উপরে Expand Artifacts স্লাইডারে ক্লিক করুন:

একটি আর্টিফ্যাক্টের উপর ক্লিক করলে আপনাকে তার URI সহ আরও বিশদ দেখাবে। উদাহরণস্বরূপ, vertex_endpoint আর্টিফ্যাক্টে ক্লিক করলে আপনাকে URI দেখাবে যেখানে আপনি আপনার Vertex AI কনসোলে সেই ডিপ্লয় করা এন্ডপয়েন্টটি খুঁজে পাবেন:

একটি Metrics আর্টিফ্যাক্ট আপনাকে একটি নির্দিষ্ট পাইপলাইন ধাপের সাথে সম্পর্কিত কাস্টম মেট্রিক্স পাস করতে দেয়। আমাদের পাইপলাইনের sklearn_train কম্পোনেন্টে, আমরা আমাদের মডেলের নির্ভুলতা, ফ্রেমওয়ার্ক এবং ডেটাসেটের আকারের মেট্রিক্স লগ করেছি। এই বিবরণগুলি দেখতে মেট্রিক্স আর্টিফ্যাক্টে ক্লিক করুন:

প্রতিটি আর্টিফ্যাক্টের Lineage থাকে, যা এটির সাথে সংযুক্ত অন্যান্য আর্টিফ্যাক্টের বর্ণনা দেয়। আপনার পাইপলাইনের vertex_endpoint আর্টিফ্যাক্টে আবার ক্লিক করুন, এবং তারপর View Lineage বোতামে ক্লিক করুন:

এটি একটি নতুন ট্যাব খুলবে যেখানে আপনি আপনার নির্বাচিতটির সাথে সংযুক্ত সমস্ত শিল্পকর্ম দেখতে পাবেন। আপনার বংশের গ্রাফটি এরকম দেখাবে:

এটি আমাদের এই এন্ডপয়েন্টের সাথে সম্পর্কিত মডেল, মেট্রিক্স এবং ডেটাসেট দেখায়। এটি কেন কার্যকর? আপনার একাধিক এন্ডপয়েন্টে একটি মডেল স্থাপন করা থাকতে পারে, অথবা আপনি যে এন্ডপয়েন্টটি দেখছেন তাতে স্থাপন করা মডেলটিকে প্রশিক্ষণ দেওয়ার জন্য ব্যবহৃত নির্দিষ্ট ডেটাসেটটি জানতে হবে। বংশ গ্রাফটি আপনাকে আপনার বাকি ML সিস্টেমের প্রেক্ষাপটে প্রতিটি আর্টিফ্যাক্ট বুঝতে সাহায্য করে। আপনি বংশ প্রোগ্রামিকভাবেও অ্যাক্সেস করতে পারেন, যেমনটি আমরা এই কোডল্যাবে পরে দেখব।
৭. পাইপলাইন রানের তুলনা করা
একটি পাইপলাইন একাধিকবার চালানোর সম্ভাবনা রয়েছে, হতে পারে বিভিন্ন ইনপুট প্যারামিটার, নতুন ডেটা, অথবা আপনার দলের লোকজন দ্বারা। পাইপলাইন রানের ট্র্যাক রাখতে, বিভিন্ন মেট্রিক্স অনুসারে তাদের তুলনা করার একটি উপায় থাকা সুবিধাজনক হবে। এই বিভাগে আমরা রান তুলনা করার দুটি উপায় অন্বেষণ করব।
পাইপলাইন UI-তে রানের তুলনা করা
ক্লাউড কনসোলে, আপনার পাইপলাইন ড্যাশবোর্ডে যান। এটি আপনার দ্বারা সম্পাদিত প্রতিটি পাইপলাইন রানের একটি সারসংক্ষেপ প্রদান করে। শেষ দুটি রান পরীক্ষা করুন এবং তারপর উপরে তুলনা বোতামে ক্লিক করুন:

এটি আমাদের এমন একটি পৃষ্ঠায় নিয়ে যাবে যেখানে আমরা নির্বাচিত প্রতিটি রানের জন্য ইনপুট প্যারামিটার এবং মেট্রিক্স তুলনা করতে পারব। এই দুটি রানের জন্য, বিভিন্ন BigQuery টেবিল, ডেটাসেটের আকার এবং নির্ভুলতার মান লক্ষ্য করুন:

আপনি এই UI কার্যকারিতা ব্যবহার করে দুটির বেশি রান, এমনকি বিভিন্ন পাইপলাইন থেকে রান তুলনা করতে পারেন।
ভার্টেক্স এআই এসডিকে-র সাথে রানের তুলনা করা
অনেক পাইপলাইন এক্সিকিউশনের ক্ষেত্রে, আপনি হয়তো এই তুলনামূলক মেট্রিক্সগুলিকে প্রোগ্রাম্যাটিকভাবে পাওয়ার একটি উপায় চাইতে পারেন যাতে মেট্রিক্সের বিশদ বিবরণ আরও গভীরে খনন করা যায় এবং ভিজ্যুয়ালাইজেশন তৈরি করা যায়।
রান মেটাডেটা অ্যাক্সেস করার জন্য আপনি aiplatform.get_pipeline_df() পদ্ধতি ব্যবহার করতে পারেন। এখানে, আমরা একই পাইপলাইনের শেষ দুটি রানের জন্য মেটাডেটা পাব এবং এটি একটি Pandas DataFrame-এ লোড করব। এখানে pipeline প্যারামিটারটি আমাদের পাইপলাইন সংজ্ঞায় আমাদের পাইপলাইনের নামটি বোঝায়:
df = aiplatform.get_pipeline_df(pipeline="mlmd-pipeline")
df
যখন আপনি ডেটাফ্রেম প্রিন্ট করবেন, তখন আপনি এরকম কিছু দেখতে পাবেন:

আমরা এখানে মাত্র দুবার আমাদের পাইপলাইন কার্যকর করেছি, কিন্তু আরও কার্যকরীকরণের সাথে আপনার কত মেট্রিক্স থাকবে তা আপনি কল্পনা করতে পারেন। এরপর, আমরা matplotlib দিয়ে একটি কাস্টম ভিজ্যুয়ালাইজেশন তৈরি করব যাতে আমাদের মডেলের নির্ভুলতা এবং প্রশিক্ষণের জন্য ব্যবহৃত ডেটার পরিমাণের মধ্যে সম্পর্ক দেখা যায়।
একটি নতুন নোটবুক সেলে নিম্নলিখিতটি চালান:
plt.plot(df["metric.dataset_size"], df["metric.accuracy"],label="Accuracy")
plt.title("Accuracy and dataset size")
plt.legend(loc=4)
plt.show()
তোমার এরকম কিছু দেখা উচিত:

৮. পাইপলাইন মেট্রিক্স অনুসন্ধান করা
সমস্ত পাইপলাইন মেট্রিক্সের একটি ডেটাফ্রেম পাওয়ার পাশাপাশি, আপনি আপনার ML সিস্টেমে তৈরি আর্টিফ্যাক্টগুলি প্রোগ্রাম্যাটিকভাবে জিজ্ঞাসা করতে চাইতে পারেন। সেখান থেকে আপনি একটি কাস্টম ড্যাশবোর্ড তৈরি করতে পারেন অথবা আপনার সংস্থার অন্যদের নির্দিষ্ট আর্টিফ্যাক্টগুলির বিশদ জানতে দিতে পারেন।
সমস্ত মডেল আর্টিফ্যাক্ট পাওয়া হচ্ছে
এইভাবে আর্টিফ্যাক্টগুলি জিজ্ঞাসা করার জন্য, আমরা একটি MetadataServiceClient তৈরি করব:
API_ENDPOINT = "{}-aiplatform.googleapis.com".format(REGION)
metadata_client = aiplatform_v1.MetadataServiceClient(
client_options={
"api_endpoint": API_ENDPOINT
}
)
এরপর, আমরা সেই শেষ বিন্দুতে একটি list_artifacts অনুরোধ করব এবং আমাদের প্রতিক্রিয়ায় কোন আর্টিফ্যাক্টগুলি চাই তা নির্দেশ করে একটি ফিল্টার পাস করব। প্রথমে, আমাদের প্রকল্পের সমস্ত আর্টিফ্যাক্টগুলি মডেল হিসাবে নেওয়া যাক। এটি করার জন্য, আপনার নোটবুকে নিম্নলিখিতটি চালান:
MODEL_FILTER="schema_title = \"system.Model\""
artifact_request = aiplatform_v1.ListArtifactsRequest(
parent="projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
filter=MODEL_FILTER
)
model_artifacts = metadata_client.list_artifacts(artifact_request)
ফলাফলস্বরূপ model_artifacts প্রতিক্রিয়াটিতে আপনার প্রকল্পের প্রতিটি মডেল আর্টিফ্যাক্টের জন্য একটি পুনরাবৃত্তিযোগ্য অবজেক্ট রয়েছে, প্রতিটি মডেলের জন্য সংশ্লিষ্ট মেটাডেটা সহ।
ডেটাফ্রেমে অবজেক্ট ফিল্টার করা এবং প্রদর্শন করা
আমরা যদি ফলাফলের আর্টিফ্যাক্ট কোয়েরিটি আরও সহজে কল্পনা করতে পারি তবে এটি সুবিধাজনক হবে। এরপর, আসুন ১০ আগস্ট, ২০২১ এর পরে তৈরি সমস্ত আর্টিফ্যাক্টকে একটি LIVE অবস্থায় নিয়ে আসি। এই অনুরোধটি চালানোর পরে, আমরা ফলাফলগুলি একটি Pandas DataFrame-এ প্রদর্শন করব। প্রথমে, অনুরোধটি কার্যকর করুন:
LIVE_FILTER = "create_time > \"2021-08-10T00:00:00-00:00\" AND state = LIVE"
artifact_req = {
"parent": "projects/{0}/locations/{1}/metadataStores/default".format(PROJECT_ID, REGION),
"filter": LIVE_FILTER
}
live_artifacts = metadata_client.list_artifacts(artifact_req)
তারপর, ফলাফলগুলি একটি ডেটাফ্রেমে প্রদর্শন করুন:
data = {'uri': [], 'createTime': [], 'type': []}
for i in live_artifacts:
data['uri'].append(i.uri)
data['createTime'].append(i.create_time)
data['type'].append(i.schema_title)
df = pd.DataFrame.from_dict(data)
df
তুমি এরকম কিছু দেখতে পাবে:

আপনি এখানে যা চেষ্টা করেছেন তা ছাড়াও অন্যান্য মানদণ্ডের উপর ভিত্তি করেও শিল্পকর্ম ফিল্টার করতে পারেন।
এর সাথে, তুমি ল্যাব শেষ করেছ!
🎉 অভিনন্দন! 🎉
আপনি Vertex AI ব্যবহার করে শিখেছেন:
- Kubeflow Pipelines SDK ব্যবহার করে একটি ML পাইপলাইন তৈরি করুন যা Vertex AI তে একটি ডেটাসেট তৈরি করে এবং সেই ডেটাসেটে একটি কাস্টম Scikit-learn মডেল প্রশিক্ষণ এবং স্থাপন করে।
- কাস্টম পাইপলাইন উপাদানগুলি লিখুন যা আর্টিফ্যাক্ট এবং মেটাডেটা তৈরি করে
- ক্লাউড কনসোলে এবং প্রোগ্রাম্যাটিকভাবে উভয় ক্ষেত্রেই ভার্টেক্স পাইপলাইন রানের তুলনা করুন
- পাইপলাইন-জেনারেটেড আর্টিফ্যাক্টের বংশধারা ট্রেস করুন
- আপনার পাইপলাইন রান মেটাডেটা জিজ্ঞাসা করুন
ভার্টেক্সের বিভিন্ন অংশ সম্পর্কে আরও জানতে, ডকুমেন্টেশনটি দেখুন।
9. পরিষ্কার করা
যাতে আপনার কাছ থেকে কোনও চার্জ না নেওয়া হয়, সেইজন্য এই ল্যাব জুড়ে তৈরি রিসোর্সগুলি মুছে ফেলার পরামর্শ দেওয়া হচ্ছে।
আপনার নোটবুকস ইন্সট্যান্স বন্ধ করুন বা মুছে ফেলুন
যদি আপনি এই ল্যাবে তৈরি করা নোটবুকটি ব্যবহার চালিয়ে যেতে চান, তাহলে ব্যবহার না করার সময় এটি বন্ধ করে দেওয়ার পরামর্শ দেওয়া হচ্ছে। আপনার ক্লাউড কনসোলের নোটবুকস UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপর Stop নির্বাচন করুন। যদি আপনি ইনস্ট্যান্সটি সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে Delete নির্বাচন করুন:

আপনার ভার্টেক্স এআই এন্ডপয়েন্টগুলি মুছুন
আপনার স্থাপন করা এন্ডপয়েন্টটি মুছে ফেলতে, আপনার ভার্টেক্স এআই কনসোলের এন্ডপয়েন্টস বিভাগে নেভিগেট করুন এবং ডিলিট আইকনে ক্লিক করুন:

আপনার ক্লাউড স্টোরেজ বাকেট মুছে ফেলুন
স্টোরেজ বাকেট মুছে ফেলার জন্য, আপনার ক্লাউড কনসোলের নেভিগেশন মেনু ব্যবহার করে, স্টোরেজ ব্রাউজ করুন, আপনার বাকেট নির্বাচন করুন এবং ডিলিট ক্লিক করুন:
