1. ওভারভিউ
এই ল্যাবে, আপনি শিখবেন কিভাবে আপনার ভার্টেক্স পাইপলাইনগুলি থেকে মেটাডেটা বিশ্লেষণ করতে হয় ভার্টেক্স এমএল মেটাডেটা দিয়ে।
আপনি কি শিখুন
আপনি কিভাবে শিখবেন:
- একটি ML পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন যা Vertex AI-তে একটি ডেটাসেট তৈরি করে এবং সেই ডেটাসেটে একটি কাস্টম স্কিট-লার্ন মডেল ট্রেনিং ও স্থাপন করে
- কাস্টম পাইপলাইন উপাদানগুলি লিখুন যা আর্টিফ্যাক্ট এবং মেটাডেটা তৈরি করে
- ক্লাউড কনসোলে এবং প্রোগ্রামগতভাবে, ভার্টেক্স পাইপলাইনগুলির তুলনা করুন
- পাইপলাইন-উত্পন্ন শিল্পকর্মের জন্য বংশের সন্ধান করুন
- আপনার পাইপলাইন চালানোর মেটাডেটা জিজ্ঞাসা করুন
Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $2 ।
2. ভার্টেক্স এআই-এর ভূমিকা
এই ল্যাবটি Google ক্লাউডে উপলব্ধ নতুন AI পণ্য অফার ব্যবহার করে। Vertex AI Google ক্লাউড জুড়ে ML অফারগুলিকে একটি নিরবচ্ছিন্ন বিকাশের অভিজ্ঞতায় সংহত করে৷ পূর্বে, অটোএমএল এবং কাস্টম মডেলগুলির সাথে প্রশিক্ষিত মডেলগুলি পৃথক পরিষেবার মাধ্যমে অ্যাক্সেসযোগ্য ছিল। নতুন অফারটি অন্যান্য নতুন পণ্যের সাথে একটি একক API-এ উভয়কে একত্রিত করে। আপনি বিদ্যমান প্রকল্পগুলিকে Vertex AI-তে স্থানান্তর করতে পারেন।
মডেল প্রশিক্ষণ এবং স্থাপনার পরিষেবা ছাড়াও, Vertex AI-তে ভার্টেক্স পাইপলাইন, ML মেটাডেটা, মডেল মনিটরিং, ফিচার স্টোর এবং আরও অনেক কিছু সহ MLOps পণ্যের একটিও অন্তর্ভুক্ত রয়েছে। আপনি নীচের চিত্রে সমস্ত Vertex AI পণ্য অফার দেখতে পারেন।
এই ল্যাবটি ভার্টেক্স পাইপলাইন এবং ভার্টেক্স এমএল মেটাডেটার উপর ফোকাস করে।
আপনার যদি কোন Vertex AI প্রতিক্রিয়া থাকে, অনুগ্রহ করে সমর্থন পৃষ্ঠাটি দেখুন।
কেন ML পাইপলাইন দরকারী?
আমরা ডুব দেওয়ার আগে, আসুন প্রথমে বুঝতে পারি কেন আপনি একটি পাইপলাইন ব্যবহার করতে চান। কল্পনা করুন যে আপনি একটি এমএল ওয়ার্কফ্লো তৈরি করছেন যাতে ডেটা প্রক্রিয়াকরণ, একটি মডেল প্রশিক্ষণ, হাইপারপ্যারামিটার টিউনিং, মূল্যায়ন এবং মডেল স্থাপন অন্তর্ভুক্ত রয়েছে। এই ধাপগুলির প্রতিটিতে বিভিন্ন নির্ভরতা থাকতে পারে, যা অবাস্তব হয়ে উঠতে পারে যদি আপনি পুরো ওয়ার্কফ্লোকে একচেটিয়া হিসাবে বিবেচনা করেন। আপনি যখন আপনার ML প্রক্রিয়াটি স্কেল করতে শুরু করেন, আপনি আপনার ML কর্মপ্রবাহটি আপনার দলের অন্যদের সাথে ভাগ করতে চাইতে পারেন যাতে তারা এটি চালাতে পারে এবং কোডে অবদান রাখতে পারে। একটি নির্ভরযোগ্য, প্রজননযোগ্য প্রক্রিয়া ছাড়া, এটি কঠিন হয়ে উঠতে পারে। পাইপলাইনগুলির সাথে, আপনার ML প্রক্রিয়ার প্রতিটি ধাপ তার নিজস্ব ধারক। এটি আপনাকে স্বাধীনভাবে পদক্ষেপগুলি বিকাশ করতে এবং প্রতিটি ধাপ থেকে পুনরুত্পাদনযোগ্য উপায়ে ইনপুট এবং আউটপুট ট্র্যাক করতে দেয়। এছাড়াও আপনি আপনার ক্লাউড পরিবেশে অন্যান্য ইভেন্টের উপর ভিত্তি করে আপনার পাইপলাইনের রানের সময়সূচী বা ট্রিগার করতে পারেন, যেমন নতুন প্রশিক্ষণের ডেটা উপলব্ধ হলে পাইপলাইন চালানো বন্ধ করা।
tl;dr : পাইপলাইনগুলি আপনাকে আপনার এমএল ওয়ার্কফ্লো স্বয়ংক্রিয় এবং পুনরুত্পাদন করতে সহায়তা করে।
3. মেঘ পরিবেশ সেটআপ
এই কোডল্যাব চালানোর জন্য আপনার একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে যাতে বিলিং সক্ষম থাকে৷ একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।
ক্লাউড শেল শুরু করুন
এই ল্যাবে আপনি একটি ক্লাউড শেল সেশনে কাজ করতে যাচ্ছেন, যা Google-এর ক্লাউডে চলমান একটি ভার্চুয়াল মেশিন দ্বারা হোস্ট করা একটি কমান্ড ইন্টারপ্রেটার। আপনি আপনার নিজের কম্পিউটারে স্থানীয়ভাবে এই বিভাগটি সহজেই চালাতে পারেন, কিন্তু ক্লাউড শেল ব্যবহার করে প্রত্যেককে একটি সামঞ্জস্যপূর্ণ পরিবেশে একটি পুনরুত্পাদনযোগ্য অভিজ্ঞতার অ্যাক্সেস দেয়। ল্যাবের পরে, আপনার নিজের কম্পিউটারে এই বিভাগটি পুনরায় চেষ্টা করার জন্য আপনাকে স্বাগত জানাই৷
ক্লাউড শেল সক্রিয় করুন
ক্লাউড কনসোলের উপরের ডানদিকে, ক্লাউড শেল সক্রিয় করতে নীচের বোতামে ক্লিক করুন:
আপনি যদি আগে কখনও ক্লাউড শেল চালু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার 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
এপিআই সক্ষম করুন
পরবর্তী ধাপে, আপনি দেখতে পাবেন যে এই পরিষেবাগুলি কোথায় প্রয়োজন (এবং কেন), তবে আপাতত, আপনার প্রকল্পটিকে কম্পিউট ইঞ্জিন, কন্টেইনার রেজিস্ট্রি এবং ভার্টেক্স এআই পরিষেবাগুলিতে অ্যাক্সেস দেওয়ার জন্য এই কমান্ডটি চালান:
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
পরবর্তীতে আমরা এই বালতিতে আমাদের কম্পিউট পরিষেবা অ্যাকাউন্ট অ্যাক্সেস দেব। এটি নিশ্চিত করবে যে ভার্টেক্স পাইপলাইনগুলির কাছে এই বালতিতে ফাইলগুলি লেখার প্রয়োজনীয় অনুমতি রয়েছে৷ এই অনুমতি যোগ করতে নিম্নলিখিত কমান্ড চালান:
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 ছাড়া টেনসরফ্লো এন্টারপ্রাইজ 2.3 (এলটিএস সহ) ইনস্ট্যান্স টাইপ নির্বাচন করুন:
ডিফল্ট বিকল্পগুলি ব্যবহার করুন এবং তারপরে তৈরি করুন ক্লিক করুন।
আপনার নোটবুক খুলুন
একবার উদাহরণ তৈরি হয়ে গেলে, JupyterLab খুলুন নির্বাচন করুন:
4. ভার্টেক্স পাইপলাইন সেটআপ
ভার্টেক্স পাইপলাইনগুলি ব্যবহার করার জন্য আমাদের কিছু অতিরিক্ত লাইব্রেরি ইনস্টল করতে হবে:
- কুবেফ্লো পাইপলাইনস : এটি সেই SDK যা আমরা আমাদের পাইপলাইন তৈরি করতে ব্যবহার করব। ভার্টেক্স পাইপলাইন কুবেফ্লো পাইপলাইন বা টিএফএক্স উভয়ের সাথে নির্মিত চলমান পাইপলাইনগুলিকে সমর্থন করে।
- 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/
ফর্ম্যাটে হবে
5. কাস্টম উপাদান সহ একটি 3-পদক্ষেপ পাইপলাইন তৈরি করা
এই ল্যাবের ফোকাস পাইপলাইন রান থেকে মেটাডেটা বোঝার উপর। এটি করার জন্য, ভার্টেক্স পাইপলাইনে চালানোর জন্য আমাদের একটি পাইপলাইন প্রয়োজন, যেখান থেকে আমরা শুরু করব। এখানে আমরা নিম্নলিখিত কাস্টম উপাদানগুলির সাথে একটি 3-পদক্ষেপ পাইপলাইন সংজ্ঞায়িত করব:
-
get_dataframe
: একটি BigQuery টেবিল থেকে ডেটা পুনরুদ্ধার করুন এবং এটি একটি পান্ডাস ডেটাফ্রেমে রূপান্তর করুন -
train_sklearn_model
: কিছু মেট্রিক্স সহ একটি স্কিট লার্ন মডেল প্রশিক্ষণ ও রপ্তানি করতে পান্ডাস ডেটাফ্রেম ব্যবহার করুন -
deploy_model
: রপ্তানিকৃত স্কিট লার্ন মডেলটিকে ভার্টেক্স এআই-এর একটি শেষ পয়েন্টে স্থাপন করুন
এই পাইপলাইনে, আমরা UCI মেশিন লার্নিং ড্রাই বিন্স ডেটাসেট ব্যবহার করব, থেকে: KOKLU, M. এবং OZKAN, IA, (2020), "কম্পিউটার ভিশন এবং মেশিন লার্নিং টেকনিক ব্যবহার করে শুকনো মটরশুটির মাল্টিক্লাস ক্লাসিফিকেশন।" কৃষিতে কম্পিউটার এবং ইলেকট্রনিক্সে, 174, 105507. DOI ।
এটি একটি টেবুলার ডেটাসেট, এবং আমাদের পাইপলাইনে আমরা ডেটাসেটটিকে প্রশিক্ষণ, মূল্যায়ন এবং একটি স্কিট-লার্ন মডেল স্থাপন করতে ব্যবহার করব যা মটরশুটিগুলিকে তাদের বৈশিষ্ট্যের উপর ভিত্তি করে 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 থেকে আমাদের ডেটা একটি Pandas DataFrame-এ ডাউনলোড করতে BigQuery Python ক্লায়েন্ট লাইব্রেরি ব্যবহার করে এবং তারপর একটি CSV ফাইল হিসাবে সেই ডেটার একটি আউটপুট আর্টিফ্যাক্ট তৈরি করে৷ এটি আমাদের পরবর্তী উপাদানে ইনপুট হিসাবে পাস করা হবে
একটি স্কিট-লার্ন মডেল প্রশিক্ষণের জন্য একটি উপাদান তৈরি করুন
এই উপাদানটিতে আমরা পূর্বে তৈরি করা CSV নেব এবং একটি 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
এখানে আমরা ভর্টেক্স 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
আমরা প্রশিক্ষণ ডেটার জন্য ব্যবহার করতে চাই। এই পাইপলাইন চালানোর জন্য মটরশুটি ডেটাসেটের একটি ছোট সংস্করণ ব্যবহার করা হবে:
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 কনসোলে প্রতিটি পাইপলাইন দেখার জন্য একটি লিঙ্ক দেখতে পাবেন। আপনার পাইপলাইনে আরও বিশদ দেখতে সেই লিঙ্কটি খুলুন:
যখন এটি সম্পূর্ণ হয় (এই পাইপলাইনটি প্রতি রানে প্রায় 10-15 মিনিট সময় নেয়), আপনি এইরকম কিছু দেখতে পাবেন:
এখন আপনার কাছে দুটি সম্পূর্ণ পাইপলাইন রান আছে, আপনি পাইপলাইনের শিল্পকর্ম, মেট্রিক্স এবং বংশের উপর ঘনিষ্ঠভাবে নজর দিতে প্রস্তুত।
6. পাইপলাইন শিল্পকর্ম এবং বংশ বোঝা
আপনার পাইপলাইন গ্রাফে, আপনি প্রতিটি ধাপের পরে ছোট বাক্সগুলি লক্ষ্য করবেন। সেগুলি হ'ল শিল্পকর্ম , বা পাইপলাইন পদক্ষেপ থেকে উত্পন্ন আউটপুট। অনেক ধরনের নিদর্শন আছে। এই নির্দিষ্ট পাইপলাইনে আমাদের কাছে ডেটাসেট, মেট্রিক্স, মডেল এবং এন্ডপয়েন্ট আর্টিফ্যাক্ট রয়েছে। প্রতিটি সম্পর্কে আরও বিশদ দেখতে UI এর শীর্ষে প্রসারিত শিল্পকর্ম স্লাইডারে ক্লিক করুন:
একটি আর্টিফ্যাক্টে ক্লিক করা আপনাকে এটির URI সহ আরও বিশদ বিবরণ দেখাবে। উদাহরণস্বরূপ, vertex_endpoint আর্টিফ্যাক্টে ক্লিক করা আপনাকে URI দেখাবে যেখানে আপনি আপনার Vertex AI কনসোলে সেই মোতায়েন করা শেষ পয়েন্টটি খুঁজে পেতে পারেন:
একটি Metrics
আর্টিফ্যাক্ট আপনাকে একটি নির্দিষ্ট পাইপলাইন ধাপের সাথে যুক্ত কাস্টম মেট্রিক্স পাস করতে দেয়। আমাদের পাইপলাইনের sklearn_train
কম্পোনেন্টে, আমরা আমাদের মডেলের নির্ভুলতা, ফ্রেমওয়ার্ক এবং ডেটাসেটের আকারের মেট্রিক্স লগ করেছি। সেই বিবরণগুলি দেখতে মেট্রিক্স আর্টিফ্যাক্টটিতে ক্লিক করুন:
প্রতিটি আর্টিফ্যাক্টের Lineage থাকে, যা এটির সাথে সংযুক্ত অন্যান্য শিল্পকর্মের বর্ণনা দেয়। আপনার পাইপলাইনের vertex_endpoint আর্টিফ্যাক্টে আবার ক্লিক করুন এবং তারপর ভিউ লাইনেজ বোতামে ক্লিক করুন:
এটি একটি নতুন ট্যাব খুলবে যেখানে আপনি আপনার নির্বাচিত একটির সাথে সংযুক্ত সমস্ত শিল্পকর্ম দেখতে পাবেন৷ আপনার বংশের গ্রাফটি এরকম কিছু দেখাবে:
এটি আমাদের এই শেষ পয়েন্টের সাথে যুক্ত মডেল, মেট্রিক্স এবং ডেটাসেট দেখায়। কেন এই দরকারী? আপনার কাছে একাধিক এন্ডপয়েন্টে মোতায়েন করা একটি মডেল থাকতে পারে, অথবা আপনি যে এন্ডপয়েন্টটি দেখছেন সেখানে মোতায়েন করা মডেলটিকে প্রশিক্ষণ দিতে ব্যবহৃত নির্দিষ্ট ডেটাসেটটি জানতে হবে। বংশের গ্রাফটি আপনাকে আপনার এমএল সিস্টেমের বাকি অংশের প্রেক্ষাপটে প্রতিটি নিদর্শন বুঝতে সাহায্য করে। আপনি প্রোগ্রাম্যাটিকভাবে বংশানুক্রমও অ্যাক্সেস করতে পারেন, যেমনটি আমরা এই কোডল্যাবে পরে দেখব।
7. পাইপলাইন রান তুলনা
একটি একক পাইপলাইন একাধিকবার চালানোর সম্ভাবনা রয়েছে, হতে পারে বিভিন্ন ইনপুট পরামিতি, নতুন ডেটা বা আপনার দল জুড়ে লোকেদের দ্বারা। পাইপলাইন রানের ট্র্যাক রাখতে, বিভিন্ন মেট্রিক্স অনুযায়ী তাদের তুলনা করার একটি উপায় থাকা সহজ হবে। এই বিভাগে আমরা রান তুলনা করার দুটি উপায় অন্বেষণ করব।
পাইপলাইন UI এ রানের তুলনা করা হচ্ছে
ক্লাউড কনসোলে, আপনার পাইপলাইন ড্যাশবোর্ডে নেভিগেট করুন। এটি আপনার চালানো প্রতিটি পাইপলাইনের একটি ওভারভিউ প্রদান করে। শেষ দুটি রান চেক করুন এবং তারপরে উপরের তুলনা বোতামটি ক্লিক করুন:
এটি আমাদের এমন একটি পৃষ্ঠায় নিয়ে যায় যেখানে আমরা নির্বাচিত প্রতিটি রানের জন্য ইনপুট প্যারামিটার এবং মেট্রিক্স তুলনা করতে পারি। এই দুটি রানের জন্য, বিভিন্ন BigQuery সারণী, ডেটাসেটের আকার এবং নির্ভুলতার মান লক্ষ্য করুন:
আপনি এই UI কার্যকারিতাটি দুইটির বেশি রানের তুলনা করতে এবং এমনকি বিভিন্ন পাইপলাইন থেকে চালানোর জন্য ব্যবহার করতে পারেন।
Vertex AI SDK-এর সাথে রানের তুলনা করা হচ্ছে
অনেক পাইপলাইন এক্সিকিউশনের সাথে, আপনি মেট্রিক্সের বিশদগুলি আরও গভীরে খনন করতে এবং ভিজ্যুয়ালাইজেশন তৈরি করতে প্রোগ্রামগতভাবে এই তুলনা মেট্রিকগুলি পেতে একটি উপায় চাইতে পারেন।
রান মেটাডেটা অ্যাক্সেস করতে আপনি aiplatform.get_pipeline_df()
পদ্ধতি ব্যবহার করতে পারেন। এখানে, আমরা একই পাইপলাইনের শেষ দুটি রানের জন্য মেটাডেটা পাব এবং এটি একটি পান্ডাস ডেটাফ্রেমে লোড করব। এখানে pipeline
প্যারামিটারটি আমাদের পাইপলাইনের সংজ্ঞায় আমাদের পাইপলাইনের নামটিকে বোঝায়:
df = aiplatform.get_pipeline_df(pipeline="mlmd-pipeline")
df
আপনি যখন DataFrame প্রিন্ট করবেন, তখন আপনি এরকম কিছু দেখতে পাবেন:
আমরা এখানে মাত্র দুবার আমাদের পাইপলাইন এক্সিকিউট করেছি, কিন্তু আপনি কল্পনা করতে পারেন আরো এক্সিকিউশনের সাথে আপনার কত মেট্রিক থাকবে। এর পরে, আমরা আমাদের মডেলের নির্ভুলতা এবং প্রশিক্ষণের জন্য ব্যবহৃত ডেটার পরিমাণের মধ্যে সম্পর্ক দেখতে matplotlib-এর সাথে একটি কাস্টম ভিজ্যুয়ালাইজেশন তৈরি করব।
একটি নতুন নোটবুক সেলে নিম্নলিখিতটি চালান:
plt.plot(df["metric.dataset_size"], df["metric.accuracy"],label="Accuracy")
plt.title("Accuracy and dataset size")
plt.legend(loc=4)
plt.show()
আপনি এই মত কিছু দেখতে হবে:
8. পাইপলাইন মেট্রিক্স জিজ্ঞাসা করা
সমস্ত পাইপলাইন মেট্রিক্সের একটি ডেটাফ্রেম পাওয়ার পাশাপাশি, আপনি আপনার 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
প্রতিক্রিয়াতে প্রতিটি মডেলের জন্য সংশ্লিষ্ট মেটাডেটা সহ আপনার প্রকল্পের প্রতিটি মডেলের আর্টিফ্যাক্টের জন্য একটি পুনরাবৃত্তিযোগ্য বস্তু রয়েছে।
বস্তু ফিল্টার করা এবং একটি ডেটাফ্রেমে প্রদর্শন করা
আমরা আরো সহজে ফলে আর্টিফ্যাক্ট ক্যোয়ারী কল্পনা করতে পারলে এটি সুবিধাজনক হবে। এর পরে, আসুন 10 আগস্ট, 2021-এর পরে তৈরি করা সমস্ত শিল্পকর্ম LIVE
স্টেটের সাথে নিয়ে আসি। আমরা এই অনুরোধটি চালানোর পরে, আমরা একটি পান্ডাস ডেটাফ্রেমে ফলাফলগুলি প্রদর্শন করব। প্রথমে, অনুরোধটি চালান:
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 ব্যবহার করতে হয়:
- একটি ML পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন যা Vertex AI-তে একটি ডেটাসেট তৈরি করে এবং সেই ডেটাসেটে একটি কাস্টম স্কিট-লার্ন মডেল ট্রেনিং ও স্থাপন করে
- কাস্টম পাইপলাইন উপাদানগুলি লিখুন যা আর্টিফ্যাক্ট এবং মেটাডেটা তৈরি করে
- ক্লাউড কনসোলে এবং প্রোগ্রামগতভাবে, ভার্টেক্স পাইপলাইনগুলির তুলনা করুন
- পাইপলাইন-উত্পন্ন শিল্পকর্মের জন্য বংশের সন্ধান করুন
- আপনার পাইপলাইন চালানোর মেটাডেটা জিজ্ঞাসা করুন
ভার্টেক্সের বিভিন্ন অংশ সম্পর্কে আরও জানতে, ডকুমেন্টেশন দেখুন।
9. পরিচ্ছন্নতা
যাতে আপনাকে চার্জ না করা হয়, এটি সুপারিশ করা হয় যে আপনি এই ল্যাব জুড়ে তৈরি সংস্থানগুলি মুছে ফেলুন৷
আপনার নোটবুকের উদাহরণ বন্ধ করুন বা মুছুন
আপনি যদি এই ল্যাবে তৈরি করা নোটবুকটি ব্যবহার চালিয়ে যেতে চান, তাহলে এটি ব্যবহার না করার সময় এটি বন্ধ করার পরামর্শ দেওয়া হয়। আপনার ক্লাউড কনসোলের নোটবুক UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপরে থামুন নির্বাচন করুন। আপনি যদি দৃষ্টান্তটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে মুছুন নির্বাচন করুন:
আপনার ভার্টেক্স এআই এন্ডপয়েন্ট মুছুন
আপনার মোতায়েন করা এন্ডপয়েন্ট মুছতে, আপনার Vertex AI কনসোলের এন্ডপয়েন্ট বিভাগে নেভিগেট করুন এবং মুছুন আইকনে ক্লিক করুন:
আপনার ক্লাউড স্টোরেজ বালতি মুছুন
আপনার ক্লাউড কনসোলে নেভিগেশন মেনু ব্যবহার করে স্টোরেজ বাকেট মুছে ফেলতে, স্টোরেজ ব্রাউজ করুন, আপনার বালতি নির্বাচন করুন এবং মুছুন ক্লিক করুন: