ভার্টেক্স পাইপলাইনের ভূমিকা

1. ওভারভিউ

এই ল্যাবে, আপনি শিখবেন কিভাবে Vertex Pipelines দিয়ে ML পাইপলাইন তৈরি এবং চালাতে হয়।

আপনি কি শিখুন

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

  • স্কেলযোগ্য ML পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন
  • একটি 3-পদক্ষেপ ইন্ট্রো পাইপলাইন তৈরি করুন এবং চালান যা পাঠ্য ইনপুট নেয়
  • একটি পাইপলাইন তৈরি করুন এবং চালান যা একটি AutoML শ্রেণীবিভাগ মডেলকে প্রশিক্ষণ দেয়, মূল্যায়ন করে এবং স্থাপন করে
  • google_cloud_pipeline_components লাইব্রেরির মাধ্যমে সরবরাহ করা Vertex AI পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য পূর্ব-নির্মিত উপাদানগুলি ব্যবহার করুন
  • ক্লাউড শিডিউলারের সাথে একটি পাইপলাইন কাজের সময় নির্ধারণ করুন

Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $25

2. ভার্টেক্স এআই-এর ভূমিকা

এই ল্যাবটি Google ক্লাউডে উপলব্ধ নতুন AI পণ্য অফার ব্যবহার করে। Vertex AI Google ক্লাউড জুড়ে ML অফারগুলিকে একটি নিরবচ্ছিন্ন বিকাশের অভিজ্ঞতায় সংহত করে৷ পূর্বে, অটোএমএল এবং কাস্টম মডেলগুলির সাথে প্রশিক্ষিত মডেলগুলি পৃথক পরিষেবার মাধ্যমে অ্যাক্সেসযোগ্য ছিল। নতুন অফারটি অন্যান্য নতুন পণ্যের সাথে একটি একক API-এ উভয়কে একত্রিত করে। আপনি বিদ্যমান প্রকল্পগুলিকে Vertex AI-তে স্থানান্তর করতে পারেন।

মডেল প্রশিক্ষণ এবং স্থাপনার পরিষেবা ছাড়াও, Vertex AI-তে MLOps-এর বিভিন্ন পণ্য রয়েছে, যার মধ্যে রয়েছে Vertex Pipelines (এই ল্যাবের ফোকাস), মডেল মনিটরিং, ফিচার স্টোর এবং আরও অনেক কিছু। আপনি নীচের চিত্রে সমস্ত Vertex AI পণ্য অফার দেখতে পারেন।

ভার্টেক্স পণ্য ওভারভিউ

আপনার কোন প্রতিক্রিয়া থাকলে, অনুগ্রহ করে সমর্থন পৃষ্ঠাটি দেখুন।

কেন ML পাইপলাইন দরকারী?

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

tl;dr : পাইপলাইনগুলি আপনাকে আপনার এমএল ওয়ার্কফ্লো স্বয়ংক্রিয় এবং পুনরুত্পাদন করতে সহায়তা করে।

3. মেঘ পরিবেশ সেটআপ

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

ধাপ 1: ক্লাউড শেল শুরু করুন

এই ল্যাবে আপনি একটি ক্লাউড শেল সেশনে কাজ করতে যাচ্ছেন, যা Google-এর ক্লাউডে চলমান একটি ভার্চুয়াল মেশিন দ্বারা হোস্ট করা একটি কমান্ড ইন্টারপ্রেটার। আপনি আপনার নিজের কম্পিউটারে স্থানীয়ভাবে এই বিভাগটি সহজেই চালাতে পারেন, কিন্তু ক্লাউড শেল ব্যবহার করে প্রত্যেককে একটি সামঞ্জস্যপূর্ণ পরিবেশে একটি পুনরুত্পাদনযোগ্য অভিজ্ঞতার অ্যাক্সেস দেয়। ল্যাবের পরে, আপনার নিজের কম্পিউটারে এই বিভাগটি পুনরায় চেষ্টা করার জন্য আপনাকে স্বাগত জানাই৷

ক্লাউড শেল অনুমোদন করুন

ক্লাউড শেল সক্রিয় করুন

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

ক্লাউড শেল সক্রিয় করুন

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

ক্লাউড শেল সেটআপ

ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷

ক্লাউড শেল শুরু

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যে আপনার প্রকল্প আইডিতে সেট করা আছে।

আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

gcloud auth list

কমান্ড আউটপুটে আপনার এরকম কিছু দেখতে হবে:

ক্লাউড শেল আউটপুট

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

ধাপ 2: APIs সক্ষম করুন

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

gcloud services enable compute.googleapis.com         \
                       containerregistry.googleapis.com  \
                       aiplatform.googleapis.com  \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com

এটির অনুরূপ একটি সফল বার্তা তৈরি করা উচিত:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

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

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

ধাপ 4: একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন

আপনার ক্লাউড কনসোলের ভার্টেক্স এআই বিভাগ থেকে, ওয়ার্কবেঞ্চে ক্লিক করুন:

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

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

নতুন নোটবুক তৈরি করুন

তারপর GPU ছাড়া টেনসরফ্লো এন্টারপ্রাইজ 2.3 (এলটিএস সহ) ইনস্ট্যান্স টাইপ নির্বাচন করুন:

TFE উদাহরণ

ডিফল্ট বিকল্পগুলি ব্যবহার করুন এবং তারপরে তৈরি করুন ক্লিক করুন।

ধাপ 5: আপনার নোটবুক খুলুন

একবার উদাহরণ তৈরি হয়ে গেলে, JupyterLab খুলুন নির্বাচন করুন:

নোটবুক খুলুন

4. ভার্টেক্স পাইপলাইন সেটআপ

ভার্টেক্স পাইপলাইনগুলি ব্যবহার করার জন্য আমাদের কিছু অতিরিক্ত লাইব্রেরি ইনস্টল করতে হবে:

  • কুবেফ্লো পাইপলাইনস : এটি সেই SDK যা আমরা আমাদের পাইপলাইন তৈরি করতে ব্যবহার করব। ভার্টেক্স পাইপলাইন কুবেফ্লো পাইপলাইন বা টিএফএক্স উভয়ের সাথে নির্মিত চলমান পাইপলাইনগুলিকে সমর্থন করে।
  • Google ক্লাউড পাইপলাইন উপাদান : এই লাইব্রেরিটি পূর্ব-নির্মিত উপাদানগুলি সরবরাহ করে যা আপনার পাইপলাইনের পদক্ষেপগুলি থেকে Vertex AI পরিষেবাগুলির সাথে যোগাযোগ করা সহজ করে তোলে৷

ধাপ 1: পাইথন নোটবুক তৈরি করুন এবং লাইব্রেরি ইনস্টল করুন

প্রথমে, আপনার নোটবুক ইনস্ট্যান্সের লঞ্চার মেনু থেকে, পাইথন 3 নির্বাচন করে একটি নোটবুক তৈরি করুন:

Python3 নোটবুক তৈরি করুন

আপনি আপনার নোটবুক ইনস্ট্যান্সের উপরের বাম দিকে + সাইন-এ ক্লিক করে লঞ্চার মেনু অ্যাক্সেস করতে পারেন।

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

USER_FLAG = "--user"

তারপর আপনার নোটবুক থেকে নিম্নলিখিত চালান:

!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0

এই প্যাকেজগুলি ইনস্টল করার পরে আপনাকে কার্নেলটি পুনরায় চালু করতে হবে:

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__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"

ধাপ 2: আপনার প্রকল্প আইডি এবং বালতি সেট করুন

এই ল্যাব জুড়ে আপনি আপনার ক্লাউড প্রজেক্ট আইডি এবং আপনার আগে তৈরি করা বালতি উল্লেখ করবেন। পরবর্তী আমরা তাদের প্রত্যেকের জন্য ভেরিয়েবল তৈরি করব।

আপনি যদি আপনার প্রকল্প আইডি না জানেন তবে আপনি নিম্নলিখিতগুলি চালিয়ে এটি পেতে সক্ষম হতে পারেন:

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"

ধাপ 3: লাইব্রেরি আমদানি করুন

এই কোডল্যাব জুড়ে আমরা যে লাইব্রেরিগুলি ব্যবহার করব তা আমদানি করতে নিম্নলিখিত যোগ করুন:

import kfp

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import component, pipeline, Artifact, ClassificationMetrics, Input, Output, Model, Metrics

from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip
from typing import NamedTuple

ধাপ 4: ধ্রুবক সংজ্ঞায়িত করুন

আমাদের পাইপলাইন তৈরি করার আগে আমাদের যা করতে হবে তা হল কিছু ধ্রুবক ভেরিয়েবল সংজ্ঞায়িত করা। 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. আপনার প্রথম পাইপলাইন তৈরি করা

Vertex Pipelines কিভাবে কাজ করে তার সাথে পরিচিত হওয়ার জন্য, আমরা প্রথমে KFP SDK ব্যবহার করে একটি ছোট পাইপলাইন তৈরি করব। এই পাইপলাইনটি ML সম্পর্কিত কিছু করে না (চিন্তা করবেন না, আমরা সেখানে যাব!), আমরা আপনাকে শেখানোর জন্য এটি ব্যবহার করছি:

  • কিভাবে KFP SDK-তে কাস্টম উপাদান তৈরি করবেন
  • ভার্টেক্স পাইপলাইনে কীভাবে একটি পাইপলাইন চালানো এবং নিরীক্ষণ করা যায়

আমরা একটি পাইপলাইন তৈরি করব যা দুটি আউটপুট ব্যবহার করে একটি বাক্য প্রিন্ট করে: একটি পণ্যের নাম এবং একটি ইমোজি বিবরণ৷ এই পাইপলাইনে তিনটি উপাদান থাকবে:

  • product_name : এই উপাদানটি ইনপুট হিসাবে একটি পণ্যের নাম (বা আপনি সত্যিই চান এমন কোনও বিশেষ্য) নেবে এবং সেই স্ট্রিংটিকে আউটপুট হিসাবে ফিরিয়ে দেবে
  • emoji : এই উপাদানটি একটি ইমোজির পাঠ্য বিবরণ নেবে এবং এটিকে একটি ইমোজিতে রূপান্তর করবে। উদাহরণস্বরূপ, ✨ এর পাঠ্য কোড হল "sparkles"। এই উপাদানটি একটি ইমোজি লাইব্রেরি ব্যবহার করে আপনাকে দেখায় কিভাবে আপনার পাইপলাইনে বাহ্যিক নির্ভরতা পরিচালনা করতে হয়
  • build_sentence : এই চূড়ান্ত উপাদানটি ইমোজি ব্যবহার করে এমন একটি বাক্য তৈরি করতে আগের দুটির আউটপুট গ্রাস করবে। উদাহরণস্বরূপ, ফলস্বরূপ আউটপুট হতে পারে "Vertex Pipelines is ✨"।

এর কোডিং শুরু করা যাক!

ধাপ 1: একটি পাইথন ফাংশন ভিত্তিক উপাদান তৈরি করুন

KFP SDK ব্যবহার করে, আমরা পাইথন ফাংশনের উপর ভিত্তি করে উপাদান তৈরি করতে পারি। আমরা আমাদের প্রথম পাইপলাইনের 3টি উপাদানের জন্য এটি ব্যবহার করব। আমরা প্রথমে product_name কম্পোনেন্ট তৈরি করব, যা ইনপুট হিসাবে একটি স্ট্রিং নেয় এবং সেই স্ট্রিংটি ফেরত দেয়। আপনার নোটবুকে নিম্নলিখিত যোগ করুন:

@component(base_image="python:3.9", output_component_file="first-component.yaml")
def product_name(text: str) -> str:
    return text

আসুন এখানে সিনট্যাক্সটি ঘনিষ্ঠভাবে দেখি:

  • @component ডেকোরেটর এই ফাংশনটিকে একটি কম্পোনেন্টে কম্পাইল করে যখন পাইপলাইন চালানো হয়। আপনি যখনই একটি কাস্টম উপাদান লিখবেন তখন আপনি এটি ব্যবহার করবেন।
  • base_image প্যারামিটারটি এই উপাদানটি যে ধারক চিত্রটি ব্যবহার করবে তা নির্দিষ্ট করে।
  • output_component_file প্যারামিটারটি ঐচ্ছিক, এবং কম্পাইল করা উপাদান লিখতে yaml ফাইলটি নির্দিষ্ট করে। সেলটি চালানোর পরে আপনি সেই ফাইলটি আপনার নোটবুকের উদাহরণে লেখা দেখতে পাবেন। আপনি যদি এই উপাদানটি কারও সাথে ভাগ করতে চান তবে আপনি তাদের তৈরি করা yaml ফাইলটি পাঠাতে পারেন এবং তাদের নিম্নলিখিতগুলির সাথে এটি লোড করতে পারেন:
product_name_component = kfp.components.load_component_from_file('./first-component.yaml')
  • ফাংশনের সংজ্ঞার পরে -> str এই উপাদানটির জন্য আউটপুট প্রকার নির্দিষ্ট করে।

ধাপ 2: দুটি অতিরিক্ত উপাদান তৈরি করুন

আমাদের পাইপলাইন সম্পূর্ণ করতে, আমরা আরও দুটি উপাদান তৈরি করব। প্রথমটি আমরা সংজ্ঞায়িত করব ইনপুট হিসাবে একটি স্ট্রিং নেয় এবং যদি একটি থাকে তবে এই স্ট্রিংটিকে তার সংশ্লিষ্ট ইমোজিতে রূপান্তর করে। এটি পাস করা ইনপুট পাঠ্যের সাথে একটি টিপল ফেরত দেয়, এবং ফলস্বরূপ ইমোজি:

@component(packages_to_install=["emoji"])
def emoji(
    text: str,
) -> NamedTuple(
    "Outputs",
    [
        ("emoji_text", str),  # Return parameters
        ("emoji", str),
    ],
):
    import emoji

    emoji_text = text
    emoji_str = emoji.emojize(':' + emoji_text + ':', language='alias')
    print("output one: {}; output_two: {}".format(emoji_text, emoji_str))
    return (emoji_text, emoji_str)

এই উপাদানটি আমাদের আগের তুলনায় একটু বেশি জটিল। নতুন কি আছে তা জেনে নেওয়া যাক:

  • packages_to_install পরামিতি উপাদানটিকে এই ধারকটির জন্য কোনো বহিরাগত লাইব্রেরি নির্ভরতা বলে। এই ক্ষেত্রে, আমরা ইমোজি নামক একটি লাইব্রেরি ব্যবহার করছি।
  • এই উপাদানটি Outputs নামক একটি NamedTuple প্রদান করে। লক্ষ্য করুন যে এই টিপলের প্রতিটি স্ট্রিংয়ের কী রয়েছে: emoji_text এবং emoji । আউটপুট অ্যাক্সেস করার জন্য আমরা আমাদের পরবর্তী উপাদানগুলিতে এগুলি ব্যবহার করব।

এই পাইপলাইনের চূড়ান্ত উপাদানটি প্রথম দুটির আউটপুট গ্রাস করবে এবং একটি স্ট্রিং ফেরত দিতে তাদের একত্রিত করবে:

@component
def build_sentence(
    product: str,
    emoji: str,
    emojitext: str
) -> str:
    print("We completed the pipeline, hooray!")
    end_str = product + " is "
    if len(emoji) > 0:
        end_str += emoji
    else:
        end_str += emojitext
    return(end_str)

আপনি হয়তো ভাবছেন: কিভাবে এই উপাদানটি আপনার সংজ্ঞায়িত পূর্ববর্তী পদক্ষেপগুলি থেকে আউটপুট ব্যবহার করতে জানে? ভালো প্রশ্ন! আমরা পরের ধাপে এটি সব একসাথে বেঁধে দেব।

ধাপ 3: উপাদানগুলিকে একটি পাইপলাইনে একত্রিত করা

আমরা উপরে সংজ্ঞায়িত উপাদানের সংজ্ঞাগুলি কারখানার ফাংশন তৈরি করেছে যা ধাপ তৈরি করতে একটি পাইপলাইন সংজ্ঞায় ব্যবহার করা যেতে পারে। একটি পাইপলাইন সেট আপ করতে, @pipeline ডেকোরেটর ব্যবহার করুন, পাইপলাইনের একটি নাম এবং বিবরণ দিন এবং মূল পথটি প্রদান করুন যেখানে আপনার পাইপলাইনের শিল্পকর্মগুলি লেখা উচিত৷ আর্টিফ্যাক্ট দ্বারা, আমরা আপনার পাইপলাইন দ্বারা উত্পন্ন কোনো আউটপুট ফাইল মানে। এই ইন্ট্রো পাইপলাইন কোনো উৎপন্ন করে না, কিন্তু আমাদের পরবর্তী পাইপলাইন হবে।

কোডের পরবর্তী ব্লকে আমরা একটি intro_pipeline ফাংশন সংজ্ঞায়িত করি। এখানেই আমরা আমাদের প্রাথমিক পাইপলাইন ধাপে ইনপুটগুলি নির্দিষ্ট করি এবং ধাপগুলি কীভাবে একে অপরের সাথে সংযুক্ত হয়:

  • product_task ইনপুট হিসাবে একটি পণ্যের নাম নেয়। এখানে আমরা "ভারটেক্স পাইপলাইন" পাস করছি কিন্তু আপনি যা চান তা পরিবর্তন করতে পারেন।
  • emoji_task ইনপুট হিসাবে একটি ইমোজির জন্য পাঠ্য কোড নেয়। এছাড়াও আপনি যা চান তা পরিবর্তন করতে পারেন। যেমন, "পার্টি_ফেস" বলতে 🥳 ইমোজি বোঝায়। মনে রাখবেন যে যেহেতু এই এবং product_task উপাদান উভয়েরই কোনো ধাপ নেই যা তাদের মধ্যে ইনপুট ফিড করে, আমরা যখন আমাদের পাইপলাইন সংজ্ঞায়িত করি তখন আমরা ম্যানুয়ালি এইগুলির জন্য ইনপুট নির্দিষ্ট করি।
  • আমাদের পাইপলাইনের শেষ ধাপ - consumer_task তিনটি ইনপুট পরামিতি রয়েছে:
    • product_task আউটপুট। যেহেতু এই ধাপটি শুধুমাত্র একটি আউটপুট তৈরি করে, তাই আমরা এটিকে product_task.output এর মাধ্যমে উল্লেখ করতে পারি।
    • আমাদের emoji_task ধাপের emoji আউটপুট। উপরে সংজ্ঞায়িত emoji উপাদান দেখুন যেখানে আমরা আউটপুট প্যারামিটারের নাম দিয়েছি।
    • একইভাবে, emoji_text emoji উপাদান থেকে আউটপুট নামে। যদি আমাদের পাইপলাইনে টেক্সট পাস করা হয় যেটি ইমোজির সাথে সঙ্গতিপূর্ণ নয়, তাহলে এটি একটি বাক্য গঠন করতে এই টেক্সট ব্যবহার করবে।
@pipeline(
    name="hello-world",
    description="An intro pipeline",
    pipeline_root=PIPELINE_ROOT,
)

# You can change the `text` and `emoji_str` parameters here to update the pipeline output
def intro_pipeline(text: str = "Vertex Pipelines", emoji_str: str = "sparkles"):
    product_task = product_name(text)
    emoji_task = emoji(emoji_str)
    consumer_task = build_sentence(
        product_task.output,
        emoji_task.outputs["emoji"],
        emoji_task.outputs["emoji_text"],
    )

ধাপ 4: কম্পাইল করুন এবং পাইপলাইন চালান

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

compiler.Compiler().compile(
    pipeline_func=intro_pipeline, package_path="intro_pipeline_job.json"
)

পরবর্তী, একটি TIMESTAMP ভেরিয়েবল তৈরি করুন৷ আমরা আমাদের কাজের আইডিতে এটি ব্যবহার করব:

from datetime import datetime

TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")

তারপর আপনার পাইপলাইন কাজ সংজ্ঞায়িত করুন:

job = aiplatform.PipelineJob(
    display_name="hello-world-pipeline",
    template_path="intro_pipeline_job.json",
    job_id="hello-world-pipeline-{0}".format(TIMESTAMP),
    enable_caching=True
)

অবশেষে, একটি নতুন পাইপলাইন এক্সিকিউশন তৈরি করতে কাজ চালান:

job.submit()

এই সেলটি চালানোর পরে, আপনার কনসোলে চালানো পাইপলাইন দেখার জন্য একটি লিঙ্ক সহ লগগুলি দেখতে হবে:

পাইপলাইন কাজের লগ

সেই লিঙ্কে নেভিগেট করুন। সম্পূর্ণ হলে আপনার পাইপলাইন এইরকম হওয়া উচিত:

ইন্ট্রো পাইপলাইন সম্পন্ন হয়েছে

এই পাইপলাইনটি চালাতে সময় লাগবে ৫-৬ মিনিট । সম্পূর্ণ হলে, আপনি চূড়ান্ত আউটপুট দেখতে build-sentence উপাদানটিতে ক্লিক করতে পারেন:

ইন্ট্রো পাইপলাইন আউটপুট

এখন যেহেতু আপনি KFP SDK এবং Vertex পাইপলাইনগুলি কীভাবে কাজ করে তার সাথে পরিচিত, আপনি একটি পাইপলাইন তৈরি করতে প্রস্তুত যা অন্যান্য Vertex AI পরিষেবাগুলি ব্যবহার করে একটি ML মডেল তৈরি এবং স্থাপন করে৷ এর মধ্যে ডুব দেওয়া যাক!

6. এন্ড-টু-এন্ড ML পাইপলাইন তৈরি করা

আপনার প্রথম এমএল পাইপলাইন তৈরি করার সময় এসেছে। এই পাইপলাইনে, আমরা UCI মেশিন লার্নিং ড্রাই বিন্স ডেটাসেট ব্যবহার করব, থেকে: KOKLU, M. এবং OZKAN, IA, (2020), "কম্পিউটার ভিশন এবং মেশিন লার্নিং টেকনিক ব্যবহার করে শুকনো মটরশুটির মাল্টিক্লাস ক্লাসিফিকেশন।" কৃষিতে কম্পিউটার এবং ইলেকট্রনিক্সে, 174, 105507. DOI

এটি একটি টেবুলার ডেটাসেট, এবং আমাদের পাইপলাইনে আমরা একটি AutoML মডেলকে প্রশিক্ষণ, মূল্যায়ন এবং স্থাপন করতে ডেটাসেট ব্যবহার করব যা তাদের বৈশিষ্ট্যের উপর ভিত্তি করে 7 প্রকারের মধ্যে একটিতে মটরশুটি শ্রেণীবদ্ধ করে৷

এই পাইপলাইন হবে:

  • এ একটি ডেটাসেট তৈরি করুন
  • AutoML এর সাথে একটি সারণী শ্রেণীবিভাগ মডেল প্রশিক্ষিত করুন
  • এই মডেলে মূল্যায়ন মেট্রিক্স পান
  • মূল্যায়ন মেট্রিক্সের উপর ভিত্তি করে, ভার্টেক্স পাইপলাইনে শর্তসাপেক্ষ যুক্তি ব্যবহার করে মডেলটি স্থাপন করা হবে কিনা তা নির্ধারণ করুন
  • Vertex Prediction ব্যবহার করে মডেলটিকে একটি এন্ডপয়েন্টে স্থাপন করুন

রূপরেখা প্রতিটি ধাপ একটি উপাদান হবে. পাইপলাইনের বেশিরভাগ ধাপে আমরা আগে এই কোডল্যাবে আমদানি করা google_cloud_pipeline_components লাইব্রেরির মাধ্যমে Vertex AI পরিষেবার জন্য পূর্ব-নির্মিত উপাদান ব্যবহার করবে। এই বিভাগে, আমরা প্রথমে একটি কাস্টম উপাদান সংজ্ঞায়িত করব। তারপর, আমরা পূর্ব-নির্মিত উপাদানগুলি ব্যবহার করে পাইপলাইনের বাকি ধাপগুলিকে সংজ্ঞায়িত করব। পূর্ব-নির্মিত উপাদানগুলি মডেল প্রশিক্ষণ এবং স্থাপনার মতো Vertex AI পরিষেবাগুলি অ্যাক্সেস করা সহজ করে তোলে।

ধাপ 1: মডেল মূল্যায়নের জন্য একটি কাস্টম উপাদান

আমরা যে কাস্টম উপাদানটি সংজ্ঞায়িত করব তা মডেল প্রশিক্ষণ শেষ হয়ে গেলে আমাদের পাইপলাইনের শেষের দিকে ব্যবহার করা হবে। এই উপাদানটি কয়েকটি কাজ করবে:

  • প্রশিক্ষিত AutoML শ্রেণীবিভাগ মডেল থেকে মূল্যায়ন মেট্রিক্স পান
  • মেট্রিক্স পার্স করুন এবং ভার্টেক্স পাইপলাইন UI এ রেন্ডার করুন
  • মডেলটি স্থাপন করা উচিত কিনা তা নির্ধারণ করতে একটি থ্রেশহোল্ডের সাথে মেট্রিক্সের তুলনা করুন

আমরা কম্পোনেন্টটি সংজ্ঞায়িত করার আগে, এর ইনপুট এবং আউটপুট প্যারামিটারগুলি বুঝে নেওয়া যাক। ইনপুট হিসাবে, এই পাইপলাইনটি আমাদের ক্লাউড প্রকল্পে কিছু মেটাডেটা নেয়, ফলস্বরূপ প্রশিক্ষিত মডেল (আমরা এই উপাদানটি পরে সংজ্ঞায়িত করব), মডেলের মূল্যায়ন মেট্রিক্স এবং একটি thresholds_dict_strthresholds_dict_str হল এমন কিছু যা আমরা সংজ্ঞায়িত করব যখন আমরা আমাদের পাইপলাইন চালাই। এই শ্রেণীবিন্যাস মডেলের ক্ষেত্রে, এটি ROC বক্র মানের অধীনে এলাকা হবে যার জন্য আমাদের মডেলটি স্থাপন করা উচিত। উদাহরণস্বরূপ, যদি আমরা 0.95-এ পাস করি, তার মানে এই মেট্রিক 95%-এর উপরে হলেই আমরা আমাদের পাইপলাইনটি মডেল স্থাপন করতে চাই।

আমাদের মূল্যায়ন উপাদান মডেলটি স্থাপন করতে হবে কিনা তা নির্দেশ করে একটি স্ট্রিং প্রদান করে। এই কাস্টম উপাদান তৈরি করতে একটি নোটবুক কক্ষে নিম্নলিখিত যোগ করুন:

@component(
    base_image="gcr.io/deeplearning-platform-release/tf2-cpu.2-3:latest",
    output_component_file="tabular_eval_component.yaml",
    packages_to_install=["google-cloud-aiplatform"],
)
def classification_model_eval_metrics(
    project: str,
    location: str,  # "us-central1",
    api_endpoint: str,  # "us-central1-aiplatform.googleapis.com",
    thresholds_dict_str: str,
    model: Input[Artifact],
    metrics: Output[Metrics],
    metricsc: Output[ClassificationMetrics],
) -> NamedTuple("Outputs", [("dep_decision", str)]):  # Return parameter.

    import json
    import logging

    from google.cloud import aiplatform as aip

    # Fetch model eval info
    def get_eval_info(client, model_name):
        from google.protobuf.json_format import MessageToDict

        response = client.list_model_evaluations(parent=model_name)
        metrics_list = []
        metrics_string_list = []
        for evaluation in response:
            print("model_evaluation")
            print(" name:", evaluation.name)
            print(" metrics_schema_uri:", evaluation.metrics_schema_uri)
            metrics = MessageToDict(evaluation._pb.metrics)
            for metric in metrics.keys():
                logging.info("metric: %s, value: %s", metric, metrics[metric])
            metrics_str = json.dumps(metrics)
            metrics_list.append(metrics)
            metrics_string_list.append(metrics_str)

        return (
            evaluation.name,
            metrics_list,
            metrics_string_list,
        )

    # Use the given metrics threshold(s) to determine whether the model is
    # accurate enough to deploy.
    def classification_thresholds_check(metrics_dict, thresholds_dict):
        for k, v in thresholds_dict.items():
            logging.info("k {}, v {}".format(k, v))
            if k in ["auRoc", "auPrc"]:  # higher is better
                if metrics_dict[k] < v:  # if under threshold, don't deploy
                    logging.info("{} < {}; returning False".format(metrics_dict[k], v))
                    return False
        logging.info("threshold checks passed.")
        return True

    def log_metrics(metrics_list, metricsc):
        test_confusion_matrix = metrics_list[0]["confusionMatrix"]
        logging.info("rows: %s", test_confusion_matrix["rows"])

        # log the ROC curve
        fpr = []
        tpr = []
        thresholds = []
        for item in metrics_list[0]["confidenceMetrics"]:
            fpr.append(item.get("falsePositiveRate", 0.0))
            tpr.append(item.get("recall", 0.0))
            thresholds.append(item.get("confidenceThreshold", 0.0))
        print(f"fpr: {fpr}")
        print(f"tpr: {tpr}")
        print(f"thresholds: {thresholds}")
        metricsc.log_roc_curve(fpr, tpr, thresholds)

        # log the confusion matrix
        annotations = []
        for item in test_confusion_matrix["annotationSpecs"]:
            annotations.append(item["displayName"])
        logging.info("confusion matrix annotations: %s", annotations)
        metricsc.log_confusion_matrix(
            annotations,
            test_confusion_matrix["rows"],
        )

        # log textual metrics info as well
        for metric in metrics_list[0].keys():
            if metric != "confidenceMetrics":
                val_string = json.dumps(metrics_list[0][metric])
                metrics.log_metric(metric, val_string)
        # metrics.metadata["model_type"] = "AutoML Tabular classification"

    logging.getLogger().setLevel(logging.INFO)
    aip.init(project=project)
    # extract the model resource name from the input Model Artifact
    model_resource_path = model.metadata["resourceName"]
    logging.info("model path: %s", model_resource_path)

    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    client = aip.gapic.ModelServiceClient(client_options=client_options)
    eval_name, metrics_list, metrics_str_list = get_eval_info(
        client, model_resource_path
    )
    logging.info("got evaluation name: %s", eval_name)
    logging.info("got metrics list: %s", metrics_list)
    log_metrics(metrics_list, metricsc)

    thresholds_dict = json.loads(thresholds_dict_str)
    deploy = classification_thresholds_check(metrics_list[0], thresholds_dict)
    if deploy:
        dep_decision = "true"
    else:
        dep_decision = "false"
    logging.info("deployment decision is %s", dep_decision)

    return (dep_decision,)

ধাপ 2: Google ক্লাউড পূর্ব-নির্মিত উপাদান যোগ করা

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

import time
DISPLAY_NAME = 'automl-beans{}'.format(str(int(time.time())))
print(DISPLAY_NAME)

তারপর একটি নতুন নোটবুক কক্ষে নিম্নলিখিত অনুলিপি করুন:

@pipeline(name="automl-tab-beans-training-v2",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://aju-dev-demos.beans.beans1",
    display_name: str = DISPLAY_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
    thresholds_dict_str: str = '{"auRoc": 0.95}',
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        project=project, display_name=display_name, bq_source=bq_source
    )

    training_op = gcc_aip.AutoMLTabularTrainingJobRunOp(
        project=project,
        display_name=display_name,
        optimization_prediction_type="classification",
        budget_milli_node_hours=1000,
        column_transformations=[
            {"numeric": {"column_name": "Area"}},
            {"numeric": {"column_name": "Perimeter"}},
            {"numeric": {"column_name": "MajorAxisLength"}},
            {"numeric": {"column_name": "MinorAxisLength"}},
            {"numeric": {"column_name": "AspectRation"}},
            {"numeric": {"column_name": "Eccentricity"}},
            {"numeric": {"column_name": "ConvexArea"}},
            {"numeric": {"column_name": "EquivDiameter"}},
            {"numeric": {"column_name": "Extent"}},
            {"numeric": {"column_name": "Solidity"}},
            {"numeric": {"column_name": "roundness"}},
            {"numeric": {"column_name": "Compactness"}},
            {"numeric": {"column_name": "ShapeFactor1"}},
            {"numeric": {"column_name": "ShapeFactor2"}},
            {"numeric": {"column_name": "ShapeFactor3"}},
            {"numeric": {"column_name": "ShapeFactor4"}},
            {"categorical": {"column_name": "Class"}},
        ],
        dataset=dataset_create_op.outputs["dataset"],
        target_column="Class",
    )
    model_eval_task = classification_model_eval_metrics(
        project,
        gcp_region,
        api_endpoint,
        thresholds_dict_str,
        training_op.outputs["model"],
    )

    with dsl.Condition(
        model_eval_task.outputs["dep_decision"] == "true",
        name="deploy_decision",
    ):

        endpoint_op = gcc_aip.EndpointCreateOp(
            project=project,
            location=gcp_region,
            display_name="train-automl-beans",
        )

        gcc_aip.ModelDeployOp(
            model=training_op.outputs["model"],
            endpoint=endpoint_op.outputs["endpoint"],
            dedicated_resources_min_replica_count=1,
            dedicated_resources_max_replica_count=1,
            dedicated_resources_machine_type="n1-standard-4",
        )

আসুন এই কোডে কি ঘটছে তা দেখুন:

  • প্রথমত, আমাদের পূর্ববর্তী পাইপলাইনের মতোই, আমরা এই পাইপলাইনের ইনপুট পরামিতিগুলিকে সংজ্ঞায়িত করি। আমাদের এগুলিকে ম্যানুয়ালি সেট করতে হবে কারণ তারা পাইপলাইনের অন্যান্য ধাপের আউটপুটের উপর নির্ভর করে না।
  • ভার্টেক্স এআই পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য বাকি পাইপলাইন কয়েকটি পূর্ব-নির্মিত উপাদান ব্যবহার করে:
    • TabularDatasetCreateOp ক্লাউড স্টোরেজ বা BigQuery-এ একটি ডেটাসেট উৎস দেওয়া Vertex AI-তে একটি ট্যাবুলার ডেটাসেট তৈরি করে। এই পাইপলাইনে, আমরা একটি BigQuery টেবিল URL এর মাধ্যমে ডেটা পাঠাচ্ছি
    • AutoMLTabularTrainingJobRunOp একটি ট্যাবুলার ডেটাসেটের জন্য একটি AutoML প্রশিক্ষণ কাজ শুরু করে। আমরা এই উপাদানটিতে কয়েকটি কনফিগারেশন প্যারামিটার পাস করি, যার মধ্যে রয়েছে মডেলের ধরন (এই ক্ষেত্রে, শ্রেণিবিন্যাস), কলামের কিছু ডেটা, আমরা কতক্ষণের জন্য প্রশিক্ষণ চালাতে চাই এবং ডেটাসেটের একটি পয়েন্টার। লক্ষ্য করুন যে এই উপাদানটিতে ডেটাসেট পাস করার জন্য, আমরা dataset_create_op.outputs["dataset"] এর মাধ্যমে পূর্ববর্তী উপাদানটির আউটপুট প্রদান করছি
    • EndpointCreateOp Vertex AI-তে একটি এন্ডপয়েন্ট তৈরি করে। এই ধাপ থেকে তৈরি শেষ পয়েন্ট পরবর্তী কম্পোনেন্টে ইনপুট হিসাবে পাস করা হবে
    • ModelDeployOp একটি প্রদত্ত মডেলকে Vertex AI-তে একটি শেষ পয়েন্টে স্থাপন করে। এই ক্ষেত্রে, আমরা পূর্ববর্তী ধাপ থেকে তৈরি শেষ পয়েন্ট ব্যবহার করছি। অতিরিক্ত কনফিগারেশন বিকল্প উপলব্ধ আছে, কিন্তু এখানে আমরা এন্ডপয়েন্ট মেশিনের ধরন এবং মডেল প্রদান করছি যা আমরা স্থাপন করতে চাই। আমরা আমাদের পাইপলাইনে প্রশিক্ষণ ধাপের আউটপুটগুলি অ্যাক্সেস করে মডেলটিতে পাস করছি
  • এই পাইপলাইনটি শর্তসাপেক্ষ যুক্তিও ব্যবহার করে, ভার্টেক্স পাইপলাইনের একটি বৈশিষ্ট্য যা আপনাকে সেই শর্তের ফলাফলের উপর ভিত্তি করে বিভিন্ন শাখা সহ একটি শর্ত সংজ্ঞায়িত করতে দেয়। মনে রাখবেন যে আমরা যখন আমাদের পাইপলাইন সংজ্ঞায়িত করেছি তখন আমরা একটি thresholds_dict_str প্যারামিটার পাস করেছি। এই নির্ভুলতা থ্রেশহোল্ড যা আমরা আমাদের মডেলটিকে একটি এন্ডপয়েন্টে স্থাপন করতে হবে তা নির্ধারণ করতে ব্যবহার করছি। এটি বাস্তবায়নের জন্য, আমরা KFP SDK থেকে Condition ক্লাস ব্যবহার করি। আমরা যে শর্তে পাস করি তা হল কাস্টম ইভাল কম্পোনেন্টের আউটপুট যা আমরা এই কোডল্যাবে আগে সংজ্ঞায়িত করেছি। যদি এই শর্তটি সত্য হয়, তাহলে পাইপলাইনটি deploy_op উপাদানটি কার্যকর করতে থাকবে। যদি নির্ভুলতা আমাদের পূর্বনির্ধারিত থ্রেশহোল্ড পূরণ না করে, পাইপলাইন এখানে থামবে এবং একটি মডেল স্থাপন করবে না।

ধাপ 3: কম্পাইল করুন এবং এন্ড-টু-এন্ড ML পাইপলাইন চালান

আমাদের সম্পূর্ণ পাইপলাইন সংজ্ঞায়িত করে, এটি কম্পাইল করার সময়:

compiler.Compiler().compile(
    pipeline_func=pipeline, package_path="tab_classif_pipeline.json"
)

পরবর্তী, কাজ সংজ্ঞায়িত করুন:

ml_pipeline_job = aiplatform.PipelineJob(
    display_name="automl-tab-beans-training",
    template_path="tab_classif_pipeline.json",
    pipeline_root=PIPELINE_ROOT,
    parameter_values={"project": PROJECT_ID, "display_name": DISPLAY_NAME},
    enable_caching=True
)

এবং অবশেষে, কাজ চালান:

ml_pipeline_job.submit()

কনসোলে আপনার পাইপলাইন দেখতে উপরের সেলটি চালানোর পরে লগগুলিতে দেখানো লিঙ্কে নেভিগেট করুন। এই পাইপলাইনটি চলতে এক ঘণ্টার একটু বেশি সময় লাগবে। অটোএমএল প্রশিক্ষণ ধাপে বেশিরভাগ সময় ব্যয় করা হয়। সম্পূর্ণ পাইপলাইন এই মত কিছু দেখতে হবে:

অটোএমএল পাইপলাইন সম্পূর্ণ হয়েছে

আপনি যদি শীর্ষে "প্রসারিত শিল্পকর্ম" বোতামটি টগল করেন, তাহলে আপনি আপনার পাইপলাইন থেকে তৈরি বিভিন্ন শিল্পকর্মের বিশদ বিবরণ দেখতে সক্ষম হবেন৷ উদাহরণস্বরূপ, আপনি যদি dataset আর্টিফ্যাক্টে ক্লিক করেন, আপনি তৈরি করা ভার্টেক্স এআই ডেটাসেটের বিবরণ দেখতে পাবেন। সেই ডেটাসেটের পৃষ্ঠায় যেতে আপনি এখানে লিঙ্কটিতে ক্লিক করতে পারেন:

পাইপলাইন ডেটাসেট

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

মেট্রিক্স ভিজ্যুয়ালাইজেশন

এই পাইপলাইন থেকে তৈরি মডেল এবং শেষ পয়েন্ট দেখতে, মডেল বিভাগে যান এবং automl-beans নামের মডেলটিতে ক্লিক করুন . সেখানে আপনার এই মডেলটিকে একটি শেষ পয়েন্টে স্থাপন করা দেখতে হবে:

মডেল-এন্ডপয়েন্ট

এছাড়াও আপনি আপনার পাইপলাইন গ্রাফের এন্ডপয়েন্ট আর্টিফ্যাক্টে ক্লিক করে এই পৃষ্ঠাটি অ্যাক্সেস করতে পারেন।

কনসোলে পাইপলাইন গ্রাফ দেখার পাশাপাশি, আপনি বংশ ট্র্যাকিংয়ের জন্য ভার্টেক্স পাইপলাইনগুলিও ব্যবহার করতে পারেন। বংশ ট্র্যাকিং দ্বারা, আমরা আপনার পাইপলাইন জুড়ে তৈরি আর্টিফ্যাক্ট ট্র্যাকিং বোঝাতে চাই৷ এটি আমাদের বুঝতে সাহায্য করতে পারে যে আর্টিফ্যাক্টগুলি কোথায় তৈরি করা হয়েছিল এবং কীভাবে সেগুলি একটি ML ওয়ার্কফ্লো জুড়ে ব্যবহার করা হচ্ছে৷ উদাহরণস্বরূপ, এই পাইপলাইনে তৈরি করা ডেটাসেটের জন্য বংশ ট্র্যাকিং দেখতে, ডেটাসেট আর্টিফ্যাক্টে ক্লিক করুন এবং তারপরে দেখুন বংশ :

বংশ দেখুন

এই আর্টিফ্যাক্টটি ব্যবহার করা হচ্ছে এমন সব জায়গা আমাদের দেখায়:

বংশ বিস্তারিত

ধাপ 4: পাইপলাইন জুড়ে মেট্রিক্সের তুলনা করা

আপনি যদি এই পাইপলাইনটি একাধিকবার চালান, আপনি রান জুড়ে মেট্রিক্স তুলনা করতে চাইতে পারেন। রান মেটাডেটা অ্যাক্সেস করতে আপনি aiplatform.get_pipeline_df() পদ্ধতি ব্যবহার করতে পারেন। এখানে, আমরা এই পাইপলাইনের সমস্ত রানের জন্য মেটাডেটা পাব এবং এটি একটি পান্ডাস ডেটাফ্রেমে লোড করব:

pipeline_df = aiplatform.get_pipeline_df(pipeline="automl-tab-beans-training-v2")
small_pipeline_df = pipeline_df.head(2)
small_pipeline_df

যে দিয়ে, আপনি ল্যাব শেষ করেছেন!

🎉 অভিনন্দন! 🎉

আপনি শিখেছেন কিভাবে Vertex AI ব্যবহার করতে হয়:

  • কাস্টম উপাদান সহ এন্ড-টু-এন্ড পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন
  • ভার্টেক্স পাইপলাইনগুলিতে আপনার পাইপলাইনগুলি চালান এবং SDK দিয়ে পাইপলাইন চালানো শুরু করুন৷
  • কনসোলে আপনার ভার্টেক্স পাইপলাইন গ্রাফ দেখুন এবং বিশ্লেষণ করুন
  • আপনার পাইপলাইনে Vertex AI পরিষেবা যোগ করতে পূর্ব-নির্মিত পাইপলাইন উপাদান ব্যবহার করুন
  • পুনরাবৃত্ত পাইপলাইন কাজের সময়সূচী

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

7. পরিষ্কার করা

যাতে আপনাকে চার্জ না করা হয়, এটি সুপারিশ করা হয় যে আপনি এই ল্যাব জুড়ে তৈরি সংস্থানগুলি মুছে ফেলুন৷

ধাপ 1: আপনার নোটবুকের উদাহরণ বন্ধ করুন বা মুছুন

আপনি যদি এই ল্যাবে তৈরি করা নোটবুকটি ব্যবহার চালিয়ে যেতে চান, তাহলে এটি ব্যবহার না করার সময় এটি বন্ধ করার পরামর্শ দেওয়া হয়। আপনার ক্লাউড কনসোলের নোটবুক UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপরে থামুন নির্বাচন করুন। আপনি যদি দৃষ্টান্তটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে মুছুন নির্বাচন করুন:

উদাহরণ বন্ধ করুন

ধাপ 2: আপনার শেষ পয়েন্ট মুছুন

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

শেষ পয়েন্ট মুছুন

তারপর, নিম্নলিখিত প্রম্পট থেকে আনডিপ্লোয় ক্লিক করুন:

মডেল আনডিপ্লয় করুন

অবশেষে, আপনার কনসোলের মডেল বিভাগে নেভিগেট করুন, সেই মডেলটি খুঁজুন এবং ডানদিকে তিনটি ডট মেনু থেকে, মডেল মুছুন ক্লিক করুন:

মডেল মুছুন

ধাপ 3: আপনার ক্লাউড স্টোরেজ বালতি মুছুন

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

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