ভার্টেক্স পাইপলাইনে কাস্টম মডেল প্রশিক্ষণ চলছে

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

এই ল্যাবে, আপনি শিখবেন কিভাবে Kubeflow Pipelines SDK ব্যবহার করে Vertex Pipelines- এ একটি কাস্টম মডেল ট্রেনিং জব চালাতে হয়।

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

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

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

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

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

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

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

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

এমএল পাইপলাইনগুলো কেন দরকারি?

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

সারসংক্ষেপ হলো : পাইপলাইন আপনার এমএল ওয়ার্কফ্লোকে সুবিন্যস্ত করতে এবং এর পুনরাবৃত্তি ঘটাতে সাহায্য করে।

৩. ক্লাউড পরিবেশ সেটআপ

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

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

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

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

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

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

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

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

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

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

ক্লাউড শেল ইনিট

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

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

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

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

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

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

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

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

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

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

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

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

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

TFE উদাহরণ

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

ধাপ ৫: আপনার নোটবুকটি খুলুন।

ইনস্ট্যান্সটি তৈরি হয়ে গেলে, Open JupyterLab নির্বাচন করুন:

খোলা নোটবুক

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

ভার্টেক্স পাইপলাইন ব্যবহার করার জন্য আমাদের আরও কয়েকটি লাইব্রেরি ইনস্টল করতে হবে:

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

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

প্রথমে, আপনার নোটবুকের উপরের বাম দিকের + আইকনে ক্লিক করে এর লঞ্চার মেনুতে প্রবেশ করুন এবং Python 3 নির্বাচন করে একটি নোটবুক তৈরি করুন।

পাইথন৩ নোটবুক তৈরি করুন

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

এই ল্যাবে আমরা যে দুটি সার্ভিস ব্যবহার করব তা ইনস্টল করার জন্য, প্রথমে একটি নোটবুক সেলে ইউজার ফ্ল্যাগটি সেট করুন:

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__))"

ধাপ ২: আপনার প্রজেক্ট আইডি এবং বাকেট সেট করুন।

এই ল্যাব জুড়ে আপনি আপনার ক্লাউড প্রজেক্ট আইডি এবং পূর্বে তৈরি করা বাকেটটি ব্যবহার করবেন। এরপর আমরা সেগুলোর প্রত্যেকটির জন্য ভ্যারিয়েবল তৈরি করব।

আপনি যদি আপনার প্রজেক্ট আইডি না জানেন, তাহলে নিম্নলিখিত কমান্ডটি চালিয়ে তা পেতে পারেন:

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"

ধাপ ৩: লাইব্রেরিগুলো ইম্পোর্ট করুন

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

from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline

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

ধাপ ৪: ধ্রুবকগুলো সংজ্ঞায়িত করুন

আমাদের পাইপলাইন তৈরি করার আগে শেষ যে কাজটি করতে হবে তা হলো কিছু ধ্রুবক ভেরিয়েবল নির্ধারণ করা। 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/ ফরম্যাটে থাকবে।

৫. একটি কাস্টম মডেল প্রশিক্ষণ কাজ কনফিগার করা

আমাদের পাইপলাইন সেট আপ করার আগে, আমাদের কাস্টম মডেল ট্রেনিং জবের জন্য কোড লিখতে হবে। মডেলটিকে ট্রেইন করার জন্য, আমরা UCI মেশিন লার্নিং ড্রাই বিনস ডেটাসেটটি ব্যবহার করব, যা KOKLU, M. এবং OZKAN, IA, (2020), "Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques." In Computers and Electronics in Agriculture, 174, 105507. DOI থেকে নেওয়া হয়েছে।

আমাদের প্রথম পাইপলাইন ধাপে, একটি BigQuery টেবিল ব্যবহার করে Vertex AI-তে একটি ম্যানেজড ডেটাসেট তৈরি করা হবে, যেটিতে এই বিনস ডেটার একটি সংস্করণ থাকবে। এই ডেটাসেটটি আমাদের ট্রেনিং জবে ইনপুট হিসেবে পাঠানো হবে। আমাদের ট্রেনিং কোডে, এই ম্যানেজড ডেটাসেটটি অ্যাক্সেস করার জন্য এনভায়রনমেন্ট ভেরিয়েবলের সুবিধা থাকবে।

এইভাবে আমরা আমাদের কাস্টম ট্রেনিং জবটি সেট আপ করব:

  • আমাদের ডেটাতে থাকা শিমের প্রকারভেদ শ্রেণীবদ্ধ করার জন্য একটি স্কিকিট-লার্ন DecisionTreeClassifier মডেল লিখুন।
  • প্রশিক্ষণ কোডটি একটি ডকার কন্টেইনারে প্যাকেজ করুন এবং কন্টেইনার রেজিস্ট্রি-তে পুশ করুন।

সেখান থেকে, আমরা সরাসরি আমাদের পাইপলাইন থেকে একটি ভার্টেক্স এআই ট্রেনিং জব শুরু করতে পারব। চলুন শুরু করা যাক!

ধাপ ১: একটি ডকার কন্টেইনারে আমাদের প্রশিক্ষণ কোড সংজ্ঞায়িত করুন।

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

টার্মিনাল খুলুন

এরপর আপনার কন্টেইনারাইজড কোড যোগ করার জন্য একটি ডিরেক্টরি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

mkdir traincontainer
cd traincontainer
touch Dockerfile

mkdir trainer
touch trainer/train.py

ঐ কমান্ডগুলো চালানোর পর, আপনি বাম দিকে traincontainer/ নামের একটি ডিরেক্টরি তৈরি হতে দেখবেন (এটি দেখার জন্য আপনাকে রিফ্রেশ আইকনে ক্লিক করতে হতে পারে)। আপনার traincontainer/ ডিরেক্টরিতে আপনি নিম্নলিখিত বিষয়গুলো দেখতে পাবেন:

+ Dockerfile
+ trainer/
    + train.py

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

FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]

আপনার নোটবুক ইনস্ট্যান্সে ফাইল সম্পাদনা করার সময় তা সংরক্ষণ করতে, আপনি ctrl+s ব্যবহার করতে পারেন।

এরপর, train.py ফাইলটি খুলুন। এখানেই আমরা আমাদের ট্রেনিং কোড যোগ করব। নিচের কোডটি train.py ফাইলে কপি করুন। এটি আমাদের ম্যানেজড ডেটাসেট থেকে ডেটা সংগ্রহ করে, সেটিকে একটি Pandas DataFrame-এ রাখে, একটি Scikit-learn মডেলকে ট্রেইন করে এবং ট্রেইন করা মডেলটিকে ক্লাউড স্টোরেজে আপলোড করে:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump

import os
import pandas as pd

bqclient = bigquery.Client()
storage_client = storage.Client()

def download_table(bq_table_uri: str):
    prefix = "bq://"
    if bq_table_uri.startswith(prefix):
        bq_table_uri = bq_table_uri[len(prefix):]

    table = bigquery.TableReference.from_string(bq_table_uri)
    rows = bqclient.list_rows(
        table,
    )
    return rows.to_dataframe(create_bqstorage_client=False)

# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]

# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()

# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)

# Save the model to a local file
dump(skmodel, "model.joblib")

# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")

এরপর, আপনার নোটবুকে ফিরে যান এবং উপরের স্ক্রিপ্ট থেকে YOUR_GCS_BUCKET জায়গায় আপনার ক্লাউড স্টোরেজ বাকেটের নামটি বসাতে নিম্নলিখিত কমান্ডটি চালান:

BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py

আপনি চাইলে এটি ম্যানুয়ালিও করতে পারেন। সেক্ষেত্রে, স্ক্রিপ্ট আপডেট করার সময় আপনার বাকেটের নামে gs:// অন্তর্ভুক্ত করবেন না।

এখন আমাদের ট্রেনিং কোড একটি ডকার কন্টেইনারে রয়েছে এবং আমরা ক্লাউডে ট্রেনিং চালানোর জন্য প্রস্তুত।

ধাপ ২: কন্টেইনারটি কন্টেইনার রেজিস্ট্রি-তে পুশ করুন।

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

আপনার টার্মিনালে ফিরে যান এবং আপনার traincontainer/ ডিরেক্টরির রুট থেকে, কন্টেইনার রেজিস্ট্রি-তে থাকা আপনার কন্টেইনার ইমেজের URI দিয়ে একটি ভেরিয়েবল নির্ধারণ করুন।

PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"

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

docker build ./ -t $IMAGE_URI

অবশেষে, কন্টেইনারটি কন্টেইনার রেজিস্ট্রি-তে পুশ করুন:

docker push $IMAGE_URI

আপনার কন্টেইনারটি সেখানে আছে কিনা তা যাচাই করতে আপনার ক্লাউড কনসোলের কন্টেইনার রেজিস্ট্রি বিভাগে যান। এটি দেখতে অনেকটা এইরকম হবে:

কন্টেইনার রেজিস্ট্রি

৬. ব্যাচ প্রেডিকশন জব কনফিগার করা

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

ব্যাচ প্রেডিকশন উদাহরণগুলো ক্লাউড স্টোরেজে কপি করা হচ্ছে

নিম্নলিখিত ফাইলটিতে আমাদের beans ডেটাসেটের প্রতিটি ক্লাস থেকে ৩টি করে উদাহরণ রয়েছে। নীচের উদাহরণটিতে Class কলামটি অন্তর্ভুক্ত করা হয়নি, কারণ আমাদের মডেলটি সেটিই প্রেডিক্ট করবে। আপনার নোটবুকে স্থানীয়ভাবে এই CSV ফাইলটি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286

তারপর, ফাইলটি আপনার ক্লাউড স্টোরেজ বাকেটে কপি করুন:

!gsutil cp batch_examples.csv $BUCKET_NAME

পরবর্তী ধাপে আমাদের পাইপলাইন নির্ধারণ করার সময় আমরা এই ফাইলটি উল্লেখ করব।

৭. পূর্ব-নির্মিত উপাদান দিয়ে পাইপলাইন নির্মাণ করা

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

আমাদের তিন-ধাপের পাইপলাইনটি যা করবে তা হলো:

  • Vertex AI-তে একটি পরিচালিত ডেটাসেট তৈরি করুন
  • আমাদের সেট আপ করা কাস্টম কন্টেইনার ব্যবহার করে Vertx AI-তে একটি ট্রেনিং জব চালান।
  • আমাদের প্রশিক্ষিত স্কিকিট-লার্ন ক্লাসিফিকেশন মডেলের উপর একটি ব্যাচ প্রেডিকশন জব চালান।

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

যেহেতু আমরা আগে থেকে তৈরি কম্পোনেন্ট ব্যবহার করছি, তাই আমরা পাইপলাইন ডেফিনিশনেই আমাদের সম্পূর্ণ পাইপলাইন সেট আপ করতে পারি। একটি নোটবুক সেলে নিম্নলিখিতটি যোগ করুন:

@pipeline(name="automl-beans-custom",
                  pipeline_root=PIPELINE_ROOT)
def pipeline(
    bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
    bucket: str = BUCKET_NAME,
    project: str = PROJECT_ID,
    gcp_region: str = REGION,
    bq_dest: str = "",
    container_uri: str = "",
    batch_destination: str = ""
):
    dataset_create_op = gcc_aip.TabularDatasetCreateOp(
        display_name="tabular-beans-dataset",
        bq_source=bq_source,
        project=project,
        location=gcp_region
    )

    training_op = gcc_aip.CustomContainerTrainingJobRunOp(
        display_name="pipeline-beans-custom-train",
        container_uri=container_uri,
        project=project,
        location=gcp_region,
        dataset=dataset_create_op.outputs["dataset"],
        staging_bucket=bucket,
        training_fraction_split=0.8,
        validation_fraction_split=0.1,
        test_fraction_split=0.1,
        bigquery_destination=bq_dest,
        model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
        model_display_name="scikit-beans-model-pipeline",
        machine_type="n1-standard-4",
    )
    batch_predict_op = gcc_aip.ModelBatchPredictOp(
        project=project,
        location=gcp_region,
        job_display_name="beans-batch-predict",
        model=training_op.outputs["model"],
        gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
        instances_format="csv",
        gcs_destination_output_uri_prefix=batch_destination,
        machine_type="n1-standard-4"
    )

ধাপ ২: পাইপলাইনটি কম্পাইল ও রান করুন।

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

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

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

from datetime import datetime

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

এরপর, কয়েকটি প্রজেক্ট-নির্দিষ্ট প্যারামিটার যোগ করে আপনার পাইপলাইন জবটি সংজ্ঞায়িত করুন:

pipeline_job = aiplatform.PipelineJob(
    display_name="custom-train-pipeline",
    template_path="custom_train_pipeline.json",
    job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
    parameter_values={
        "project": PROJECT_ID,
        "bucket": BUCKET_NAME,
        "bq_dest": "bq://{0}".format(PROJECT_ID),
        "container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
        "batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
    },
    enable_caching=True,
)

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

pipeline_job.submit()

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

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

ওই লিঙ্কে যান। আপনি আপনার পাইপলাইন ড্যাশবোর্ড খুলেও এটি অ্যাক্সেস করতে পারেন। সম্পূর্ণ হলে আপনার পাইপলাইনটি দেখতে এইরকম হবে:

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

এই পাইপলাইনটি চলতে ৫-১০ মিনিট সময় নেবে, কিন্তু এটি সম্পূর্ণ হওয়ার আগেই আপনি পরবর্তী ধাপে যেতে পারেন। এরপর আপনি এই পাইপলাইনের প্রতিটি ধাপে কী ঘটছে সে সম্পর্কে আরও জানতে পারবেন।

৮. আপনার পাইপলাইন এক্সিকিউশন বোঝা

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

পাইপলাইন ধাপ ১: একটি পরিচালিত ডেটাসেট তৈরি করা

আমাদের পাইপলাইনের প্রথম ধাপে Vertex AI-তে একটি পরিচালিত ডেটাসেট তৈরি করা হয়। আপনার কনসোলের Pipelines বিভাগে নিম্নলিখিত ডেটাসেট লিঙ্কে ক্লিক করলে:

পাইপলাইন থেকে ডেটাসেটের লিঙ্ক

আপনি আপনার ডেটাসেটটি ভার্টেক্স এআই-তে দেখতে পাবেন, যেখানে বিগকোয়েরি (BigQuery)-তে থাকা ডেটা সোর্সের একটি লিঙ্কের পাশাপাশি আপনার ডেটাসেটের বিভিন্ন কলামের তথ্যও অন্তর্ভুক্ত থাকবে। একবার ভার্টেক্স এআই-তে একটি ম্যানেজড ডেটাসেট আপলোড করার পর, এটি একটি অটোএমএল (AutoML) অথবা কাস্টম মডেলকে প্রশিক্ষণ দেওয়ার জন্য ব্যবহার করা যেতে পারে।

ম্যানেজড ডেটাসেট ব্যবহার করে এমন কাস্টম মডেল জবের ক্ষেত্রে, ভার্টেক্স এআই আপনার ট্রেনিং জবগুলিতে বিশেষ এনভায়রনমেন্ট ভেরিয়েবল পাঠায় এবং আপনার ডেটাকে ট্রেন ও টেস্ট সেটে ভাগ করার কাজটি করে। আমরা আমাদের পরবর্তী পাইপলাইন ধাপে এটি ব্যবহার করব।

পাইপলাইন ধাপ ২: ভার্টেক্স এআই ট্রেনিং-এ একটি মডেলকে প্রশিক্ষণ দেওয়া

আপনার কাস্টম ট্রেনিং জবটি চলার সময়, আপনি সরাসরি ভার্টেক্স পাইপলাইনস কনসোলে ক্লিক করে লগ দেখতে পারেন:

কাস্টম প্রশিক্ষণ লগ

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

পাইপলাইন ধাপ ৩: আমাদের মডেলে একটি ব্যাচ প্রেডিকশন জব চালানো

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

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

ব্যাচ পূর্বাভাস কাজ

ওই লিঙ্কে ক্লিক করে ক্লাউড স্টোরেজ ডিরেক্টরিতে যান, যেখানে আপনি পূর্বাভাসের ফলাফল খুঁজে পাবেন, এবং তারপর prediction.results ফাইলগুলোর মধ্যে একটি ডাউনলোড করতে ক্লিক করুন। ফাইলটিতে, আপনি নিম্নলিখিতগুলির মতো সারি দেখতে পাবেন:

{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}

এর মধ্যে একটি নির্দিষ্ট ইনস্ট্যান্সের ফিচার ভ্যালুগুলোর সাথে আমাদের মডেলের প্রেডিকশন করা ক্লাসটিও অন্তর্ভুক্ত রয়েছে। এই উদাহরণটির ক্ষেত্রে, আমাদের মডেল মনে করে এটি একটি 'HOROZ' বিন ছিল।

এর সাথেই, আপনার ল্যাব শেষ হলো!

🎉 অভিনন্দন! 🎉

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

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

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

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

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

ধাপ ১: আপনার নোটবুক ইনস্ট্যান্সটি বন্ধ করুন বা মুছে ফেলুন।

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

স্টপ ইনস্ট্যান্স

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

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

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