১. ভূমিকা
| কুবেফ্লো হলো কুবারনেটিসের জন্য একটি মেশিন লার্নিং টুলকিট। এই প্রকল্পের মূল উদ্দেশ্য হলো কুবারনেটিসে মেশিন লার্নিং (এমএল) ওয়ার্কফ্লো স্থাপনকে সহজ, বহনযোগ্য এবং সম্প্রসারণযোগ্য করে তোলা। এর লক্ষ্য হলো বিভিন্ন ধরনের অবকাঠামোতে এমএল-এর জন্য সেরা ওপেন-সোর্স সিস্টেমগুলো স্থাপনের একটি সহজ উপায় প্রদান করা। |
| একটি মেশিন লার্নিং ওয়ার্কফ্লোতে ডেটা প্রস্তুতি ও বিশ্লেষণ থেকে শুরু করে ট্রেনিং, ইভ্যালুয়েশন, ডেপ্লয়মেন্ট এবং আরও অনেক ধাপ থাকতে পারে, যেগুলোর প্রতিটি একে অপরের উপর নির্ভরশীল। এই প্রক্রিয়াগুলোকে অ্যাড-হক পদ্ধতিতে—যেমন, কিছু নোটবুক বা স্ক্রিপ্টে—তৈরি করা এবং ট্র্যাক করা কঠিন, এবং অডিটিং ও রিপ্রডিউসিবিলিটির মতো বিষয়গুলো ক্রমশ সমস্যাজনক হয়ে ওঠে। কুবেফ্লো পাইপলাইনস (KFP) মনিটরিং, অডিটিং, ভার্সন ট্র্যাকিং এবং রিপ্রডিউসিবিলিটির সুবিধাসহ শক্তিশালী ও পুনরাবৃত্তিযোগ্য মেশিন লার্নিং পাইপলাইন ডেপ্লয় করার একটি উপায় প্রদান করে এই সমস্যাগুলো সমাধানে সাহায্য করে। ক্লাউড এআই পাইপলাইনস একটি KFP ইনস্টলেশন সেট আপ করা সহজ করে তোলে। |
আপনি যা তৈরি করবেন
এই কোডল্যাবে, আপনি কুবেফ্লো পাইপলাইন ব্যবহার করে একটি মডেলকে প্রশিক্ষণ ও পরিবেশন করার মাধ্যমে গিটহাব ইস্যুগুলোর সারসংক্ষেপ তৈরি করে এমন একটি ওয়েব অ্যাপ নির্মাণ করবেন। এটি কুবেফ্লো এক্সাম্পলস রিপো- তে থাকা একটি উদাহরণের উপর ভিত্তি করে তৈরি। কাজটি সম্পন্ন হলে, আপনার পরিকাঠামোতে থাকবে:
- একটি গুগল কুবারনেটিস ইঞ্জিন (GKE) ক্লাস্টার, যেখানে কুবেফ্লো পাইপলাইন ইনস্টল করা আছে ( ক্লাউড এআই পাইপলাইনস- এর মাধ্যমে)।
- একটি পাইপলাইন যা জিপিইউ-তে একটি Tensor2Tensor মডেলকে প্রশিক্ষণ দেয়
- একটি পরিবেশন পাত্র যা প্রশিক্ষিত মডেল থেকে পূর্বাভাস প্রদান করে।
- একটি UI যা পূর্বাভাসগুলো ব্যাখ্যা করে GitHub ইস্যুগুলোর সারসংক্ষেপ প্রদান করে।
- একটি নোটবুক যা কুবেফ্লো পাইপলাইনস (কেএফপি) এসডিকে ব্যবহার করে একেবারে শুরু থেকে একটি পাইপলাইন তৈরি করে।
আপনি যা শিখবেন
আপনি যে পাইপলাইনটি তৈরি করবেন, সেটি গিটহাব ইস্যু ডেটার উপর একটি Tensor2Tensor মডেলকে প্রশিক্ষণ দেয় এবং ইস্যুর মূল অংশ থেকে ইস্যুর শিরোনাম অনুমান করতে শেখে। এরপর এটি প্রশিক্ষিত মডেলটি এক্সপোর্ট করে এবং Tensorflow Serving ব্যবহার করে তা ডেপ্লয় করে। পাইপলাইনের চূড়ান্ত ধাপে একটি ওয়েব অ্যাপ চালু করা হয়, যা মডেলের পূর্বাভাসগুলো পাওয়ার জন্য TF-Serving ইনস্ট্যান্সের সাথে যোগাযোগ করে।
- GKE ক্লাস্টারে কীভাবে Kubeflow Pipelines ইনস্টল করবেন
- কুবেফ্লো পাইপলাইন ব্যবহার করে কীভাবে এমএল ওয়ার্কফ্লো তৈরি এবং চালানো যায়
- একটি এআই প্ল্যাটফর্ম নোটবুক থেকে কীভাবে পাইপলাইন সংজ্ঞায়িত এবং চালানো যায়
আপনার যা যা লাগবে
- Kubernetes সম্পর্কে প্রাথমিক ধারণা থাকলে সহায়ক হবে, তবে তা আবশ্যক নয়।
- একটি সক্রিয় GCP প্রজেক্ট যার জন্য আপনার মালিকের অনুমতি রয়েছে
- (ঐচ্ছিক) একটি গিটহাব অ্যাকাউন্ট
- গুগল ক্লাউড প্ল্যাটফর্ম (GCP) কনসোলে উপলব্ধ গুগল ক্লাউড শেল- এ প্রবেশাধিকার।
২. সেটআপ
ক্লাউড শেল
ব্রাউজারে GCP কনসোলে যান এবং আপনার প্রোজেক্ট ক্রেডেনশিয়াল দিয়ে লগ ইন করুন:
প্রয়োজনে 'একটি প্রজেক্ট নির্বাচন করুন'-এ ক্লিক করুন, যাতে আপনি আপনার কোডল্যাব প্রজেক্ট নিয়ে কাজ করতে পারেন।

এরপর ক্লাউড শেল চালু করতে কনসোলের উপরের ডানদিকে থাকা "অ্যাক্টিভেট ক্লাউড শেল" আইকনটিতে ক্লিক করুন।

যখন আপনি ক্লাউড শেল চালু করবেন, তখন এটি কোন প্রজেক্ট ব্যবহার করার জন্য সেট করা আছে তা আপনাকে জানিয়ে দেবে। এই সেটিংটি সঠিক আছে কিনা তা যাচাই করে নিন।
আপনার প্রজেক্ট আইডি খুঁজে পেতে, GCP কনসোলের হোম প্যানেলে যান। স্ক্রিনটি খালি থাকলে, একটি ড্যাশবোর্ড তৈরি করার জন্য প্রদর্শিত 'Yes'-এ ক্লিক করুন।

তারপর, ক্লাউড শেল টার্মিনালে, প্রয়োজনে gcloud সঠিক প্রজেক্ট ব্যবহার করার জন্য কনফিগার করতে এই কমান্ডগুলো চালান:
export PROJECT_ID=<your_project_id>
gcloud config set project ${PROJECT_ID}
একটি স্টোরেজ বাকেট তৈরি করুন
পাইপলাইন ফাইল সংরক্ষণের জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন। আপনাকে একটি বিশ্বব্যাপী অনন্য আইডি ব্যবহার করতে হবে, তাই আপনার প্রজেক্ট আইডি অন্তর্ভুক্ত করে একটি বাকেটের নাম নির্ধারণ করা সুবিধাজনক। gsutil mb (make bucket) কমান্ড ব্যবহার করে বাকেটটি তৈরি করুন:
export PROJECT_ID=<your_project_id>
export BUCKET_NAME=kubeflow-${PROJECT_ID}
gsutil mb gs://${BUCKET_NAME}
বিকল্পভাবে, আপনি GCP কনসোলের মাধ্যমে একটি বাকেট তৈরি করতে পারেন।
ঐচ্ছিক: একটি গিটহাব টোকেন তৈরি করুন।
এই কোডল্যাবটি সর্বজনীনভাবে উপলব্ধ ডেটা পুনরুদ্ধার করার জন্য গিটহাব এপিআই (GitHub API)-কে কল করে। রেট-লিমিটিং প্রতিরোধ করতে, বিশেষ করে এমন ইভেন্টগুলিতে যেখানে গিটহাব এপিআই-তে প্রচুর সংখ্যক বেনামী অনুরোধ পাঠানো হয়, কোনো অনুমতি ছাড়াই একটি অ্যাক্সেস টোকেন সেট আপ করুন। এর উদ্দেশ্য হলো আপনাকে বেনামী ব্যবহারকারীর পরিবর্তে একজন ব্যক্তি হিসেবে অনুমোদন দেওয়া।
- https://github.com/settings/tokens- এ যান এবং কোনো স্কোপ ছাড়া একটি নতুন টোকেন তৈরি করুন।
- এটি কোনো নিরাপদ জায়গায় সংরক্ষণ করুন। যদি এটি হারিয়ে ফেলেন, তবে আপনাকে এটি মুছে ফেলে নতুন করে একটি তৈরি করতে হবে।
আপনি এই ধাপটি বাদ দিলেও ল্যাবটি কাজ করবে – তবে আপনার মডেলটি পরীক্ষা করার জন্য ইনপুট ডেটা তৈরি করার বিকল্পগুলো কিছুটা সীমিত হয়ে যাবে।
ঐচ্ছিক: দরকারি ড্যাশবোর্ডগুলো পিন করুন
সহজে অ্যাক্সেসের জন্য GCP কনসোলে Kubernetes Engine এবং Storage ড্যাশবোর্ডগুলো পিন করে রাখুন।

একটি এআই প্ল্যাটফর্ম পাইপলাইন (হোস্টেড কুবেফ্লো পাইপলাইন) ইনস্টলেশন তৈরি করুন
KFP ইনস্টল করা একটি GKE ইনস্ট্যান্স সেট আপ করতে, এখানে 'শুরু করার আগে' এবং 'আপনার ইনস্ট্যান্স সেট আপ করুন' বিভাগের নির্দেশাবলী অনুসরণ করুন। ডকুমেন্টেশনে যেমন নির্দেশ দেওয়া হয়েছে, সেই অনুযায়ী 'নিম্নলিখিত ক্লাউড এপিআইগুলিতে অ্যাক্সেসের অনুমতি দিন ' বক্সটি অবশ্যই চেক করুন। (যদি আপনি তা না করেন, তাহলে উদাহরণ পাইপলাইনটি সফলভাবে চলবে না)। ইনস্টলেশন নেমস্পেসটি default হিসাবে রাখুন।
আপনাকে এমন একটি জোন বেছে নিতে হবে যা Nvidia k80s সমর্থন করে। আপনি ডিফল্ট হিসেবে us-central1-a অথবা us-central1-c ব্যবহার করতে পারেন।
ইনস্টলেশন সম্পন্ন হলে, AI Pipelines ড্যাশবোর্ডে আপনার ইনস্টলেশনের জন্য তালিকাভুক্ত GKE ক্লাস্টারের নাম এবং জোনটি নোট করুন এবং সুবিধার জন্য এনভায়রনমেন্ট ভেরিয়েবলগুলো এই মানগুলোতে সেট করুন।

export ZONE=<your zone> export CLUSTER_NAME=<your cluster name>
আপনার নতুন GKE ক্লাস্টারের ক্রেডেনশিয়াল ব্যবহার করার জন্য kubectl সেট আপ করুন।
GKE ক্লাস্টার তৈরি হয়ে গেলে, আপনার ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালিয়ে নতুন ক্লাস্টারের ক্রেডেনশিয়াল ব্যবহার করার জন্য kubectl কনফিগার করুন:
gcloud container clusters get-credentials ${CLUSTER_NAME} \
--project ${PROJECT_ID} \
--zone ${ZONE}
বিকল্পভাবে, AI Pipelines ড্যাশবোর্ডে ক্লাস্টারের নামের উপর ক্লিক করে এর GKE পেজে যান, তারপর পেজের উপরের দিকে থাকা "Connect"-এ ক্লিক করুন। পপআপ থেকে কমান্ডটি আপনার Cloud Shell-এ পেস্ট করুন।
এটি আপনার kubectl কনটেক্সট কনফিগার করে, যাতে আপনি আপনার ক্লাস্টারের সাথে ইন্টারঅ্যাক্ট করতে পারেন। কনফিগারেশনটি যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান:
kubectl get nodes -o wide
আপনি " Ready " স্ট্যাটাস সহ নোডগুলির তালিকা এবং নোডের বয়স, সংস্করণ, বাহ্যিক আইপি ঠিকানা, ওএস ইমেজ, কার্নেল সংস্করণ এবং কন্টেইনার রানটাইম সম্পর্কিত অন্যান্য তথ্য দেখতে পাবেন।
জিপিইউ-সক্ষম নোড পুলগুলিতে এনভিডিয়া ড্রাইভার ইনস্টল করার জন্য ক্লাস্টারটি কনফিগার করুন।
এরপরে, আমরা ক্লাস্টারে একটি ডেমনসেট প্রয়োগ করব, যা যেকোনো GPU-সক্ষম ক্লাস্টার নোডে এনভিডিয়া ড্রাইভার ইনস্টল করবে:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
এরপর নিম্নলিখিত কমান্ডটি চালান, যা KFP কম্পোনেন্টগুলোকে নতুন Kubernetes রিসোর্স তৈরি করার অনুমতি দেয়:
kubectl create clusterrolebinding sa-admin --clusterrole=cluster-admin --serviceaccount=kubeflow:pipeline-runner
একটি GPU নোড পুল তৈরি করুন
তারপর, আমরা ১ সাইজের একটি জিপিইউ নোড পুল সেট আপ করব:
gcloud container node-pools create gpu-pool \
--cluster=${CLUSTER_NAME} \
--zone ${ZONE} \
--num-nodes=1 \
--machine-type n1-highmem-8 \
--scopes cloud-platform --verbosity error \
--accelerator=type=nvidia-tesla-k80,count=1
৩. পাইপলাইন ড্যাশবোর্ড থেকে একটি পাইপলাইন চালান।
পাইপলাইন ড্যাশবোর্ড খুলুন
ক্লাউড কনসোলে, পাইপলাইন প্যানেলে যান, যদি আপনি ইতিমধ্যে সেখানে না থাকেন। তারপর আপনার ইনস্টলেশনের জন্য " ওপেন পাইপলাইনস ড্যাশবোর্ড "-এ ক্লিক করুন এবং বাম দিকের মেনু বারে থাকা পাইপলাইনস- এ ক্লিক করুন। যদি কোনো লোড এরর আসে, তাহলে ট্যাবটি রিফ্রেশ করুন। আপনি এইরকম একটি নতুন পৃষ্ঠা দেখতে পাবেন:

পাইপলাইনের বর্ণনা
আপনি যে পাইপলাইনটি চালাবেন তাতে কয়েকটি ধাপ রয়েছে (বিস্তারিত জানতে এই কোডল্যাবের পরিশিষ্ট দেখুন):
- একটি বিদ্যমান মডেল চেকপয়েন্ট আপনার বাকেটে কপি করা হয়েছে।
- প্রিপ্রসেসড ডেটা ব্যবহার করে একটি Tensor2Tensor মডেলকে প্রশিক্ষণ দেওয়া হয়।
- প্রথম ধাপে কপি করা বিদ্যমান মডেল চেকপয়েন্ট থেকে প্রশিক্ষণ শুরু হয়, তারপর আরও কয়েকশ ধাপ প্রশিক্ষণ চলে। (কোডল্যাবের সময় এটিকে সম্পূর্ণরূপে প্রশিক্ষণ দিতে অনেক বেশি সময় লেগে যাবে)।
- প্রশিক্ষণ শেষ হলে, পাইপলাইন ধাপটি মডেলটিকে টেনসরফ্লো সার্ভিং দ্বারা পরিবেশনের জন্য উপযুক্ত আকারে এক্সপোর্ট করে।
- সেই মডেলটি ব্যবহার করে একটি TensorFlow-পরিষেবা প্রদানকারী ইনস্ট্যান্স স্থাপন করা হয়।
- পরিবেশিত মডেলের সাথে মিথস্ক্রিয়া করে পূর্বাভাস সংগ্রহের জন্য একটি ওয়েব অ্যাপ চালু করা হয়।
পাইপলাইনটি ডাউনলোড এবং কম্পাইল করুন
এই অংশে, আমরা দেখব কিভাবে একটি পাইপলাইন ডেফিনিশন কম্পাইল করতে হয়। আমাদের প্রথম কাজ হলো KFP SDK ইনস্টল করা। ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
pip3 install -U kfp
পাইপলাইন ডেফিনিশন ফাইলটি ডাউনলোড করতে, ক্লাউড শেল থেকে এই কমান্ডটি চালান:
curl -O https://raw.githubusercontent.com/amygdala/kubeflow-examples/ghsumm/github_issue_summarization/pipelines/example_pipelines/gh_summ_hosted_kfp.py
তারপর পাইপলাইন ডেফিনিশন ফাইলটি এইভাবে চালিয়ে কম্পাইল করুন:
python3 gh_summ_hosted_kfp.py
এর ফলে আপনি gh_summ_hosted_kfp.py.tar.gz ফাইলটি দেখতে পাবেন।
সংকলিত পাইপলাইন আপলোড করুন
Kubeflow Pipelines ওয়েব UI-তে, ‘Upload pipeline’- এ ক্লিক করুন এবং ‘Import by URL’ নির্বাচন করুন। নিচের URL-টি কপি করে পেস্ট করুন, যেটি আপনার এইমাত্র কম্পাইল করা পাইপলাইনটিকেই নির্দেশ করে। (Cloud Shell থেকে একটি ফাইল আপলোড করতে কয়েকটি অতিরিক্ত ধাপ লাগে, তাই আমরা একটি শর্টকাট নিচ্ছি)।
পাইপলাইনটির একটি নাম দিন (যেমন gh_summ )।

পাইপলাইনটি চালান
তালিকা থেকে আপলোড করা পাইপলাইনটিতে ক্লিক করুন —এটি আপনাকে পাইপলাইনটির স্ট্যাটিক গ্রাফ দেখতে দেবে— তারপর পাইপলাইনটি ব্যবহার করে একটি নতুন এক্সপেরিমেন্ট তৈরি করতে 'Create experiment'- এ ক্লিক করুন। এক্সপেরিমেন্ট হলো অর্থগতভাবে সম্পর্কিত রানগুলোকে একসাথে গোষ্ঠীভুক্ত করার একটি উপায়।

এক্সপেরিমেন্টটির একটি নাম দিন (যেমন পাইপলাইনের নামের মতোই, gh_summ ), তারপর তৈরি করতে Next-এ ক্লিক করুন।

এতে এমন একটি পৃষ্ঠা আসবে যেখানে আপনি রানের জন্য প্যারামিটারগুলো প্রবেশ করিয়ে তা শুরু করতে পারবেন।
প্যারামিটারগুলো পূরণ করতে সাহায্য করার জন্য আপনি ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলো চালাতে পারেন।
gcloud config get-value project
echo "gs://${BUCKET_NAME}/codelab"
রানের নামটি স্বয়ংক্রিয়ভাবে পূরণ হয়ে যাবে, তবে আপনি চাইলে অন্য কোনো নামও দিতে পারেন।
তারপর তিনটি প্যারামিটার ক্ষেত্র পূরণ করুন:
-
project - (ঐচ্ছিক)
github-token -
working-dir
ওয়ার্কিং-ডিরেক্টরি (working-dir) এর জন্য, আপনার তৈরি করা GCS বাকেটের অধীনে যেকোনো একটি পাথ দিন। ' gs:// ' প্রিফিক্সটি অন্তর্ভুক্ত করুন। github-token ফিল্ডের জন্য, আপনি আগে ঐচ্ছিকভাবে যে টোকেনটি তৈরি করেছিলেন সেটি দিন, অথবা যদি টোকেন তৈরি না করে থাকেন তবে প্লেসহোল্ডার স্ট্রিংটি যেমন আছে তেমনই রেখে দিন।

ফিল্ডগুলি পূরণ করার পর, স্টার্ট-এ ক্লিক করুন, তারপর এর বিবরণ দেখতে তালিকাভুক্ত রানটিতে ক্লিক করুন। কোনো নির্দিষ্ট পাইপলাইন স্টেপ চলার সময়, আপনি সেটির পড লগ দেখাসহ সেটির সম্পর্কে আরও তথ্য পেতে সেটিতে ক্লিক করতে পারেন। (ক্লাস্টার নোডটি বন্ধ করে দেওয়া হলেও, আপনি এর ক্লাউড লগিং (স্ট্যাকড্রাইভার) লগের লিঙ্কের মাধ্যমেও একটি পাইপলাইন স্টেপের লগ দেখতে পারেন)।

পাইপলাইন সংজ্ঞা দেখুন
পাইপলাইনটি চলার সময়, এটি কীভাবে তৈরি করা হয়েছে এবং কী করছে তা আপনি আরও ভালোভাবে দেখতে পারেন। কোডল্যাবের পরিশিষ্ট অংশে এ বিষয়ে আরও বিস্তারিত তথ্য রয়েছে।
TensorBoard-এ মডেল প্রশিক্ষণের তথ্য দেখুন
ট্রেনিং ধাপটি সম্পন্ন হয়ে গেলে, এর Visualizations ট্যাবটি নির্বাচন করুন এবং নীল রঙের Start TensorBoard বোতামটিতে ক্লিক করুন, এরপর এটি প্রস্তুত হয়ে গেলে Open Tensorboard-এ ক্লিক করুন।


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

আর্টিফ্যাক্টগুলোর জন্য, আপনি একটি ওভারভিউ প্যানেল এবং একটি লিনিয়েজ এক্সপ্লোরার প্যানেল উভয়ই দেখতে পারেন।


পাইপলাইন দ্বারা তৈরি ওয়েব অ্যাপটি খুলুন এবং কিছু পূর্বাভাস তৈরি করুন।
পাইপলাইনের সর্বশেষ ধাপে একটি ওয়েব অ্যাপ স্থাপন করা হয়, যা পূর্বাভাস দেওয়ার জন্য টিএফ সার্ভিং (TF Serving) -এর মাধ্যমে পরিবেশিত প্রশিক্ষিত মডেলটিকে কোয়েরি করার জন্য একটি ইউজার ইন্টারফেস (UI) প্রদান করে।
পাইপলাইনটি সম্পন্ন হওয়ার পর, ওয়েব অ্যাপের সার্ভিসে পোর্ট-ফরোয়ার্ডিং করে সংযোগ স্থাপন করুন (আমরা পোর্ট-ফরোয়ার্ডিং করছি কারণ, এই কোডল্যাবের জন্য, ওয়েবঅ্যাপ সার্ভিসটিতে কোনো এক্সটার্নাল এন্ডপয়েন্ট সেট আপ করা নেই)।
ক্লাউড শেলে এই কমান্ডটি চালিয়ে সার্ভিসের নামটি খুঁজুন:
kubectl get services
তালিকায় ghsumm-*-webappsvc এর মতো একটি সার্ভিসের নাম খুঁজুন।
তারপর, ক্লাউড শেলে, নিচের কমান্ডটি পরিবর্তন করে আপনার webappsvc-এর নামটি ব্যবহার করে , নিম্নরূপে সেই পরিষেবাটিতে পোর্ট-ফরোয়ার্ড করুন:
kubectl port-forward svc/ghsumm-xxxxx-webappsvc 8080:80
পোর্ট-ফরোয়ার্ডিং চালু হয়ে গেলে, ক্লাউড শেল পেনের উপরের 'প্রিভিউ' আইকনে ক্লিক করুন এবং ড্রপডাউন থেকে "পোর্ট ৮০৮০-তে প্রিভিউ" বিকল্পটি বেছে নিন।

আপনার একটি নতুন ট্যাবে এইরকম একটি পৃষ্ঠা দেখতে পাওয়ার কথা:

একটি টেক্সট ব্লক পেতে Populate Random Issue বাটনে ক্লিক করুন। প্রশিক্ষিত মডেলটি চালু করতে এবং একটি পূর্বাভাস প্রদর্শন করতে Generate Title- এ ক্লিক করুন।

যদি আপনার পাইপলাইন প্যারামিটারগুলিতে একটি বৈধ গিটহাব টোকেন অন্তর্ভুক্ত থাকে, তাহলে আপনি বিকল্পভাবে দ্বিতীয় ফিল্ডে একটি গিটহাব ইউআরএল প্রবেশ করিয়ে "Generate Title"-এ ক্লিক করতে পারেন। যদি আপনি একটি বৈধ গিটহাব টোকেন সেট আপ না করে থাকেন, তাহলে শুধুমাত্র "Populate Random Issue" ফিল্ডটি ব্যবহার করুন।
৪. একটি এআই প্ল্যাটফর্ম নোটবুক থেকে একটি পাইপলাইন চালান।
আপনি KFP SDK ব্যবহার করে একটি Jupyter নোটবুক থেকেও ইন্টারেক্টিভভাবে Kubeflow Pipelines সংজ্ঞায়িত এবং রান করতে পারেন। AI Platform Notebooks , যা আমরা এই কোডল্যাবের জন্য ব্যবহার করব, এই কাজটি অত্যন্ত সহজ করে তোলে।
একটি নোটবুক ইনস্ট্যান্স তৈরি করুন
আমরা ক্লাউড শেল-এর এপিআই ব্যবহার করে একটি নোটবুক ইনস্ট্যান্স তৈরি করব। (বিকল্পভাবে, আপনি ক্লাউড কনসোলের মাধ্যমেও একটি নোটবুক তৈরি করতে পারেন। আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন)।
ক্লাউড শেলে নিম্নলিখিত এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন:
export INSTANCE_NAME="kfp-ghsumm" export VM_IMAGE_PROJECT="deeplearning-platform-release" export VM_IMAGE_FAMILY="tf2-2-3-cpu" export MACHINE_TYPE="n1-standard-4" export LOCATION="us-central1-c"
তারপর, ক্লাউড শেল থেকে নোটবুক ইনস্ট্যান্সটি তৈরি করার জন্য কমান্ডটি চালান:
gcloud beta notebooks instances create $INSTANCE_NAME \ --vm-image-project=$VM_IMAGE_PROJECT \ --vm-image-family=$VM_IMAGE_FAMILY \ --machine-type=$MACHINE_TYPE --location=$LOCATION
আপনি যখন প্রথমবার এই কমান্ডটি চালাবেন, তখন আপনার প্রোজেক্টের জন্য notebooks এপিআই (API) সক্রিয় করতে বলা হতে পারে। যদি এমন হয়, তবে উত্তরে ' y ' লিখুন।
কয়েক মিনিটের মধ্যেই আপনার নোটবুক সার্ভারটি চালু হয়ে যাবে। আপনি ক্লাউড কনসোলে আপনার নোটবুক ইনস্ট্যান্সগুলোর তালিকা দেখতে পাবেন।

কোডল্যাব নোটবুক আপলোড করুন
নোটবুক ইনস্ট্যান্সটি তৈরি হয়ে গেলে, কোডল্যাবের জুপিটার নোটবুকটি আপলোড করতে এই লিঙ্কে ক্লিক করুন। ব্যবহার করার জন্য নোটবুক ইনস্ট্যান্সটি নির্বাচন করুন। নোটবুকটি স্বয়ংক্রিয়ভাবে খুলে যাবে।
নোটবুকটি চালান।
ল্যাবের বাকি অংশের জন্য নোটবুকের নির্দেশাবলী অনুসরণ করুন । মনে রাখবেন যে, নোটবুকের বাকি অংশ চালানোর আগে এর "সেটআপ" অংশে আপনাকে নিজের মানগুলি পূরণ করতে হবে।
(আপনি যদি নিজের প্রজেক্ট ব্যবহার করেন, তাহলে ফিরে এসে এই ল্যাবের "পরিষ্কার-পরিচ্ছন্নতা" অংশটি করতে ভুলবেন না)।
৫. পরিষ্কার করুন
আপনি যদি একটি অস্থায়ী কোডল্যাব অ্যাকাউন্ট ব্যবহার করেন, তবে এটি করার প্রয়োজন নেই, কিন্তু আপনি যদি নিজের প্রজেক্ট ব্যবহার করেন, তবে আপনার পাইপলাইনস ইনস্টলেশন এবং নোটবুকটি বন্ধ করে দিতে পারেন।
পাইপলাইন GKE ক্লাস্টারটি বন্ধ করে দিন
আপনি ক্লাউড কনসোল থেকে পাইপলাইনস ক্লাস্টারটি মুছে ফেলতে পারেন। (যদি আপনি GKE ক্লাস্টারটি পুনরায় ব্যবহার করতে চান, তবে আপনার কাছে শুধু পাইপলাইনস ইনস্টলেশনটি মুছে ফেলার বিকল্পও রয়েছে)।
এআই নোটবুক ইনস্ট্যান্সটি মুছে ফেলুন
আপনি যদি কোডল্যাবের "নোটবুক" অংশটি চালিয়ে থাকেন, তাহলে ক্লাউড কনসোল থেকে নোটবুক ইনস্ট্যান্সটি ডিলিট বা স্টপ করতে পারেন।
ঐচ্ছিক: গিটহাব টোকেনটি মুছে ফেলুন
https://github.com/settings/tokens- এ যান এবং তৈরি হওয়া টোকেনটি মুছে ফেলুন।
৬. পরিশিষ্ট
কোডটি একবার দেখে নেওয়া যাক
পাইপলাইন সংজ্ঞায়িত করা
এই কোডল্যাবে ব্যবহৃত পাইপলাইনটি এখানে সংজ্ঞায়িত করা হয়েছে।
চলুন দেখে নেওয়া যাক এটিকে কীভাবে সংজ্ঞায়িত করা হয়েছে, এবং এর উপাদানগুলো (ধাপগুলো) কীভাবে সংজ্ঞায়িত করা হয়েছে। আমরা কিছু গুরুত্বপূর্ণ বিষয় তুলে ধরব, তবে আরও বিস্তারিত জানতে ডকুমেন্টেশন দেখুন।
কুবেফ্লো পাইপলাইন স্টেপগুলো কন্টেইনার-ভিত্তিক। একটি পাইপলাইন তৈরি করার সময়, আপনি আগে থেকে তৈরি কন্টেইনার ইমেজসহ প্রি-বিল্ট কম্পোনেন্ট ব্যবহার করতে পারেন, অথবা আপনার নিজের কম্পোনেন্ট তৈরি করতে পারেন। এই কোডল্যাবের জন্য, আমরা আমাদের নিজস্ব কম্পোনেন্ট তৈরি করেছি।
পাইপলাইনের চারটি ধাপ পুনঃব্যবহারযোগ্য কম্পোনেন্ট থেকে সংজ্ঞায়িত করা হয়েছে, যেগুলোকে তাদের কম্পোনেন্ট ডেফিনিশন ফাইলের মাধ্যমে অ্যাক্সেস করা হয়। এই প্রথম কোড স্নিপেটে, আমরা এই কম্পোনেন্ট ডেফিনিশন ফাইলগুলোকে তাদের URL-এর মাধ্যমে অ্যাক্সেস করছি এবং এই ডেফিনিশনগুলো ব্যবহার করে 'ops' তৈরি করছি, যা আমরা একটি পাইপলাইন ধাপ তৈরি করতে ব্যবহার করব।
import kfp.dsl as dsl
import kfp.gcp as gcp
import kfp.components as comp
...
copydata_op = comp.load_component_from_url(
'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/datacopy_component.yaml'
)
train_op = comp.load_component_from_url(
'https://raw.githubusercontent.com/kubeflow/examples/master/github_issue_summarization/pipelines/components/t2t/train_component.yaml'
)
নিচে ট্রেনিং অপ-এর একটি কম্পোনেন্ট ডেফিনিশন YAML ফরম্যাটে দেওয়া হলো। আপনি দেখতে পারেন যে এর ইনপুট, আউটপুট, কন্টেইনার ইমেজ এবং কন্টেইনার এন্ট্রিপয়েন্ট আর্গুমেন্টগুলো সংজ্ঞায়িত করা আছে।
name: Train T2T model
description: |
A Kubeflow Pipeline component to train a Tensor2Tensor
model
metadata:
labels:
add-pod-env: 'true'
inputs:
- name: train_steps
description: '...'
type: Integer
default: 2019300
- name: data_dir
description: '...'
type: GCSPath
- name: model_dir
description: '...'
type: GCSPath
- name: action
description: '...'
type: String
- name: deploy_webapp
description: '...'
type: String
outputs:
- name: launch_server
description: '...'
type: String
- name: train_output_path
description: '...'
type: GCSPath
- name: MLPipeline UI metadata
type: UI metadata
implementation:
container:
image: gcr.io/google-samples/ml-pipeline-t2ttrain:v3ap
args: [
--data-dir, {inputValue: data_dir},
--action, {inputValue: action},
--model-dir, {inputValue: model_dir},
--train-steps, {inputValue: train_steps},
--deploy-webapp, {inputValue: deploy_webapp},
--train-output-path, {outputPath: train_output_path}
]
env:
KFP_POD_NAME: "{{pod.name}}"
fileOutputs:
launch_server: /tmp/output
MLPipeline UI metadata: /mlpipeline-ui-metadata.json
আপনি dsl.ContainerOp কনস্ট্রাক্টরের মাধ্যমেও একটি পাইপলাইন স্টেপ সংজ্ঞায়িত করতে পারেন, যেমনটি আমরা নিচে দেখব।
নিচে পাইপলাইন সংজ্ঞার মূল অংশটি দেওয়া হলো। আমরা পাইপলাইনের ইনপুটগুলো (এবং তাদের ডিফল্ট মান) নির্ধারণ করছি। এরপর আমরা পাইপলাইনের ধাপগুলো নির্ধারণ করি। বেশিরভাগের জন্য আমরা উপরে সংজ্ঞায়িত 'ops' ব্যবহার করছি, তবে আমরা ContainerOp মাধ্যমে ইনলাইনে একটি 'serve' ধাপও সংজ্ঞায়িত করছি, যেখানে কন্টেইনার ইমেজ এবং এন্ট্রিপয়েন্ট আর্গুমেন্টগুলো সরাসরি উল্লেখ করা হয়েছে।
আপনি দেখতে পাচ্ছেন যে train , log_model , এবং serve ধাপগুলো পূর্ববর্তী ধাপগুলোর আউটপুটকে ইনপুট হিসেবে ব্যবহার করছে। এটি কীভাবে নির্দিষ্ট করা হয়েছে সে সম্পর্কে আপনি এখানে আরও পড়তে পারেন।
@dsl.pipeline(
name='Github issue summarization',
description='Demonstrate Tensor2Tensor-based training and TF-Serving'
)
def gh_summ( #pylint: disable=unused-argument
train_steps: 'Integer' = 2019300,
project: str = 'YOUR_PROJECT_HERE',
github_token: str = 'YOUR_GITHUB_TOKEN_HERE',
working_dir: 'GCSPath' = 'gs://YOUR_GCS_DIR_HERE',
checkpoint_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/model_output_tbase.bak2019000/',
deploy_webapp: str = 'true',
data_dir: 'GCSPath' = 'gs://aju-dev-demos-codelabs/kubecon/t2t_data_gh_all/'
):
copydata = copydata_op(
data_dir=data_dir,
checkpoint_dir=checkpoint_dir,
model_dir='%s/%s/model_output' % (working_dir, dsl.RUN_ID_PLACEHOLDER),
action=COPY_ACTION,
)
train = train_op(
data_dir=data_dir,
model_dir=copydata.outputs['copy_output_path'],
action=TRAIN_ACTION, train_steps=train_steps,
deploy_webapp=deploy_webapp
)
serve = dsl.ContainerOp(
name='serve',
image='gcr.io/google-samples/ml-pipeline-kubeflow-tfserve:v6',
arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
"--model_path", train.outputs['train_output_path']
]
)
train.set_gpu_limit(1)
উল্লেখ্য যে, 'train' ধাপটি ক্লাস্টারের এমন একটি নোডে চালাতে হবে যেখানে অন্তত ১টি GPU উপলব্ধ আছে।
train.set_gpu_limit(1)
পাইপলাইনের চূড়ান্ত ধাপটি— যা ইনলাইনেও সংজ্ঞায়িত— শর্তসাপেক্ষ। এটি ' serve ' ধাপটি শেষ হওয়ার পরে চলবে, শুধুমাত্র যদি ট্রেনিং ধাপের launch_server আউটপুট 'true' স্ট্রিংটি হয়। এটি 'prediction web app' চালু করে, যা আমরা প্রশিক্ষিত T2T মডেল থেকে সমস্যার সারাংশ অনুরোধ করতে ব্যবহার করেছিলাম।
with dsl.Condition(train.outputs['launch_server'] == 'true'):
webapp = dsl.ContainerOp(
name='webapp',
image='gcr.io/google-samples/ml-pipeline-webapp-launcher:v1',
arguments=["--model_name", 'ghsumm-%s' % (dsl.RUN_ID_PLACEHOLDER,),
"--github_token", github_token]
)
webapp.after(serve)
কম্পোনেন্ট কন্টেইনার ইমেজ সংজ্ঞা
Kubeflow Pipeline ডকুমেন্টেশনে আপনার নিজস্ব কম্পোনেন্ট তৈরির জন্য কিছু সেরা অনুশীলন বর্ণনা করা হয়েছে। এই প্রক্রিয়ার অংশ হিসেবে, আপনাকে একটি কন্টেইনার ইমেজ সংজ্ঞায়িত এবং বিল্ড করতে হবে। এই কোডল্যাবের পাইপলাইনের কম্পোনেন্ট ধাপগুলো আপনি এখানে দেখতে পারেন। Dockerfile-এর সংজ্ঞাগুলো containers সাবডিরেক্টরিতে রয়েছে, যেমন এখানে ।
প্রশিক্ষণের জন্য জিপিইউ সহ প্রিএমপ্টিবল ভিএম ব্যবহার করুন
প্রিএমপ্টিবল ভিএম হলো কম্পিউট ইঞ্জিন ভিএম ইনস্ট্যান্স, যা সর্বোচ্চ ২৪ ঘণ্টা পর্যন্ত স্থায়ী হয় এবং এর প্রাপ্যতার কোনো নিশ্চয়তা দেয় না। প্রিএমপ্টিবল ভিএম-এর মূল্য সাধারণ কম্পিউট ইঞ্জিন ভিএম-এর চেয়ে কম।
গুগল কুবারনেটিস ইঞ্জিন (GKE) ব্যবহার করে প্রিএমপ্টিবল ভিএম (preemptible VM) সহ একটি ক্লাস্টার বা নোড পুল সেট আপ করা সহজ। আপনি প্রিএমপ্টিবল ইনস্ট্যান্সগুলোর সাথে জিপিইউ (GPU) সংযুক্ত করে এই ধরনের একটি নোড পুল তৈরি করতে পারেন। এগুলো সাধারণ জিপিইউ-সক্ষম নোডের মতোই কাজ করে, কিন্তু জিপিইউগুলো শুধুমাত্র ইনস্ট্যান্সটির জীবনকাল পর্যন্ত স্থায়ী থাকে।
আপনি নিম্নলিখিতের মতো একটি কমান্ড চালিয়ে, আপনার ক্লাস্টারের নাম ও জোন দিয়ে নিম্নলিখিত কমান্ডটি সম্পাদনা করে, এবং আপনার প্রয়োজন অনুযায়ী অ্যাক্সিলারেটরের ধরন ও সংখ্যা সমন্বয় করে আপনার ক্লাস্টারের জন্য একটি প্রিএমপ্টিবল, জিপিইউ-সক্ষম নোড পুল সেট আপ করতে পারেন। আপনি ঐচ্ছিকভাবে বর্তমান ওয়ার্কলোডের উপর ভিত্তি করে নোড পুলটিকে অটোস্কেল করার জন্য সংজ্ঞায়িত করতে পারেন।
gcloud container node-pools create preemptible-gpu-pool \
--cluster=<your-cluster-name> \
--zone <your-cluster-zone> \
--enable-autoscaling --max-nodes=4 --min-nodes=0 \
--machine-type n1-highmem-8 \
--preemptible \
--node-taints=preemptible=true:NoSchedule \
--scopes cloud-platform --verbosity error \
--accelerator=type=nvidia-tesla-k80,count=4
এছাড়াও আপনি ক্লাউড কনসোলের মাধ্যমে একটি নোড পুল সেট আপ করতে পারেন।
প্রিএম্পটিবল GKE নোড ব্যবহার করে এমন একটি কুবেফ্লো পাইপলাইন সংজ্ঞায়িত করা
আপনি যদি GKE-তে Kubeflow চালান, তাহলে এখন Kubeflow Pipelines সংজ্ঞায়িত করা এবং চালানো সহজ, যেখানে এক বা একাধিক পাইপলাইন ধাপ (কম্পোনেন্ট) প্রিএমপ্টিবল নোডে চলে , যা একটি জব চালানোর খরচ কমিয়ে দেয়। প্রিএমপ্টিবল ভিএম ব্যবহার করে সঠিক ফলাফল পাওয়ার জন্য, যে ধাপগুলোকে আপনি প্রিএমপ্টিবল হিসেবে চিহ্নিত করবেন, সেগুলোকে হয় আইডম্পোটেন্ট হতে হবে (অর্থাৎ, যদি আপনি একটি ধাপ একাধিকবার চালান, তবে এটি একই ফলাফল দেবে), অথবা চেকপয়েন্ট ব্যবস্থা থাকতে হবে যাতে ধাপটি বাধাগ্রস্ত হলে যেখান থেকে থেমেছিল সেখান থেকে আবার শুরু করতে পারে।
যখন আপনি একটি Kubeflow Pipeline সংজ্ঞায়িত করছেন, তখন op-টিকে এইভাবে পরিবর্তন করে নির্দেশ করতে পারেন যে একটি নির্দিষ্ট ধাপ একটি preemptible নোডে চলবে:
your_pipelines_op.apply(gcp.use_preemptible_nodepool())
বিস্তারিত জানতে ডকুমেন্টেশন দেখুন।
নোডটি প্রি-এম্পটেড হলে আপনি সম্ভবত ধাপটি কিছু সংখ্যক বার পুনরায় চেষ্টা করতে চাইবেন। আপনি এটি নিম্নোক্তভাবে করতে পারেন— এখানে, আমরা ৫ বার পুনরায় চেষ্টার কথা উল্লেখ করছি।
your_pipelines_op.set_gpu_limit(1).apply(gcp.use_preemptible_nodepool()).set_retry(5)
এই কোডল্যাবে ব্যবহৃত কুবেফ্লো পাইপলাইনটি সম্পাদনা করে ট্রেনিং ধাপটি একটি প্রিএমপ্টিবল ভিএম-এ চালানোর চেষ্টা করুন।
অতিরিক্তভাবে একটি প্রিএমপ্টিবল নোডপুল ব্যবহার করতে (উপরে নির্দেশিত হিসাবে আপনি একটি তৈরি করেছেন কিনা তা নিশ্চিত করুন) এবং ৫ বার পুনরায় চেষ্টা করার জন্য পাইপলাইন স্পেসিফিকেশনের নিম্নলিখিত লাইনটি পরিবর্তন করুন:
train.set_gpu_limit(1)
এরপর, পাইপলাইনটি পুনরায় কম্পাইল করুন, নতুন সংস্করণটি আপলোড করুন (এটিকে একটি নতুন নাম দিন), এবং তারপর পাইপলাইনের নতুন সংস্করণটি চালান।

