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 मॉडल API को चालू करना

अपने Cloud Console के एआई प्लैटफ़ॉर्म मॉडल सेक्शन पर जाएं और अगर यह पहले से चालू नहीं है, तो 'चालू करें' पर क्लिक करें.

d0d38662851c6af3.png

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

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

तीसरा चरण: 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 डेटा को हमारी notebook में डाउनलोड करना

हम BigQuery के लिए Python क्लाइंट लाइब्रेरी का इस्तेमाल करेंगे, ताकि डेटा को Pandas DataFrame में डाउनलोड किया जा सके. मूल डेटासेट 21 जीबी का है और इसमें 12.3 करोड़ पंक्तियां हैं. चीज़ों को आसान रखने के लिए, हम डेटासेट में सिर्फ़ 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 का अंतर करीब-करीब 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 कॉलम में, डेटा को दिखाने का तरीका बदलना होगा. यह कॉलम अभी 'सही' / 'गलत' है. हम कॉलम का टाइप बदलकर ऐसा कर सकते हैं:

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)

चरण 2: टेस्ट डेटा के आधार पर अपने मॉडल का आकलन करना

अब हम 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 कंसोल का मॉडल सेक्शन देखें. आपको अपना नया वर्शन वहां डिप्लॉयमेंट में दिखेगा:

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. साफ़-सफ़ाई सेवा

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

879147427150b6c7.png

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

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