কুবেফ্লো পাইপলাইন - গিটহাব ইস্যু সারসংক্ষেপ

1. ভূমিকা

Kubeflow হল Kubernetes- এর জন্য একটি মেশিন লার্নিং টুলকিট। প্রকল্পটি Kubernetes-এ সহজ, বহনযোগ্য, এবং স্কেলযোগ্য মেশিন লার্নিং (ML) কর্মপ্রবাহের স্থাপনার জন্য নিবেদিত। লক্ষ্য হল বিভিন্ন পরিকাঠামোতে ML-এর জন্য সর্বোত্তম-প্রজাতির ওপেন-সোর্স সিস্টেম স্থাপন করার একটি সহজ উপায় প্রদান করা।

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

আপনি কি নির্মাণ করবেন

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

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

আপনি কি শিখবেন

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

  • একটি GKE ক্লাস্টারে কুবেফ্লো পাইপলাইনগুলি কীভাবে ইনস্টল করবেন
  • কুবেফ্লো পাইপলাইনগুলি ব্যবহার করে এমএল ওয়ার্কফ্লোগুলি কীভাবে তৈরি এবং চালানো যায়
  • একটি এআই প্ল্যাটফর্ম নোটবুক থেকে কীভাবে পাইপলাইনগুলি সংজ্ঞায়িত এবং চালানো যায়

আপনি কি প্রয়োজন হবে

2. সেটআপ

মেঘের শেল

ব্রাউজারে GCP কনসোলে যান এবং আপনার প্রোজেক্টের শংসাপত্র দিয়ে লগ ইন করুন:

প্রয়োজনে "একটি প্রকল্প নির্বাচন করুন" এ ক্লিক করুন, যাতে আপনি আপনার কোডল্যাব প্রকল্পের সাথে কাজ করছেন।

4f23e1fe87a47cb2.png

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

ecf212797974dd31.png

আপনি যখন ক্লাউড শেল শুরু করবেন, এটি আপনাকে যে প্রকল্পটি ব্যবহার করতে সেট করেছে তার নাম বলবে। এই সেটিং সঠিক কিনা পরীক্ষা করুন।

আপনার প্রোজেক্ট আইডি খুঁজতে, GCP কনসোলের হোম প্যানেলে যান। যদি স্ক্রীনটি খালি থাকে তবে একটি ড্যাশবোর্ড তৈরি করতে প্রম্পটে 'হ্যাঁ' এ ক্লিক করুন।

115cdf745978ad.png

তারপর, ক্লাউড শেল টার্মিনালে, সঠিক প্রজেক্ট ব্যবহার করার জন্য 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 টোকেন তৈরি করুন**

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

  1. https://github.com/settings/tokens- এ নেভিগেট করুন এবং কোনো সুযোগ ছাড়াই একটি নতুন টোকেন তৈরি করুন।
  2. নিরাপদ কোথাও সংরক্ষণ করুন। আপনি যদি এটি হারান, তাহলে আপনাকে মুছে ফেলতে হবে এবং একটি নতুন তৈরি করতে হবে৷

আপনি যদি এই ধাপটি এড়িয়ে যান, ল্যাবটি এখনও কাজ করবে - আপনার মডেল পরীক্ষা করার জন্য ইনপুট ডেটা তৈরি করার জন্য আপনি আপনার বিকল্পগুলিতে একটু বেশি সীমাবদ্ধ থাকবেন৷

ঐচ্ছিক: দরকারী ড্যাশবোর্ড পিন করুন

GCP কনসোলে, সহজে অ্যাক্সেসের জন্য Kubernetes ইঞ্জিন এবং স্টোরেজ ড্যাশবোর্ডগুলি পিন করুন।

2a50622902d75f6a.png

একটি এআই প্ল্যাটফর্ম পাইপলাইন (হোস্টেড কুবেফ্লো পাইপলাইন) ইনস্টলেশন তৈরি করুন

KFP ইনস্টল সহ একটি GKE ইন্সট্যান্স সেট আপ করতে এখানে 'আপনি শুরু করার আগে' এবং 'আপনার দৃষ্টান্ত সেট আপ করুন' বিভাগে নির্দেশাবলী অনুসরণ করুন। ডকুমেন্টেশনে নির্দেশিত হিসাবে নিম্নলিখিত ক্লাউড API-এ অ্যাক্সেসের অনুমতি দিন বাক্সটি চেক করতে ভুলবেন না । (যদি আপনি না করেন, উদাহরণ পাইপলাইন সফলভাবে চালানো হবে না)। default হিসাবে ইনস্টলেশন নেমস্পেস ছেড়ে দিন।

আপনাকে একটি জোন বাছাই করতে হবে যা Nvidia k80s সমর্থন করে। আপনি ডিফল্ট হিসাবে us-central1-a বা us-central1-c ব্যবহার করতে পারেন।

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

6f0729a4fdee88ac.png

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 পাইপলাইনস ড্যাশবোর্ডে ক্লাস্টারের নামের উপর ক্লিক করে এর GKE পৃষ্ঠাতে যান, তারপর পৃষ্ঠার শীর্ষে "সংযোগ করুন" এ ক্লিক করুন। পপআপ থেকে, আপনার ক্লাউড শেলে কমান্ডটি পেস্ট করুন।

এটি আপনার kubectl প্রসঙ্গ কনফিগার করে যাতে আপনি আপনার ক্লাস্টারের সাথে ইন্টারঅ্যাক্ট করতে পারেন। কনফিগারেশন যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান:

kubectl get nodes -o wide

আপনি " Ready " স্থিতি সহ তালিকাভুক্ত নোড এবং নোডের বয়স, সংস্করণ, বাহ্যিক আইপি ঠিকানা, OS চিত্র, কার্নেল সংস্করণ এবং কন্টেইনার রানটাইম সম্পর্কে অন্যান্য তথ্য দেখতে পাবেন৷

জিপিইউ-সক্ষম নোড পুলগুলিতে এনভিডিয়া ড্রাইভার ইনস্টল করতে ক্লাস্টারটি কনফিগার করুন

এর পরে, আমরা ক্লাস্টারে একটি ডেমনসেট প্রয়োগ করব, যা যেকোনো GPU-সক্ষম ক্লাস্টার নোডগুলিতে Nvidia ড্রাইভার ইনস্টল করবে:

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 নোড পুল তৈরি করুন

তারপর, আমরা 1 এর আকার সহ একটি 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

3. পাইপলাইন ড্যাশবোর্ড থেকে একটি পাইপলাইন চালান৷

পাইপলাইন ড্যাশবোর্ড খুলুন

ক্লাউড কনসোলে, যদি আপনি ইতিমধ্যে সেখানে না থাকেন তবে পাইপলাইন প্যানেলে যান৷ তারপরে আপনার ইনস্টলেশনের জন্য " ওপেন পাইপলাইনস ড্যাশবোর্ড " এ ক্লিক করুন এবং বাম মেনু বারে পাইপলাইনে ক্লিক করুন। যদি আপনি একটি লোড ত্রুটি পান, ট্যাব রিফ্রেশ করুন. আপনি এই মত একটি নতুন পৃষ্ঠা দেখতে হবে:

7bb5a9cf0773c3bc.png

পাইপলাইনের বর্ণনা

আপনি যে পাইপলাইনটি চালাবেন তার বেশ কয়েকটি ধাপ রয়েছে (বিস্তারিত জানার জন্য এই কোডল্যাবের পরিশিষ্ট দেখুন):

  1. একটি বিদ্যমান মডেল চেকপয়েন্ট আপনার বালতি কপি করা হয়.
  2. একটি Tensor2Tensor মডেলকে প্রি-প্রসেসড ডেটা ব্যবহার করে প্রশিক্ষণ দেওয়া হয়।
  • প্রথম ধাপে কপি করা বিদ্যমান মডেলের চেকপয়েন্ট থেকে প্রশিক্ষণ শুরু হয়, তারপর আরও কয়েকশ ধাপের জন্য ট্রেন চলে। (কোডল্যাব চলাকালীন এটিকে পুরোপুরি প্রশিক্ষণ দিতে খুব বেশি সময় লাগবে)।
  • ট্রেনিং শেষ হলে, পাইপলাইন স্টেপ মডেলটিকে টেনসরফ্লো পরিবেশনের জন্য উপযুক্ত ফর্মে রপ্তানি করে।
  1. একটি টেনসরফ্লো-সার্ভিং উদাহরণ সেই মডেলটি ব্যবহার করে স্থাপন করা হয়েছে।
  2. ভবিষ্যদ্বাণী পুনরুদ্ধার করার জন্য পরিবেশিত মডেলের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি ওয়েব অ্যাপ চালু করা হয়েছে।

পাইপলাইন ডাউনলোড এবং কম্পাইল করুন

এই বিভাগে, আমরা দেখব কিভাবে একটি পাইপলাইন সংজ্ঞা কম্পাইল করা যায়। আমাদের প্রথমে যা করতে হবে তা হল 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-তে, আপলোড পাইপলাইনে ক্লিক করুন এবং URL দ্বারা আমদানি নির্বাচন করুন। অনুলিপি করুন, তারপরে নিম্নলিখিত URL-এ পেস্ট করুন, যা আপনি এইমাত্র কম্পাইল করা একই পাইপলাইনের দিকে নির্দেশ করে। (ক্লাউড শেল থেকে একটি ফাইল আপলোড করার জন্য এটি কয়েকটি অতিরিক্ত পদক্ষেপ, তাই আমরা একটি শর্টকাট নিচ্ছি)।

https://storage.googleapis.com/aju-dev-demos-codelabs/KF/compiled_pipelines/gh_summ_hosted_kfp.py.tar.gz

পাইপলাইনের একটি নাম দিন (যেমন gh_summ )।

867fdbe248d13bab.png

পাইপলাইন চালান

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

d4b5b1a043d32d4a.png

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

d9f7d2177efad53.png

এটি একটি পৃষ্ঠা নিয়ে আসবে যেখানে আপনি একটি রানের জন্য পরামিতি লিখতে পারেন এবং এটি শুরু করতে পারেন।

আপনি পরামিতি পূরণ করতে সাহায্য করার জন্য ক্লাউড শেলে নিম্নলিখিত কমান্ডগুলি চালাতে চাইতে পারেন।

gcloud config get-value project
echo "gs://${BUCKET_NAME}/codelab"

রান নামটি স্বয়ংক্রিয়ভাবে পূরণ হবে, তবে আপনি যদি চান তবে আপনি এটিকে একটি ভিন্ন নাম দিতে পারেন।

তারপর তিনটি পরামিতি ক্ষেত্র পূরণ করুন:

  • project
  • (ঐচ্ছিক) github-token
  • working-dir

ওয়ার্কিং-ডির-এর জন্য, আপনার তৈরি করা GCS বাকেটের নিচে কিছু পাথ লিখুন। ' gs:// ' উপসর্গ অন্তর্ভুক্ত করুন। github-token ক্ষেত্রের জন্য, হয় টোকেনটি লিখুন যা আপনি ঐচ্ছিকভাবে আগে তৈরি করেছিলেন, অথবা প্লেসহোল্ডার স্ট্রিংটি এমনভাবে ছেড়ে দিন যেন আপনি একটি টোকেন তৈরি করেননি।

8676afba6fd32ac1.png

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

db2dc819ac0f5c1.png

পাইপলাইনের সংজ্ঞা দেখুন

পাইপলাইন চলাকালীন, আপনি এটিকে কীভাবে একত্রিত করা হয়েছে এবং এটি কী করছে তা ঘনিষ্ঠভাবে দেখতে চাইতে পারেন। কোডল্যাবের পরিশিষ্ট বিভাগে আরও বিশদ রয়েছে।

টেনসরবোর্ডে মডেল প্রশিক্ষণের তথ্য দেখুন

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

6cb511540a64b9e5.png

d55eb03c4d04f64d.png

আর্টিফ্যাক্ট এবং এক্সিকিউশন ড্যাশবোর্ড এক্সপ্লোর করুন

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

3002c4055cc8960b.png

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

7885776e899d1183.png

40c4f7e5b6545dec.png

পাইপলাইন দ্বারা তৈরি ওয়েব অ্যাপটি আনুন এবং কিছু ভবিষ্যদ্বাণী করুন

পাইপলাইনের শেষ ধাপটি একটি ওয়েব অ্যাপ স্থাপন করে, যা প্রশিক্ষিত মডেলের অনুসন্ধানের জন্য একটি UI প্রদান করে — TF Serving- এর মাধ্যমে পরিবেশিত হয় — ভবিষ্যদ্বাণী করতে।

পাইপলাইন সম্পূর্ণ হওয়ার পরে, ওয়েব অ্যাপের সাথে এর পরিষেবাতে পোর্ট-ফরোয়ার্ড করে সংযোগ করুন (আমরা পোর্ট-ফরোয়ার্ড করছি কারণ, এই কোডল্যাবের জন্য, ওয়েবঅ্যাপ পরিষেবাটি একটি বাহ্যিক এন্ডপয়েন্ট থাকার জন্য সেট আপ করা হয়নি)।

ক্লাউড শেলে এই কমান্ডটি চালিয়ে পরিষেবার নামটি খুঁজুন:

kubectl get services

এইরকম একটি পরিষেবার নাম দেখুন: তালিকায় ghsumm-*-webappsvc

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

kubectl port-forward svc/ghsumm-xxxxx-webappsvc 8080:80

একবার পোর্ট-ফরওয়ার্ডিং চালু হলে, ক্লাউড শেল ফলকের উপরে 'প্রিভিউ' আইকনে ক্লিক করুন এবং ড্রপডাউনে, "পোর্ট 8080 এর পূর্বরূপ" ক্লিক করুন।

65572bb3b12627cc.png

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

902ad2d555281508.png

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

b7c39ce51ee603bd.png

যদি আপনার পাইপলাইন প্যারামিটারে একটি বৈধ GitHub টোকেন অন্তর্ভুক্ত থাকে, তাহলে আপনি পর্যায়ক্রমে দ্বিতীয় ক্ষেত্রে একটি GitHub URL প্রবেশ করার চেষ্টা করতে পারেন, তারপর "শিরোনাম তৈরি করুন" এ ক্লিক করুন৷ আপনি যদি একটি বৈধ GitHub টোকেন সেট আপ না করে থাকেন তবে শুধুমাত্র "পপুলেট র্যান্ডম ইস্যু" ক্ষেত্রটি ব্যবহার করুন৷

4. একটি AI প্ল্যাটফর্ম নোটবুক থেকে একটি পাইপলাইন চালান৷

এছাড়াও আপনি KFP SDK ব্যবহার করে জুপিটার নোটবুক থেকে কুবেফ্লো পাইপলাইনগুলিকে ইন্টারেক্টিভভাবে সংজ্ঞায়িত এবং চালাতে পারেন। এআই প্ল্যাটফর্ম নোটবুক , যা আমরা এই কোডল্যাবের জন্য ব্যবহার করব, এটি খুব সহজবোধ্য করে তোলে।

একটি নোটবুক উদাহরণ তৈরি করুন

আমরা এর API ব্যবহার করে ক্লাউড শেল থেকে একটি নোটবুক উদাহরণ তৈরি করব। (বিকল্পভাবে, আপনি ক্লাউড কনসোলের মাধ্যমে একটি নোটবুক তৈরি করতে পারেন। আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন)।

ক্লাউড শেলে নিম্নলিখিত পরিবেশ ভেরিয়েবল সেট করুন:

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 ' উত্তর দিন।

কয়েক মিনিট পরে, আপনার নোটবুক সার্ভার আপ এবং চলমান হবে। আপনি ক্লাউড কনসোলে তালিকাভুক্ত আপনার নোটবুকের উদাহরণ দেখতে পারেন।

206adf3905413dfa.png

কোডল্যাব নোটবুক আপলোড করুন

নোটবুকের উদাহরণ তৈরি হওয়ার পরে, কোডল্যাবের জুপিটার নোটবুক আপলোড করতে এই লিঙ্কে ক্লিক করুন। ব্যবহার করার জন্য নোটবুকের উদাহরণ নির্বাচন করুন। নোটবুক স্বয়ংক্রিয়ভাবে খোলা হবে।

নোটবুকটি চালান

ল্যাবের বাকি অংশের জন্য নোটবুকের নির্দেশাবলী অনুসরণ করুন । মনে রাখবেন যে নোটবুকের "সেটআপ" অংশে, বাকি নোটবুক চালানোর আগে আপনাকে আপনার নিজস্ব মান পূরণ করতে হবে।

(যদি আপনি আপনার নিজের প্রকল্প ব্যবহার করছেন, তবে ফিরে আসতে ভুলবেন না এবং এই ল্যাবের "ক্লিন আপ" বিভাগটি করুন)।

5. পরিষ্কার করুন

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

পাইপলাইন GKE ক্লাস্টার নামিয়ে নিন

আপনি ক্লাউড কনসোল থেকে পাইপলাইন ক্লাস্টার মুছে ফেলতে পারেন। (আপনি যদি GKE ক্লাস্টার পুনরায় ব্যবহার করতে চান তবে আপনার কাছে পাইপলাইন ইনস্টলেশন মুছে ফেলার বিকল্প রয়েছে)।

AI নোটবুকের উদাহরণ মুছুন

আপনি যদি কোডল্যাবের "নোটবুক" অংশটি চালান, তাহলে আপনি ক্লাউড কনসোল থেকে নোটবুকের উদাহরণটি মুছে ফেলতে বা থামাতে পারেন৷

ঐচ্ছিক: GitHub টোকেন সরান

https://github.com/settings/tokens- এ নেভিগেট করুন এবং জেনারেট করা টোকেনটি সরান।

6. পরিশিষ্ট

কোডের দিকে তাকান

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

এই কোডল্যাবে ব্যবহৃত পাইপলাইনটি এখানে সংজ্ঞায়িত করা হয়েছে।

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

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

পাইপলাইনের চারটি ধাপ পুনঃব্যবহারযোগ্য উপাদান থেকে সংজ্ঞায়িত করা হয়েছে, যা তাদের উপাদান সংজ্ঞা ফাইলের মাধ্যমে অ্যাক্সেস করা হয়েছে। এই প্রথম কোড স্নিপেটে, আমরা এই উপাদানগুলির সংজ্ঞা ফাইলগুলিকে তাদের URL এর মাধ্যমে অ্যাক্সেস করছি, এবং এই সংজ্ঞাগুলি ব্যবহার করে 'অপস' তৈরি করতে যা আমরা একটি পাইপলাইন পদক্ষেপ তৈরি করতে ব্যবহার করব।

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 কনস্ট্রাক্টরের মাধ্যমে একটি পাইপলাইন ধাপও সংজ্ঞায়িত করতে পারেন, যেমনটি আমরা নীচে দেখব।

নীচে পাইপলাইনের সংজ্ঞার বেশিরভাগ অংশ রয়েছে। আমরা পাইপলাইন ইনপুট (এবং তাদের ডিফল্ট মান) সংজ্ঞায়িত করছি। তারপর আমরা পাইপলাইন পদক্ষেপ সংজ্ঞায়িত. বেশিরভাগের জন্য আমরা উপরে সংজ্ঞায়িত 'অপস' ব্যবহার করছি, কিন্তু আমরা ContainerOp এর মাধ্যমে একটি 'পরিষেবা' ধাপ ইনলাইন সংজ্ঞায়িত করছি, সরাসরি কন্টেইনার ইমেজ এবং এন্ট্রিপয়েন্ট আর্গুমেন্ট নির্দিষ্ট করে।

আপনি দেখতে পাচ্ছেন যে train , log_model , এবং serve stepগুলি ইনপুট হিসাবে আগের ধাপগুলি থেকে আউটপুটগুলি অ্যাক্সেস করছে৷ এটি এখানে কীভাবে নির্দিষ্ট করা হয়েছে সে সম্পর্কে আপনি আরও পড়তে পারেন।

@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)

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

  train.set_gpu_limit(1)

পাইপলাইনের চূড়ান্ত ধাপ- এছাড়াও ইনলাইন সংজ্ঞায়িত- শর্তসাপেক্ষ। এটি ' serve ' ধাপ শেষ হওয়ার পরে চলবে, শুধুমাত্র যদি ট্রেনিং স্টেপ launch_server আউটপুট স্ট্রিং 'ট্রু' হয়। এটি 'ভবিষ্যদ্বাণী ওয়েব অ্যাপ' চালু করে, যা আমরা প্রশিক্ষিত 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 পাইপলাইন ডকুমেন্টেশন আপনার নিজের উপাদান তৈরি করার জন্য কিছু সেরা অনুশীলন বর্ণনা করে। এই প্রক্রিয়ার অংশ হিসাবে, আপনাকে একটি ধারক ইমেজ সংজ্ঞায়িত এবং নির্মাণ করতে হবে। আপনি এখানে এই কোডল্যাবের পাইপলাইনের জন্য উপাদান পদক্ষেপগুলি দেখতে পারেন। ডকারফাইল সংজ্ঞাগুলি containers সাবডিরেক্টরিতে রয়েছে, যেমন এখানে

প্রশিক্ষণের জন্য জিপিইউ সহ অগ্রিম VM ব্যবহার করুন

অগ্রিমযোগ্য VM হল কম্পিউট ইঞ্জিন VM দৃষ্টান্ত যা সর্বাধিক 24 ঘন্টা স্থায়ী হয় এবং কোন উপলব্ধতার নিশ্চয়তা প্রদান করে না। প্রিমম্পিবল VM-এর দাম স্ট্যান্ডার্ড কম্পিউট ইঞ্জিন VM-এর চেয়ে কম।

Google Kubernetes Engine (GKE) এর সাথে, একটি ক্লাস্টার বা নোড পুল সেট আপ করা সহজ যা প্রিম্পিটিবল 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

এছাড়াও আপনি ক্লাউড কনসোলের মাধ্যমে একটি নোড পুল সেট আপ করতে পারেন।

একটি Kubeflow পাইপলাইন সংজ্ঞায়িত করা যা পূর্বনির্ধারিত GKE নোড ব্যবহার করে

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

যখন আপনি একটি Kubeflow পাইপলাইন সংজ্ঞায়িত করছেন, তখন আপনি নির্দেশ করতে পারেন যে একটি প্রদত্ত পদক্ষেপটি এইভাবে অপটি সংশোধন করে একটি প্রিম্পেটিবল নোডে চালানো উচিত:

your_pipelines_op.apply(gcp.use_preemptible_nodepool())

বিস্তারিত জানার জন্য ডকুমেন্টেশন দেখুন.

যদি নোডটি পূর্বনির্ধারিত হয় তবে আপনি সম্ভবত কয়েকবার পদক্ষেপটি পুনরায় চেষ্টা করতে চাইবেন। আপনি এটি নিম্নরূপ করতে পারেন— এখানে, আমরা 5টি পুনঃপ্রচেষ্টা উল্লেখ করছি।

your_pipelines_op.set_gpu_limit(1).apply(gcp.use_preemptible_nodepool()).set_retry(5)

এই কোডল্যাবে আমরা যে কুবেফ্লো পাইপলাইনটি ব্যবহার করেছি তা সম্পাদনা করার চেষ্টা করুন একটি প্রিম্পিটিবল VM-এ প্রশিক্ষণের ধাপ চালানোর জন্য।

পাইপলাইন স্পেসিফিকেশনে নিম্নলিখিত লাইনটি পরিবর্তন করুন অতিরিক্তভাবে উপরে একটি প্রিম্পিটিবল নোডপুল ব্যবহার করুন (নিশ্চিত করুন যে আপনি উপরে নির্দেশিত হিসাবে একটি তৈরি করেছেন) এবং 5 বার পুনরায় চেষ্টা করতে:

  train.set_gpu_limit(1)

তারপর, পাইপলাইনটি পুনরায় কম্পাইল করুন, নতুন সংস্করণ আপলোড করুন (এটিকে একটি নতুন নাম দিন), এবং তারপর পাইপলাইনের নতুন সংস্করণটি চালান।