Cloud AI Platform पर XGBoost मॉडल बनाएं, उसे ट्रेनिंग दें, और डिप्लॉय करें

1. खास जानकारी

इस लैब में, आपको GCP पर एमएल वर्कफ़्लो के बारे में पूरी जानकारी मिलेगी. Cloud AI Platform Notebooks एनवायरमेंट से, BigQuery के सार्वजनिक डेटासेट से डेटा लिया जाएगा. इसके बाद, XGBoost मॉडल बनाया जाएगा और उसे ट्रेन किया जाएगा. इसके बाद, अनुमान लगाने के लिए मॉडल को AI Platform पर डिप्लॉय किया जाएगा.

आपको क्या सीखने को मिलेगा

आपको, इनके बारे में जानकारी मिलेगी:

  • AI Platform Notebooks में BigQuery डेटासेट को शामिल करना और उसका विश्लेषण करना
  • XGBoost मॉडल बनाना
  • XGBoost मॉडल को AI Platform पर डिप्लॉय करना और अनुमान पाना

इस लैब को Google Cloud पर चलाने की कुल लागत करीब 1 डॉलर है.

2. अपना एनवायरमेंट सेट अप करना

इस कोडलैब को चलाने के लिए, आपके पास बिलिंग की सुविधा वाला Google Cloud Platform प्रोजेक्ट होना चाहिए. प्रोजेक्ट बनाने के लिए, यहां दिए गए निर्देशों का पालन करें.

पहला चरण: Cloud AI Platform Models API को चालू करना

Cloud Console में AI Platform Models सेक्शन पर जाएं. अगर यह सुविधा पहले से चालू नहीं है, तो 'चालू करें' पर क्लिक करें.

d0d38662851c6af3.png

दूसरा चरण: Compute Engine API चालू करना

Compute Engine पर जाएं. अगर यह पहले से चालू नहीं है, तो चालू करें को चुनें. आपको नोटबुक इंस्टेंस बनाने के लिए इसकी ज़रूरत होगी.

तीसरा चरण: AI Platform Notebooks का इंस्टेंस बनाना

Cloud Console के AI Platform Notebooks सेक्शन पर जाएं और नया इंस्टेंस पर क्लिक करें. इसके बाद, Python का नया इंस्टेंस टाइप चुनें:

a81c82876c6c16f9.png

डिफ़ॉल्ट विकल्पों का इस्तेमाल करें. इसके बाद, बनाएं पर क्लिक करें. इंस्टेंस बन जाने के बाद, JupyterLab खोलें को चुनें:

चौथा चरण: XGBoost इंस्टॉल करना

JupyterLab इंस्टेंस खुलने के बाद, आपको XGBoost पैकेज जोड़ना होगा.

इसके लिए, लॉन्चर से Terminal चुनें:

28dcf2790ce77c96.png

इसके बाद, AI Platform के साथ काम करने वाला XGBoost का नया वर्शन इंस्टॉल करने के लिए, यह कमांड चलाएं:

pip3 install xgboost==0.82

यह प्रोसेस पूरी होने के बाद, लॉन्चर से Python 3 Notebook इंस्टेंस खोलें. अब आप अपनी नोटबुक में काम शुरू करने के लिए तैयार हैं!

पांचवां चरण: Python पैकेज इंपोर्ट करना

अपनी नोटबुक की पहली सेल में, यहां दिए गए इंपोर्ट जोड़ें और सेल को चलाएं. इसे चलाने के लिए, सबसे ऊपर मौजूद मेन्यू में जाकर राइट ऐरो बटन दबाएं या command-enter दबाएं:

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

3. BigQuery डेटासेट एक्सप्लोर करना

BigQuery ने कई डेटासेट सार्वजनिक तौर पर उपलब्ध कराए हैं, ताकि आप उन्हें एक्सप्लोर कर सकें. इस लैब के लिए, हम जन्मदर के डेटासेट का इस्तेमाल करेंगे. इसमें अमेरिका में पिछले 40 सालों में हुए लगभग हर बच्चे के जन्म का डेटा शामिल है. इसमें बच्चे का वज़न और उसके माता-पिता की डेमोग्राफ़िक जानकारी भी शामिल है. हम बच्चे के जन्म के समय के वज़न का अनुमान लगाने के लिए, सुविधाओं के सबसेट का इस्तेमाल करेंगे.

पहला चरण: BigQuery डेटा को अपने नोटबुक में डाउनलोड करना

हम BigQuery के लिए Python क्लाइंट लाइब्रेरी का इस्तेमाल करेंगे, ताकि डेटा को Pandas DataFrame में डाउनलोड किया जा सके. ओरिजनल डेटासेट 21 जीबी का है और इसमें 12 करोड़ 30 लाख लाइनें हैं. हम डेटासेट की सिर्फ़ 10,000 लाइनों का इस्तेमाल करेंगे, ताकि चीज़ें आसान रहें.

यहां दिए गए कोड का इस्तेमाल करके, क्वेरी बनाएं और नतीजे के तौर पर मिले DataFrame की झलक देखें. यहां हमें ओरिजनल डेटासेट से चार सुविधाएं मिल रही हैं. साथ ही, बच्चे का वज़न (जिसका अनुमान हमारा मॉडल लगाएगा) भी मिल रहा है. यह डेटासेट कई सालों का है, लेकिन इस मॉडल के लिए हम सिर्फ़ साल 2000 के बाद का डेटा इस्तेमाल करेंगे:

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

ऐसा लगता है कि डेटासेट में, लिंग के हिसाब से डेटा लगभग 50/50 है.

4. ट्रेनिंग के लिए डेटा तैयार करना

इस सेक्शन में, हम डेटा को ट्रेन और टेस्ट सेट में बांटेंगे, ताकि इसे अपने मॉडल को ट्रेनिंग देने के लिए तैयार किया जा सके.

पहला चरण: लेबल कॉलम को एक्सट्रैक्ट करना

डेटासेट से, शून्य वैल्यू वाली पंक्तियों को हटाएं और डेटा को शफ़ल करें:

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

इसके बाद, लेबल कॉलम को एक अलग वैरिएबल में निकालें और सिर्फ़ हमारी सुविधाओं के साथ एक DataFrame बनाएं:

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)

तीसरा चरण: डेटा को ट्रेनिंग और टेस्ट सेट में बांटना

हम Scikit Learn की train_test_split यूटिलिटी का इस्तेमाल करेंगे. इसे हमने नोटबुक की शुरुआत में इंपोर्ट किया था, ताकि हम अपने डेटा को ट्रेनिंग और टेस्ट सेट में बांट सकें:

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

अब हम अपने मॉडल को बनाने और उसे ट्रेनिंग देने के लिए तैयार हैं!

5. XGBoost के बारे में खास जानकारी

XGBoost एक मशीन लर्निंग फ़्रेमवर्क है. यह अनुमान लगाने वाले मॉडल बनाने के लिए, डिसीज़न ट्री और ग्रेडिएंट बूस्टिंग का इस्तेमाल करता है. यह अलग-अलग फ़ैसले लेने वाले कई ट्री को एक साथ जोड़कर काम करता है. यह ट्री में अलग-अलग लीफ़ नोड से जुड़े स्कोर के आधार पर काम करता है.

नीचे दिए गए डायग्राम में, किसी मॉडल के लिए एक आसान एनसेंबल ट्री नेटवर्क दिखाया गया है. यह मॉडल यह आकलन करता है कि किसी व्यक्ति को कोई कंप्यूटर गेम पसंद आएगा या नहीं. यह XGBoost के दस्तावेज़ों से लिया गया है:

fb061cd8c8f69999.png

हम इस मॉडल के लिए XGBoost का इस्तेमाल क्यों कर रहे हैं? पारंपरिक न्यूरल नेटवर्क, इमेज और टेक्स्ट जैसे बिना क्रम के डेटा पर सबसे अच्छा परफ़ॉर्म करते हैं. वहीं, फ़ैसले लेने वाले ट्री, अक्सर मॉर्गेज डेटासेट जैसे व्यवस्थित डेटा पर बहुत अच्छा परफ़ॉर्म करते हैं. हम इस कोडलैब में मॉर्गेज डेटासेट का इस्तेमाल करेंगे.

6. 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)

आइए, देखते हैं कि मॉडल ने हमारे टेस्ट सेट की पहली 20 वैल्यू पर कैसा परफ़ॉर्म किया. यहां हम हर टेस्ट उदाहरण के लिए, बच्चे का अनुमानित वज़न और बच्चे का असल वज़न प्रिंट करेंगे:

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

तीसरा चरण: मॉडल सेव करना

मॉडल को डिप्लॉय करने के लिए, इसे किसी लोकल फ़ाइल में सेव करने के लिए यह कोड चलाएं:

model.save_model('model.bst')

7. मॉडल को Cloud AI Platform पर डिप्लॉय करना

हमने अपने मॉडल को स्थानीय तौर पर काम करने के लिए सेट अप कर लिया है. हालांकि, अगर हम इस मॉडल से किसी भी जगह से अनुमान लगा सकें, तो यह बहुत अच्छा होगा. ऐसा सिर्फ़ इस नोटबुक से नहीं, बल्कि किसी भी जगह से किया जा सकेगा! इस चरण में, हम इसे क्लाउड पर डिप्लॉय करेंगे.

पहला चरण: हमारे मॉडल के लिए Cloud Storage बकेट बनाना

सबसे पहले, कुछ एनवायरमेंट वैरिएबल तय करते हैं. इनका इस्तेमाल हम बाकी कोडलैब में करेंगे. नीचे दी गई वैल्यू में, अपने Google Cloud प्रोजेक्ट का नाम, क्लाउड स्टोरेज बकेट का वह नाम डालें जिसे आपको बनाना है (यह नाम दुनिया भर में यूनीक होना चाहिए). साथ ही, अपने मॉडल के पहले वर्शन का नाम डालें:

# 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 मॉडल फ़ाइल को सेव करने के लिए, स्टोरेज बकेट बनाने के लिए तैयार हैं. डप्लॉय करते समय, हम Cloud AI Platform को इस फ़ाइल के बारे में बताएंगे.

बकेट बनाने के लिए, अपनी नोटबुक में यह gsutil कमांड चलाएं:

!gsutil mb $MODEL_BUCKET

दूसरा चरण: मॉडल फ़ाइल को Cloud Storage में कॉपी करना

इसके बाद, हम XGBoost के सेव किए गए मॉडल की फ़ाइल को Cloud Storage में कॉपी करेंगे. gsutil का यह निर्देश चलाएं:

!gsutil cp ./model.bst $MODEL_BUCKET

फ़ाइल के कॉपी होने की पुष्टि करने के लिए, Cloud Console में स्टोरेज ब्राउज़र पर जाएं:

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

जब यह प्रोसेस चल रही हो, तब AI Platform Console के मॉडल सेक्शन में जाकर देखें. आपको वहां नया वर्शन डिप्लॉय होता हुआ दिखेगा:

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)

आपको आउटपुट में, अपने मॉडल का अनुमान दिखना चाहिए. इन दो उदाहरणों में, बच्चे का असल वज़न क्रमशः 1.9 और 8.1 पाउंड है.

8. साफ़-सफ़ाई सेवा

अगर आपको इस नोटबुक का इस्तेमाल जारी रखना है, तो हमारा सुझाव है कि इस्तेमाल न करने पर इसे बंद कर दें. Cloud Console में Notebooks के यूज़र इंटरफ़ेस (यूआई) में जाकर, नोटबुक चुनें. इसके बाद, बंद करें को चुनें:

879147427150b6c7.png

अगर आपको इस लैब में बनाए गए सभी संसाधन मिटाने हैं, तो नोटबुक इंस्टेंस को बंद करने के बजाय मिटा दें.

Cloud Console में नेविगेशन मेन्यू का इस्तेमाल करके, Storage पर जाएं. इसके बाद, मॉडल ऐसेट सेव करने के लिए बनाए गए दोनों बकेट मिटाएं.