ক্লাউড এআই প্ল্যাটফর্মে একটি XGBoost মডেল তৈরি করুন, ট্রেন করুন এবং স্থাপন করুন

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

এই ল্যাবে, আপনি GCP-তে একটি সম্পূর্ণ ML ওয়ার্কফ্লো অনুসরণ করবেন। ক্লাউড এআই প্ল্যাটফর্ম নোটবুকস এনভায়রনমেন্ট থেকে, আপনি একটি BigQuery পাবলিক ডেটাসেট থেকে ডেটা ইনজেস্ট করবেন, একটি XGBoost মডেল তৈরি ও ট্রেইন করবেন এবং প্রেডিকশনের জন্য মডেলটিকে এআই প্ল্যাটফর্মে ডেপ্লয় করবেন।

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

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

  • এআই প্ল্যাটফর্ম নোটবুকে একটি BigQuery ডেটাসেট গ্রহণ ও বিশ্লেষণ করুন
  • একটি XGBoost মডেল তৈরি করুন
  • XGBoost মডেলটি AI প্ল্যাটফর্মে স্থাপন করুন এবং পূর্বাভাস পান।

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

২. আপনার পরিবেশ প্রস্তুত করুন

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

ধাপ ১: ক্লাউড এআই প্ল্যাটফর্ম মডেলস এপিআই সক্রিয় করুন

আপনার ক্লাউড কনসোলের AI প্ল্যাটফর্ম মডেল বিভাগে যান এবং যদি এটি আগে থেকে সক্রিয় না থাকে তবে 'সক্রিয় করুন' (Enable) বোতামে ক্লিক করুন।

d0d38662851c6af3.png

ধাপ ২: কম্পিউট ইঞ্জিন এপিআই সক্রিয় করুন

Compute Engine- এ যান এবং যদি আগে থেকে সক্রিয় করা না থাকে তবে 'Enable' নির্বাচন করুন। আপনার নোটবুক ইনস্ট্যান্স তৈরি করার জন্য এটি প্রয়োজন হবে।

ধাপ ৩: একটি এআই প্ল্যাটফর্ম নোটবুক ইনস্ট্যান্স তৈরি করুন

আপনার ক্লাউড কনসোলের AI প্ল্যাটফর্ম নোটবুকস বিভাগে যান এবং নিউ ইনস্ট্যান্স-এ ক্লিক করুন। তারপর সর্বশেষ পাইথন ইনস্ট্যান্স টাইপটি নির্বাচন করুন:

a81c82876c6c16f9.png

ডিফল্ট অপশনগুলো ব্যবহার করুন এবং তারপর 'Create'-এ ক্লিক করুন। ইনস্ট্যান্সটি তৈরি হয়ে গেলে, 'Open JupyterLab' নির্বাচন করুন:

ধাপ ৪: XGBoost ইনস্টল করুন

আপনার JupyterLab ইনস্ট্যান্সটি চালু হয়ে গেলে, আপনাকে XGBoost প্যাকেজটি যোগ করতে হবে।

এটি করার জন্য, লঞ্চার থেকে টার্মিনাল নির্বাচন করুন:

28dcf2790ce77c96.png

এরপর এআই প্ল্যাটফর্ম দ্বারা সমর্থিত XGBoost-এর সর্বশেষ সংস্করণ ইনস্টল করতে নিম্নলিখিতটি চালান:

pip3 install xgboost==0.82

এটি সম্পন্ন হলে, লঞ্চার থেকে একটি পাইথন ৩ নোটবুক ইনস্ট্যান্স খুলুন। আপনি আপনার নোটবুকে কাজ শুরু করার জন্য প্রস্তুত!

ধাপ ৫: পাইথন প্যাকেজগুলো ইম্পোর্ট করুন

আপনার নোটবুকের প্রথম সেলে, নিম্নলিখিত ইম্পোর্টগুলো যোগ করুন এবং সেলটি রান করুন। আপনি উপরের মেনুতে থাকা ডান তীর বোতামটি চেপে অথবা কমান্ড-এন্টার চেপে এটি রান করতে পারেন:

import pandas as pd
import xgboost as xgb
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery

৩. BigQuery ডেটাসেট অন্বেষণ

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

ধাপ ১: BigQuery ডেটা আমাদের নোটবুকে ডাউনলোড করুন।

আমরা BigQuery-এর পাইথন ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ডেটাগুলোকে একটি Pandas DataFrame-এ ডাউনলোড করব। মূল ডেটাসেটটির আকার ২১ জিবি এবং এতে ১২৩ মিলিয়ন সারি রয়েছে। কাজটি সহজ রাখার জন্য আমরা ডেটাসেটটি থেকে মাত্র ১০,০০০টি সারি ব্যবহার করব।

নিম্নলিখিত কোড ব্যবহার করে কোয়েরিটি তৈরি করুন এবং ফলাফলস্বরূপ প্রাপ্ত ডেটাফ্রেমটির প্রিভিউ দেখুন। এখানে আমরা মূল ডেটাসেট থেকে ৪টি ফিচার নিচ্ছি, সাথে থাকছে শিশুর ওজন (যা আমাদের মডেল প্রেডিক্ট করবে)। ডেটাসেটটি অনেক বছর আগের হলেও, এই মডেলের জন্য আমরা শুধুমাত্র ২০০০ সালের পরের ডেটা ব্যবহার করব:

query="""
SELECT
  weight_pounds,
  is_male,
  mother_age,
  plurality,
  gestation_weeks
FROM
  publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()

আমাদের ডেটাসেটের সংখ্যাসূচক বৈশিষ্ট্যগুলির সারাংশ পেতে, চালান:

df.describe()

এটি আমাদের সংখ্যাসূচক কলামগুলোর গড়, আদর্শ বিচ্যুতি, সর্বনিম্ন মান এবং অন্যান্য মেট্রিকগুলো দেখায়। সবশেষে, চলুন শিশুর লিঙ্গ নির্দেশকারী আমাদের বুলিয়ান কলামটির কিছু ডেটা সংগ্রহ করা যাক। আমরা Pandas-এর value_counts মেথড ব্যবহার করে এটি করতে পারি:

df['is_male'].value_counts()

দেখে মনে হচ্ছে ডেটাসেটটি লিঙ্গভেদে প্রায় ৫০/৫০ ভারসাম্যপূর্ণ।

৪. প্রশিক্ষণের জন্য ডেটা প্রস্তুত করুন।

এই অংশে, আমরা আমাদের মডেলকে প্রশিক্ষণের জন্য ডেটা প্রস্তুত করতে সেটিকে ট্রেন এবং টেস্ট সেটে ভাগ করব।

ধাপ ১: লেবেল কলামটি বের করুন

প্রথমে ডেটাসেট থেকে নাল (null) মানযুক্ত সারিগুলি বাদ দিন এবং ডেটা শাফেল করুন:

df = df.dropna()
df = shuffle(df, random_state=2)

এরপরে, লেবেল কলামটিকে একটি আলাদা ভেরিয়েবলে এক্সট্র্যাক্ট করুন এবং শুধুমাত্র আমাদের ফিচারগুলো দিয়ে একটি ডেটাফ্রেম তৈরি করুন:

labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])

এখন যদি আপনি data.head() রান করে আমাদের ডেটাসেটটি প্রিভিউ করেন, তাহলে আপনি প্রশিক্ষণের জন্য ব্যবহৃত চারটি বৈশিষ্ট্য দেখতে পাবেন।

ধাপ ২: ক্যাটাগরিক্যাল ফিচারগুলোকে ইন্টিজারে রূপান্তর করুন

যেহেতু XGBoost-এর জন্য সমস্ত ডেটা সংখ্যাসূচক হতে হয়, তাই আমাদের is_male কলামে ডেটা উপস্থাপনের পদ্ধতি পরিবর্তন করতে হবে, যা বর্তমানে True / False স্ট্রিং হিসেবে রয়েছে। আমরা খুব সহজেই ওই কলামটির টাইপ পরিবর্তন করে এটি করতে পারি:

data['is_male'] = data['is_male'].astype(int)

ধাপ ৩: ডেটাকে ট্রেন এবং টেস্ট সেটে ভাগ করুন

আমাদের ডেটাকে ট্রেন এবং টেস্ট সেটে ভাগ করার জন্য আমরা স্কিকিট লার্নের ` train_test_split ইউটিলিটিটি ব্যবহার করব, যেটি আমরা নোটবুকের শুরুতে ইম্পোর্ট করেছিলাম।

x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)

এখন আমরা আমাদের মডেলটি তৈরি ও প্রশিক্ষণ দেওয়ার জন্য প্রস্তুত!

৫. XGBoost-এর একটি সংক্ষিপ্ত পরিচিতি

XGBoost হলো একটি মেশিন লার্নিং ফ্রেমওয়ার্ক যা ভবিষ্যদ্বাণীমূলক মডেল তৈরি করতে ডিসিশন ট্রি এবং গ্রেডিয়েন্ট বুস্টিং ব্যবহার করে। এটি একটি ট্রির বিভিন্ন লিফ নোডের সাথে যুক্ত স্কোরের উপর ভিত্তি করে একাধিক ডিসিশন ট্রিকে একত্রিত করে কাজ করে।

নিচের ডায়াগ্রামটি এমন একটি মডেলের এনসেম্বল ট্রি নেটওয়ার্কের সরলীকৃত চিত্রায়ন, যা মূল্যায়ন করে যে কেউ একটি নির্দিষ্ট কম্পিউটার গেম পছন্দ করবে কি না (এটি XGBoost ডক্স থেকে নেওয়া):

fb061cd8c8f69999.png

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

৬. একটি XGBoost মডেল তৈরি, প্রশিক্ষণ এবং মূল্যায়ন করুন।

ধাপ ১: XGBoost মডেলটি সংজ্ঞায়িত ও প্রশিক্ষণ দিন

XGBoost-এ একটি মডেল তৈরি করা সহজ। আমরা মডেলটি তৈরি করতে XGBRegressor ক্লাসটি ব্যবহার করব এবং আমাদের নির্দিষ্ট কাজের জন্য শুধু সঠিক objective প্যারামিটারটি পাস করতে হবে। এখানে আমরা একটি রিগ্রেশন মডেল ব্যবহার করছি, কারণ আমরা একটি সংখ্যাসূচক মান (শিশুর ওজন) অনুমান করছি। এর পরিবর্তে, যদি আমরা একটি শিশুর ওজন ৬ পাউন্ডের বেশি না কম তা নির্ধারণ করার জন্য আমাদের ডেটা বাকেটিং করতাম, তাহলে আমরা একটি ক্লাসিফিকেশন মডেল ব্যবহার করতাম।

এক্ষেত্রে আমরা reg:squarederror আমাদের মডেলের উদ্দেশ্য হিসেবে ব্যবহার করব।

নিম্নলিখিত কোডটি একটি XGBoost মডেল তৈরি করবে:

model = xgb.XGBRegressor(
    objective='reg:linear'
)

আপনি fit() মেথডটি কল করে এবং ট্রেনিং ডেটা ও লেবেলগুলো পাস করে এক লাইনের কোডেই মডেলটিকে প্রশিক্ষণ দিতে পারেন।

model.fit(x_train, y_train)

ধাপ ২: টেস্ট ডেটার উপর আপনার মডেলটি মূল্যায়ন করুন।

এখন আমরা আমাদের প্রশিক্ষিত মডেলটি ব্যবহার করে predict() ফাংশনের সাহায্যে টেস্ট ডেটার উপর প্রেডিকশন তৈরি করতে পারি:

y_pred = model.predict(x_test)

চলুন দেখি আমাদের টেস্ট সেটের প্রথম ২০টি মানের উপর মডেলটি কেমন পারফর্ম করেছে। নিচে আমরা প্রতিটি টেস্ট উদাহরণের জন্য পূর্বাভাসিত ওজনের সাথে শিশুর প্রকৃত ওজনও প্রিন্ট করব:

for i in range(20):
    print('Predicted weight: ', y_pred[i])
    print('Actual weight: ', y_test.iloc[i])
    print()

ধাপ ৩: আপনার মডেলটি সংরক্ষণ করুন।

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

model.save_model('model.bst')

৭. ক্লাউড এআই প্ল্যাটফর্মে মডেলটি স্থাপন করুন

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

ধাপ ১: আমাদের মডেলের জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন।

চলুন প্রথমে কিছু এনভায়রনমেন্ট ভেরিয়েবল নির্ধারণ করে নিই, যেগুলো আমরা এই কোডল্যাবের বাকি অংশে ব্যবহার করব। নিচের ভ্যালুগুলোতে আপনার গুগল ক্লাউড প্রজেক্টের নাম, আপনি যে ক্লাউড স্টোরেজ বাকেটটি তৈরি করতে চান তার নাম (যা অবশ্যই গ্লোবালি ইউনিক হতে হবে), এবং আপনার মডেলের প্রথম ভার্সনের ভার্সন নেম পূরণ করুন:

# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'

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

একটি বাকেট তৈরি করতে আপনার নোটবুকের ভেতর থেকে এই gsutil কমান্ডটি চালান:

!gsutil mb $MODEL_BUCKET

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

এরপর, আমরা আমাদের XGBoost-এ সেভ করা মডেল ফাইলটি ক্লাউড স্টোরেজে কপি করব। নিচের gsutil কমান্ডটি চালান:

!gsutil cp ./model.bst $MODEL_BUCKET

ফাইলটি কপি হয়েছে কিনা তা নিশ্চিত করতে আপনার ক্লাউড কনসোলের স্টোরেজ ব্রাউজারে যান:

31e2567fa0117214.png

ধাপ ৩: মডেলটি তৈরি এবং স্থাপন করুন

নিম্নলিখিত ai-platform gcloud কমান্ডটি আপনার প্রোজেক্টে একটি নতুন মডেল তৈরি করবে। আমরা এটির নাম দেব xgb_mortgage :

!gcloud ai-platform models create $MODEL_NAME

এখন মডেলটি ডেপ্লয় করার সময়। আমরা এই gcloud কমান্ডটি দিয়ে তা করতে পারি:

!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT

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

a431661f9c3e6cb2.png

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

ধাপ ৪: স্থাপন করা মডেলটি পরীক্ষা করুন

আপনার ডেপ্লয় করা মডেলটি ঠিকমতো কাজ করছে কিনা তা নিশ্চিত করতে, gcloud ব্যবহার করে একটি প্রেডিকশন তৈরি করে এটি পরীক্ষা করুন। প্রথমে, আমাদের টেস্ট সেট থেকে দুটি উদাহরণসহ একটি JSON ফাইল সেভ করুন:

%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]

নিম্নলিখিত gcloud কমান্ডের আউটপুট একটি ভেরিয়েবলে সংরক্ষণ করে এবং সেটি প্রিন্ট করে আপনার মডেলটি পরীক্ষা করুন:

prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)

আউটপুটে আপনি আপনার মডেলের পূর্বাভাস দেখতে পাবেন। এই দুটি উদাহরণের ক্ষেত্রে শিশুদের প্রকৃত ওজন যথাক্রমে ১.৯ এবং ৮.১ পাউন্ড।

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

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

879147427150b6c7.png

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

আপনার ক্লাউড কনসোলের নেভিগেশন মেনু ব্যবহার করে স্টোরেজ-এ যান এবং আপনার মডেল অ্যাসেটগুলো সংরক্ষণের জন্য তৈরি করা উভয় বাকেট মুছে ফেলুন।