1. ওভারভিউ
এই ল্যাবে, আপনি একটি পাইপলাইন তৈরি করতে Vertex AI ব্যবহার করবেন যা TensorFlow-এ একটি কাস্টম কেরাস মডেলকে প্রশিক্ষণ দেয়। আমরা তারপরে মডেল রান ট্র্যাক এবং তুলনা করার জন্য Vertex AI পরীক্ষায় উপলব্ধ নতুন কার্যকারিতা ব্যবহার করব যাতে হাইপারপ্যারামিটারের কোন সমন্বয় সেরা কার্যক্ষমতার ফলাফল দেয়।
আপনি কি শিখুন
আপনি কিভাবে শিখবেন:
- প্লেয়ার রেটিং (যেমন, রিগ্রেশন) ভবিষ্যদ্বাণী করতে একটি কাস্টম কেরাস মডেলকে প্রশিক্ষণ দিন
- স্কেলযোগ্য ML পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন
- একটি 5-পদক্ষেপ পাইপলাইন তৈরি করুন এবং চালান যা ক্লাউড স্টোরেজ থেকে ডেটা ইনজেস্ট করে, ডেটা স্কেল করে, মডেলকে প্রশিক্ষণ দেয়, এটিকে মূল্যায়ন করে এবং ফলস্বরূপ মডেলটিকে ক্লাউড স্টোরেজে আবার সংরক্ষণ করে
- মডেল এবং মডেল মেট্রিক্সের মতো মডেল আর্টিফ্যাক্টগুলি সংরক্ষণ করতে Vertex ML মেটাডেটা ব্যবহার করুন
- বিভিন্ন পাইপলাইন রানের ফলাফল তুলনা করতে Vertex AI পরীক্ষাগুলি ব্যবহার করুন
Google ক্লাউডে এই ল্যাবটি চালানোর জন্য মোট খরচ প্রায় $1 ।
2. ভার্টেক্স এআই-এর ভূমিকা
এই ল্যাবটি Google ক্লাউডে উপলব্ধ নতুন AI পণ্য অফার ব্যবহার করে। Vertex AI Google ক্লাউড জুড়ে ML অফারগুলিকে একটি নিরবচ্ছিন্ন বিকাশের অভিজ্ঞতায় সংহত করে৷ পূর্বে, অটোএমএল এবং কাস্টম মডেলগুলির সাথে প্রশিক্ষিত মডেলগুলি পৃথক পরিষেবার মাধ্যমে অ্যাক্সেসযোগ্য ছিল। নতুন অফারটি অন্যান্য নতুন পণ্যের সাথে একটি একক API-এ উভয়কে একত্রিত করে। আপনি বিদ্যমান প্রকল্পগুলিকে Vertex AI-তে স্থানান্তর করতে পারেন।
Vertex AI এন্ড-টু-এন্ড ML ওয়ার্কফ্লো সমর্থন করার জন্য বিভিন্ন পণ্য অন্তর্ভুক্ত করে। এই ল্যাবটি নীচে হাইলাইট করা পণ্যগুলিতে ফোকাস করবে: পরীক্ষা , পাইপলাইন , ML মেটাডেটা এবং ওয়ার্কবেঞ্চ
3. কেস ওভারভিউ ব্যবহার করুন
আমরা EA Sports' FIFA ভিডিও গেম সিরিজ থেকে প্রাপ্ত একটি জনপ্রিয় সকার ডেটাসেট ব্যবহার করব৷ এটি 2008-2016 মৌসুমের জন্য 25,000টিরও বেশি সকার ম্যাচ এবং 10,000+ খেলোয়াড় অন্তর্ভুক্ত করে। ডেটা অগ্রিম প্রসেস করা হয়েছে যাতে আপনি আরও সহজে মাটিতে দৌড়াতে পারেন। আপনি এই ডেটাসেটটি ল্যাব জুড়ে ব্যবহার করবেন যা এখন একটি পাবলিক ক্লাউড স্টোরেজ বালতিতে পাওয়া যাবে। কীভাবে ডেটাসেট অ্যাক্সেস করতে হয় সে সম্পর্কে আমরা কোডল্যাবে পরে আরও বিশদ প্রদান করব। আমাদের শেষ লক্ষ্য হল খেলার বিভিন্ন অ্যাকশন যেমন ইন্টারসেপশন এবং পেনাল্টির উপর ভিত্তি করে একজন খেলোয়াড়ের সামগ্রিক রেটিং অনুমান করা।
কেন ভার্টেক্স এআই পরীক্ষাগুলি ডেটা সায়েন্সের জন্য দরকারী?
ডেটা সায়েন্স প্রকৃতিতে পরীক্ষামূলক - তাদের সর্বোপরি বিজ্ঞানী বলা হয়। ভাল ডেটা বিজ্ঞানীরা হাইপোথিসিস চালিত, ট্রায়াল-এন্ড-এরর ব্যবহার করে বিভিন্ন হাইপোথিসিস পরীক্ষা করার জন্য এই আশায় যে ধারাবাহিক পুনরাবৃত্তির ফলে আরও কার্যকরী মডেল হবে।
যদিও ডেটা সায়েন্স দলগুলি পরীক্ষাকে গ্রহণ করেছে, তারা প্রায়শই তাদের কাজ এবং তাদের পরীক্ষামূলক প্রচেষ্টার মাধ্যমে উন্মোচিত "গোপন সস" ট্র্যাক রাখতে লড়াই করে। এটি কয়েকটি কারণে ঘটে:
- ট্র্যাকিং প্রশিক্ষণের কাজগুলি কষ্টকর হয়ে উঠতে পারে, যা কাজ করছে বনাম কী নয় তার দৃষ্টিশক্তি হারানো সহজ করে তোলে
- আপনি যখন ডেটা সায়েন্স টিম জুড়ে দেখেন তখন এই সমস্যাটি জটিল হয় কারণ সমস্ত সদস্য হয়তো পরীক্ষা-নিরীক্ষা ট্র্যাক করছে না বা অন্যদের সাথে তাদের ফলাফল ভাগ করে নিতে পারে না
- ডেটা ক্যাপচার সময় সাপেক্ষ এবং বেশিরভাগ দলই ম্যানুয়াল পদ্ধতি (যেমন, শীট বা ডক্স) ব্যবহার করে যার ফলে শিখতে অসঙ্গত এবং অসম্পূর্ণ তথ্য হয়
tl;dr: Vertex AI পরীক্ষাগুলি আপনার জন্য কাজ করে, আপনাকে আরও সহজে আপনার পরীক্ষাগুলি ট্র্যাক করতে এবং তুলনা করতে সাহায্য করে
গেমিংয়ের জন্য ভার্টেক্স এআই পরীক্ষা কেন?
গেমিং ঐতিহাসিকভাবে মেশিন লার্নিং এবং এমএল পরীক্ষার জন্য একটি খেলার মাঠ। গেমগুলি শুধুমাত্র প্রতিদিন বিলিয়ন রিয়েল টাইম ইভেন্ট তৈরি করে না কিন্তু তারা গেমের অভিজ্ঞতা উন্নত করতে, খেলোয়াড়দের ধরে রাখতে এবং তাদের প্ল্যাটফর্মে বিভিন্ন খেলোয়াড়দের মূল্যায়ন করতে ML এবং ML পরীক্ষা-নিরীক্ষার মাধ্যমে সেই সমস্ত ডেটা ব্যবহার করে। তাই আমরা ভেবেছিলাম একটি গেমিং ডেটাসেট আমাদের সামগ্রিক পরীক্ষা-নিরীক্ষা অনুশীলনের সাথে ভালভাবে ফিট করে।
4. আপনার পরিবেশ সেট আপ করুন
এই কোডল্যাব চালানোর জন্য আপনার একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্পের প্রয়োজন হবে যাতে বিলিং সক্ষম থাকে৷ একটি প্রকল্প তৈরি করতে, এখানে নির্দেশাবলী অনুসরণ করুন।
ধাপ 1: Compute Engine API সক্ষম করুন
কম্পিউট ইঞ্জিনে নেভিগেট করুন এবং সক্ষম নির্বাচন করুন যদি এটি ইতিমধ্যে সক্ষম না থাকে।
ধাপ 2: Vertex AI API সক্ষম করুন
আপনার ক্লাউড কনসোলের Vertex AI বিভাগে নেভিগেট করুন এবং Vertex AI API সক্ষম করুন ক্লিক করুন।
ধাপ 3: একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন
আপনার ক্লাউড কনসোলের ভার্টেক্স এআই বিভাগ থেকে, ওয়ার্কবেঞ্চে ক্লিক করুন:
নোটবুক API সক্রিয় করুন যদি এটি ইতিমধ্যে না থাকে।
একবার সক্রিয় হলে, ম্যানেজড নোটবুক ক্লিক করুন:
তারপর নতুন নোটবুক নির্বাচন করুন।
আপনার নোটবুকে একটি নাম দিন, এবং তারপর Advanced Settings এ ক্লিক করুন।
উন্নত সেটিংসের অধীনে, নিষ্ক্রিয় শাটডাউন সক্ষম করুন এবং মিনিটের সংখ্যা 60 এ সেট করুন। এর অর্থ হল আপনার নোটবুক ব্যবহার না করার সময় স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে যাতে আপনার অপ্রয়োজনীয় খরচ না হয়।
ধাপ 4: আপনার নোটবুক খুলুন
একবার উদাহরণ তৈরি হয়ে গেলে, JupyterLab খুলুন নির্বাচন করুন।
ধাপ 5: প্রমাণীকরণ (শুধুমাত্র প্রথমবার)
আপনি যখন প্রথমবার একটি নতুন উদাহরণ ব্যবহার করবেন, আপনাকে প্রমাণীকরণ করতে বলা হবে। এটি করার জন্য UI এর ধাপগুলি অনুসরণ করুন৷
ধাপ 6: উপযুক্ত কার্নেল নির্বাচন করুন
পরিচালিত-নোটবুক একটি একক UI-তে একাধিক কার্নেল প্রদান করে। Tensorflow 2 (স্থানীয়) এর জন্য কার্নেল নির্বাচন করুন।
5. আপনার নোটবুকে প্রাথমিক সেটআপ ধাপ
আপনার পাইপলাইন তৈরি করার আগে আপনার নোটবুকের মধ্যে আপনার পরিবেশ সেটআপ করার জন্য আপনাকে একাধিক অতিরিক্ত পদক্ষেপ নিতে হবে। এই পদক্ষেপগুলির মধ্যে রয়েছে: যেকোনো অতিরিক্ত প্যাকেজ ইনস্টল করা, ভেরিয়েবল সেট করা, আপনার ক্লাউড স্টোরেজ বালতি তৈরি করা, একটি পাবলিক স্টোরেজ বালতি থেকে গেমিং ডেটাসেট অনুলিপি করা এবং লাইব্রেরি আমদানি করা এবং অতিরিক্ত ধ্রুবক সংজ্ঞায়িত করা।
ধাপ 1: অতিরিক্ত প্যাকেজ ইনস্টল করুন
আমাদের অতিরিক্ত প্যাকেজ নির্ভরতা ইনস্টল করতে হবে যা বর্তমানে আপনার নোটবুক পরিবেশে ইনস্টল করা হয়নি। একটি উদাহরণ KFP SDK অন্তর্ভুক্ত।
!pip3 install --user --force-reinstall 'google-cloud-aiplatform>=1.15' -q --no-warn-conflicts
!pip3 install --user kfp -q --no-warn-conflicts
তারপরে আপনি নোটবুক কার্নেলটি পুনরায় চালু করতে চাইবেন যাতে আপনি আপনার নোটবুকের মধ্যে ডাউনলোড করা প্যাকেজগুলি ব্যবহার করতে পারেন।
# Automatically restart kernel after installs
import os
if not os.getenv("IS_TESTING"):
# Automatically restart kernel after installs
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
ধাপ 2: ভেরিয়েবল সেট করুন
আমরা আমাদের PROJECT_ID
সংজ্ঞায়িত করতে চাই। আপনি যদি আপনার Project_ID
না জানেন, তাহলে আপনি gcloud ব্যবহার করে আপনার PROJECT_ID
পেতে সক্ষম হতে পারেন৷
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)
অন্যথায়, এখানে আপনার PROJECT_ID
সেট করুন।
if PROJECT_ID == "" or PROJECT_ID is None:
PROJECT_ID = "[your-project-id]" # @param {type:"string"}
আমরা REGION
ভেরিয়েবল সেট করতে চাই, যা এই নোটবুকের বাকি অংশ জুড়ে ব্যবহৃত হয়। নীচে ভার্টেক্স এআই-এর জন্য সমর্থিত অঞ্চলগুলি রয়েছে৷ আমরা সুপারিশ করি যে আপনি আপনার নিকটতম অঞ্চলটি বেছে নিন।
- আমেরিকা: us-central1
- ইউরোপ: europe-west4
- এশিয়া প্যাসিফিক: asia-east1
অনুগ্রহ করে Vertex AI এর সাথে প্রশিক্ষণের জন্য একটি বহু-আঞ্চলিক বালতি ব্যবহার করবেন না। সমস্ত অঞ্চল সমস্ত Vertex AI পরিষেবাগুলির জন্য সমর্থন প্রদান করে না৷ ভার্টেক্স এআই অঞ্চল সম্পর্কে আরও জানুন।
#set your region
REGION = "us-central1" # @param {type: "string"}
অবশেষে আমরা একটি TIMESTAMP
ভেরিয়েবল সেট করব। এই ভেরিয়েবলগুলি তৈরি করা সংস্থানগুলিতে ব্যবহারকারীদের মধ্যে নামের দ্বন্দ্ব এড়াতে ব্যবহার করা হয়, আপনি প্রতিটি ইনস্ট্যান্স সেশনের জন্য একটি TIMESTAMP
তৈরি করেন এবং এই টিউটোরিয়ালে আপনার তৈরি করা সংস্থানগুলির নামের সাথে এটি যুক্ত করুন৷
#set timestamp to avoid collisions between multiple users
from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")
ধাপ 3: একটি ক্লাউড স্টোরেজ বালতি তৈরি করুন
আপনাকে একটি ক্লাউড স্টোরেজ স্টেজিং বালতি নির্দিষ্ট করতে এবং লিভারেজ করতে হবে। স্টেজিং বাকেট হল যেখানে আপনার ডেটাসেট এবং মডেল সংস্থানগুলির সাথে সম্পর্কিত সমস্ত ডেটা সেশন জুড়ে ধরে রাখা হয়৷
নিচে আপনার ক্লাউড স্টোরেজ বাকেটের নাম সেট করুন। আপনার প্রতিষ্ঠানের বাইরের প্রকল্পগুলি সহ সমস্ত Google ক্লাউড প্রকল্পগুলিতে বালতির নামগুলি অবশ্যই বিশ্বব্যাপী অনন্য হতে হবে৷
#set cloud storage bucket
BUCKET_NAME = "[insert bucket name here]" # @param {type:"string"}
BUCKET_URI = f"gs://{BUCKET_NAME}"
যদি আপনার বালতিটি ইতিমধ্যেই বিদ্যমান না থাকে তবে আপনি আপনার ক্লাউড স্টোরেজ বালতি তৈরি করতে নিম্নলিখিত সেলটি চালাতে পারেন।
! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI
তারপরে আপনি নিম্নলিখিত সেলটি চালিয়ে আপনার ক্লাউড স্টোরেজ বাকেটের অ্যাক্সেস যাচাই করতে পারেন।
#verify access
! gsutil ls -al $BUCKET_URI
ধাপ 4: আমাদের গেমিং ডেটাসেট কপি করুন
আগেই উল্লেখ করা হয়েছে, আপনি EA Sports হিট ভিডিও গেম, FIFA থেকে একটি জনপ্রিয় গেমিং ডেটাসেট ব্যবহার করবেন। আমরা আপনার জন্য প্রাক-প্রসেসিং কাজ করেছি তাই আপনাকে পাবলিক স্টোরেজ বাকেট থেকে ডেটাসেটটি কপি করতে হবে এবং এটি আপনার তৈরি করা একটিতে নিয়ে যেতে হবে।
# copy the data over to your cloud storage bucket
DATASET_URI = "gs://cloud-samples-data/vertex-ai/structured_data/player_data"
!gsutil cp -r $DATASET_URI $BUCKET_URI
ধাপ 5: লাইব্রেরি আমদানি করুন এবং অতিরিক্ত ধ্রুবক সংজ্ঞায়িত করুন
পরবর্তীতে আমরা Vertex AI, KFP ইত্যাদির জন্য আমাদের লাইব্রেরি আমদানি করতে চাই।
import logging
import os
import time
logger = logging.getLogger("logger")
logging.basicConfig(level=logging.INFO)
import kfp.v2.compiler as compiler
# Pipeline Experiments
import kfp.v2.dsl as dsl
# Vertex AI
from google.cloud import aiplatform as vertex_ai
from kfp.v2.dsl import Artifact, Input, Metrics, Model, Output, component
from typing import NamedTuple
আমরা অতিরিক্ত ধ্রুবকগুলিকেও সংজ্ঞায়িত করব যেগুলিকে আমরা নোটবুকের বাকি অংশে উল্লেখ করব যেমন আমাদের প্রশিক্ষণ ডেটার ফাইল পাথ(গুলি)৷
#import libraries and define constants
# Experiments
TASK = "regression"
MODEL_TYPE = "tensorflow"
EXPERIMENT_NAME = f"{PROJECT_ID}-{TASK}-{MODEL_TYPE}-{TIMESTAMP}"
# Pipeline
PIPELINE_URI = f"{BUCKET_URI}/pipelines"
TRAIN_URI = f"{BUCKET_URI}/player_data/data.csv"
LABEL_URI = f"{BUCKET_URI}/player_data/labels.csv"
MODEL_URI = f"{BUCKET_URI}/model"
DISPLAY_NAME = "experiments-demo-gaming-data"
BQ_DATASET = "player_data"
BQ_LOCATION = "US"
VIEW_NAME = 'dataset_test'
PIPELINE_JSON_PKG_PATH = "experiments_demo_gaming_data.json"
PIPELINE_ROOT = f"gs://{BUCKET_URI}/pipeline_root"
6. আসুন আমাদের পাইপলাইন তৈরি করি
এখন মজা শুরু হতে পারে এবং আমরা আমাদের প্রশিক্ষণ পাইপলাইন তৈরি করার জন্য Vertex AI ব্যবহার শুরু করতে পারি। আমরা Vertex AI SDK শুরু করব, পাইপলাইনের উপাদান হিসাবে আমাদের প্রশিক্ষণের কাজ সেটআপ করব, আমাদের পাইপলাইন তৈরি করব, আমাদের পাইপলাইন চালানো(গুলি) জমা দেব এবং পরীক্ষাগুলি দেখতে এবং তাদের স্থিতি নিরীক্ষণ করতে Vertex AI SDK-এর সুবিধা নেব।
ধাপ 1: Vertex AI SDK শুরু করুন
আপনার PROJECT_ID
এবং BUCKET_URI
সেট করে Vertex AI SDK শুরু করুন।
#initialize vertex AI SDK
vertex_ai.init(project=PROJECT_ID, staging_bucket=BUCKET_URI)
ধাপ 2: একটি পাইপলাইন উপাদান হিসাবে আমাদের প্রশিক্ষণ কাজ সেটআপ করুন
আমাদের পরীক্ষা চালানো শুরু করার জন্য, আমাদের প্রশিক্ষণের কাজটিকে একটি পাইপলাইন উপাদান হিসাবে সংজ্ঞায়িত করে নির্দিষ্ট করতে হবে। আমাদের পাইপলাইন প্রশিক্ষণের ডেটা এবং হাইপারপ্যারামিটার (যেমন, DROPOUT_RATE , LEARNING_RATE , EPOCHS ) ইনপুট এবং আউটপুট মডেল মেট্রিক্স (যেমন, MAE এবং RMSE ) এবং একটি মডেল আর্টিফ্যাক্ট হিসাবে গ্রহণ করবে।
@component(
packages_to_install=[
"numpy==1.21.0",
"pandas==1.3.5",
"scikit-learn==1.0.2",
"tensorflow==2.9.0",
]
)
def custom_trainer(
train_uri: str,
label_uri: str,
dropout_rate: float,
learning_rate: float,
epochs: int,
model_uri: str,
metrics: Output[Metrics],
model_metadata: Output[Model],
):
# import libraries
import logging
import uuid
from pathlib import Path as path
import pandas as pd
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout
from tensorflow.keras.metrics import Metric
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error
import numpy as np
from math import sqrt
import os
import tempfile
# set variables and use gcsfuse to update prefixes
gs_prefix = "gs://"
gcsfuse_prefix = "/gcs/"
train_path = train_uri.replace(gs_prefix, gcsfuse_prefix)
label_path = label_uri.replace(gs_prefix, gcsfuse_prefix)
model_path = model_uri.replace(gs_prefix, gcsfuse_prefix)
def get_logger():
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
logger.addHandler(handler)
return logger
def get_data(
train_path: str,
label_path: str
) -> (pd.DataFrame):
#load data into pandas dataframe
data_0 = pd.read_csv(train_path)
labels_0 = pd.read_csv(label_path)
#drop unnecessary leading columns
data = data_0.drop('Unnamed: 0', axis=1)
labels = labels_0.drop('Unnamed: 0', axis=1)
#save as numpy array for reshaping of data
labels = labels.values
data = data.values
# Split the data
labels = labels.reshape((labels.size,))
train_data, test_data, train_labels, test_labels = train_test_split(data, labels, test_size=0.2, shuffle=True, random_state=7)
#Convert data back to pandas dataframe for scaling
train_data = pd.DataFrame(train_data)
test_data = pd.DataFrame(test_data)
train_labels = pd.DataFrame(train_labels)
test_labels = pd.DataFrame(test_labels)
#Scale and normalize the training dataset
scaler = StandardScaler()
scaler.fit(train_data)
train_data = pd.DataFrame(scaler.transform(train_data), index=train_data.index, columns=train_data.columns)
test_data = pd.DataFrame(scaler.transform(test_data), index=test_data.index, columns=test_data.columns)
return train_data,train_labels, test_data, test_labels
""" Train your Keras model passing in the training data and values for learning rate, dropout rate,and the number of epochs """
def train_model(
learning_rate: float,
dropout_rate: float,
epochs: float,
train_data: pd.DataFrame,
train_labels: pd.DataFrame):
# Train tensorflow model
param = {"learning_rate": learning_rate, "dropout_rate": dropout_rate, "epochs": epochs}
model = Sequential()
model.add(Dense(500, input_dim=train_data.shape[1], activation= "relu"))
model.add(Dropout(param['dropout_rate']))
model.add(Dense(100, activation= "relu"))
model.add(Dense(50, activation= "relu"))
model.add(Dense(1))
model.compile(
tf.keras.optimizers.Adam(learning_rate= param['learning_rate']),
loss='mse',
metrics=[tf.keras.metrics.RootMeanSquaredError(),tf.keras.metrics.MeanAbsoluteError()])
model.fit(train_data, train_labels, epochs= param['epochs'])
return model
# Get Predictions
def get_predictions(model, test_data):
dtest = pd.DataFrame(test_data)
pred = model.predict(dtest)
return pred
# Evaluate predictions with MAE
def evaluate_model_mae(pred, test_labels):
mae = mean_absolute_error(test_labels, pred)
return mae
# Evaluate predictions with RMSE
def evaluate_model_rmse(pred, test_labels):
rmse = np.sqrt(np.mean((test_labels - pred)**2))
return rmse
#Save your trained model in GCS
def save_model(model, model_path):
model_id = str(uuid.uuid1())
model_path = f"{model_path}/{model_id}"
path(model_path).parent.mkdir(parents=True, exist_ok=True)
model.save(model_path + '/model_tensorflow')
# Main ----------------------------------------------
train_data, train_labels, test_data, test_labels = get_data(train_path, label_path)
model = train_model(learning_rate, dropout_rate, epochs, train_data,train_labels )
pred = get_predictions(model, test_data)
mae = evaluate_model_mae(pred, test_labels)
rmse = evaluate_model_rmse(pred, test_labels)
save_model(model, model_path)
# Metadata ------------------------------------------
#convert numpy array to pandas series
mae = pd.Series(mae)
rmse = pd.Series(rmse)
#log metrics and model artifacts with ML Metadata. Save metrics as a list.
metrics.log_metric("mae", mae.to_list())
metrics.log_metric("rmse", rmse.to_list())
model_metadata.uri = model_uri
ধাপ 3: আমাদের পাইপলাইন তৈরি করুন
এখন আমরা কেএফপি-তে উপলব্ধ Domain Specific Language (DSL)
ব্যবহার করে আমাদের ওয়ার্কফ্লো সেটআপ করব এবং আমাদের পাইপলাইনকে একটি JSON
ফাইলে কম্পাইল করব।
# define our workflow
@dsl.pipeline(name="gaming-custom-training-pipeline")
def pipeline(
train_uri: str,
label_uri: str,
dropout_rate: float,
learning_rate: float,
epochs: int,
model_uri: str,
):
custom_trainer(
train_uri,label_uri, dropout_rate,learning_rate,epochs, model_uri
)
#compile our pipeline
compiler.Compiler().compile(pipeline_func=pipeline, package_path="gaming_pipeline.json")
ধাপ 4: আমাদের পাইপলাইন রান জমা দিন
কঠোর পরিশ্রম আমাদের উপাদান সেট আপ করা এবং আমাদের পাইপলাইন সংজ্ঞায়িত করা হয়. আমরা উপরে উল্লেখিত পাইপলাইনের বিভিন্ন রান জমা দিতে প্রস্তুত। এটি করার জন্য, আমাদের বিভিন্ন হাইপারপ্যারামিটারের জন্য নিম্নরূপ মানগুলি সংজ্ঞায়িত করতে হবে:
runs = [
{"dropout_rate": 0.001, "learning_rate": 0.001,"epochs": 20},
{"dropout_rate": 0.002, "learning_rate": 0.002,"epochs": 25},
{"dropout_rate": 0.003, "learning_rate": 0.003,"epochs": 30},
{"dropout_rate": 0.004, "learning_rate": 0.004,"epochs": 35},
{"dropout_rate": 0.005, "learning_rate": 0.005,"epochs": 40},
]
সংজ্ঞায়িত হাইপারপ্যারামিটারের সাথে, আমরা পাইপলাইনের বিভিন্ন রানে সফলভাবে ফিড করার জন্য একটি for loop
ব্যবহার করতে পারি:
for i, run in enumerate(runs):
job = vertex_ai.PipelineJob(
display_name=f"{EXPERIMENT_NAME}-pipeline-run-{i}",
template_path="gaming_pipeline.json",
pipeline_root=PIPELINE_URI,
parameter_values={
"train_uri": TRAIN_URI,
"label_uri": LABEL_URI,
"model_uri": MODEL_URI,
**run,
},
)
job.submit(experiment=EXPERIMENT_NAME)
ধাপ 5: পরীক্ষাগুলি দেখার জন্য Vertex AI SDK ব্যবহার করুন
Vertex AI SDK আপনাকে পাইপলাইন রানের অবস্থা পর্যবেক্ষণ করতে দেয়। আপনি ভার্টেক্স এআই পরীক্ষায় পাইপলাইন রানের প্যারামিটার এবং মেট্রিক্স ফেরত দিতেও এটি ব্যবহার করতে পারেন। আপনার রান এবং এর বর্তমান অবস্থার সাথে সম্পর্কিত পরামিতিগুলি দেখতে নিম্নলিখিত কোডটি ব্যবহার করুন৷
# see state/status of all the pipeline runs
vertex_ai.get_experiment_df(EXPERIMENT_NAME)
আপনার পাইপলাইন রানের অবস্থা সম্পর্কে আপডেট পেতে আপনি নীচের কোডটি ব্যবহার করতে পারেন।
#check on current status
while True:
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
if all(
pipeline_state != "COMPLETE" for pipeline_state in pipeline_experiments_df.state
):
print("Pipeline runs are still running...")
if any(
pipeline_state == "FAILED"
for pipeline_state in pipeline_experiments_df.state
):
print("At least one Pipeline run failed")
break
else:
print("Pipeline experiment runs have completed")
break
time.sleep(60)
এছাড়াও আপনি run_name
ব্যবহার করে নির্দিষ্ট পাইপলাইন কাজ কল করতে পারেন।
# Call the pipeline runs based on the experiment run name
pipeline_experiments_df = vertex_ai.get_experiment_df(EXPERIMENT_NAME)
job = vertex_ai.PipelineJob.get(pipeline_experiments_df.run_name[0])
print(job.resource_name)
print(job._dashboard_uri())
পরিশেষে, আপনি আপনার রানের অবস্থাকে নির্দিষ্ট ব্যবধানে রিফ্রেশ করতে পারেন (যেমন প্রতি 60 সেকেন্ডে) স্টেটগুলি RUNNING
থেকে FAILED
বা COMPLETE
পরিবর্তিত হয়েছে দেখতে।
# wait 60 seconds and view state again
import time
time.sleep(60)
vertex_ai.get_experiment_df(EXPERIMENT_NAME)
7. সেরা পারফর্মিং রান সনাক্ত করুন
দুর্দান্ত, আমরা এখন আমাদের পাইপলাইন চালানোর ফলাফল পেয়েছি। আপনি হয়তো জিজ্ঞাসা করছেন, আমি ফলাফল থেকে কি শিখতে পারি? আপনার পরীক্ষার আউটপুটে পাঁচটি সারি থাকা উচিত, পাইপলাইনের প্রতিটি রানের জন্য একটি। এটি নিম্নলিখিত মত কিছু দেখাবে:
MAE এবং RMSE উভয়ই গড় মডেলের ভবিষ্যদ্বাণী ত্রুটির পরিমাপ তাই উভয় মেট্রিকের জন্য একটি কম মান বেশিরভাগ ক্ষেত্রেই কাম্য। Vertex AI পরীক্ষা-নিরীক্ষার আউটপুটের উপর ভিত্তি করে আমরা দেখতে পাচ্ছি যে উভয় মেট্রিক জুড়ে আমাদের সবচেয়ে সফল দৌড় ছিল 0.001 এর dropout_rate
, 0.001 হলে একটি learning_rate
এবং মোট epochs
সংখ্যা 20। এই পরীক্ষার উপর ভিত্তি করে, এই মডেলগুলি পরামিতিগুলি শেষ পর্যন্ত উত্পাদনে ব্যবহার করা হবে কারণ এটি সেরা মডেলের কার্যকারিতার ফলাফল দেয়।
যে দিয়ে, আপনি ল্যাব শেষ করেছেন!
🎉 অভিনন্দন! 🎉
আপনি শিখেছেন কিভাবে Vertex AI ব্যবহার করতে হয়:
- প্লেয়ার রেটিং (যেমন, রিগ্রেশন) ভবিষ্যদ্বাণী করতে একটি কাস্টম কেরাস মডেলকে প্রশিক্ষণ দিন
- স্কেলযোগ্য ML পাইপলাইন তৈরি করতে Kubeflow Pipelines SDK ব্যবহার করুন
- একটি 5-পদক্ষেপ পাইপলাইন তৈরি করুন এবং চালান যা GCS থেকে ডেটা ইনজেস্ট করে, ডেটা স্কেল করে, মডেলকে প্রশিক্ষণ দেয়, এটিকে মূল্যায়ন করে এবং ফলস্বরূপ মডেলটিকে আবার GCS-এ সংরক্ষণ করে
- মডেল এবং মডেল মেট্রিক্সের মতো মডেল আর্টিফ্যাক্টগুলি সংরক্ষণ করতে Vertex ML মেটাডেটা ব্যবহার করুন
- বিভিন্ন পাইপলাইন রানের ফলাফল তুলনা করতে Vertex AI পরীক্ষাগুলি ব্যবহার করুন
ভার্টেক্সের বিভিন্ন অংশ সম্পর্কে আরও জানতে, ডকুমেন্টেশন দেখুন।
8. পরিষ্কার করা
যাতে আপনাকে চার্জ না করা হয়, এটি সুপারিশ করা হয় যে আপনি এই ল্যাব জুড়ে তৈরি সংস্থানগুলি মুছে ফেলুন৷
ধাপ 1: আপনার নোটবুকের উদাহরণ বন্ধ করুন বা মুছুন
আপনি যদি এই ল্যাবে তৈরি করা নোটবুকটি ব্যবহার চালিয়ে যেতে চান, তাহলে এটি ব্যবহার না করার সময় এটি বন্ধ করার পরামর্শ দেওয়া হয়। আপনার ক্লাউড কনসোলের নোটবুক UI থেকে, নোটবুকটি নির্বাচন করুন এবং তারপরে থামুন নির্বাচন করুন। আপনি যদি দৃষ্টান্তটি সম্পূর্ণরূপে মুছে ফেলতে চান তবে মুছুন নির্বাচন করুন:
ধাপ 2: আপনার ক্লাউড স্টোরেজ বালতি মুছুন
আপনার ক্লাউড কনসোলে নেভিগেশন মেনু ব্যবহার করে স্টোরেজ বাকেট মুছে ফেলতে, স্টোরেজ ব্রাউজ করুন, আপনার বালতি নির্বাচন করুন এবং মুছুন ক্লিক করুন: