1. परिचय
| Kubeflow, Kubernetes के लिए मशीन लर्निंग टूलकिट है. इस प्रोजेक्ट का मकसद, Kubernetes पर मशीन लर्निंग (एमएल) वर्कफ़्लो के डिप्लॉयमेंट को आसान, पोर्टेबल, और स्केलेबल बनाना है. इसका मकसद, अलग-अलग इन्फ़्रास्ट्रक्चर में एमएल के लिए बेहतरीन ओपन-सोर्स सिस्टम को आसानी से डिप्लॉय करने का तरीका उपलब्ध कराना है. |
Kubeflow डिप्लॉयमेंट कैसा दिखता है?
Kubeflow डिप्लॉयमेंट:
- पोर्टेबल - यह किसी भी Kubernetes क्लस्टर पर काम करता है. भले ही, यह Google Cloud Platform (GCP), कंपनी की इमारत में या अलग-अलग प्रोवाइडर के बीच मौजूद हो.
- स्केल करने की सुविधा - इसमें ज़रूरत के हिसाब से संसाधनों का इस्तेमाल किया जा सकता है. साथ ही, यह सिर्फ़ Kubernetes क्लस्टर को असाइन किए गए संसाधनों की संख्या से सीमित होता है.
- कंपोज़ेबल - सर्विस वर्कर की मदद से बेहतर बनाया गया है, ताकि ऑफ़लाइन या कम क्वालिटी वाले नेटवर्क पर काम कर सके.
यह एक ऐसी तकनीक है जिसकी मदद से, एक-दूसरे से कम जुड़े माइक्रोसेवाओं को एक यूनिट के तौर पर व्यवस्थित किया जाता है. साथ ही, उन्हें अलग-अलग जगहों पर डिप्लॉय किया जाता है. जैसे, लैपटॉप या क्लाउड.
इस कोडलैब में, MiniKF का इस्तेमाल करके Kubeflow डिप्लॉयमेंट बनाने और Jupyter Notebook में Kubeflow Pipelines वर्कफ़्लो चलाने का तरीका बताया गया है.
आपको क्या बनाने को मिलेगा
इस कोडलैब में, आपको Kubeflow Pipelines की मदद से एक जटिल डेटा साइंस पाइपलाइन बनानी होगी. इसके लिए, आपको किसी भी सीएलआई कमांड या SDK टूल का इस्तेमाल नहीं करना होगा. इसके लिए, आपको Kubernetes या Docker के बारे में जानकारी होने की ज़रूरत नहीं है. सेटअप पूरा होने के बाद, आपके इन्फ़्रास्ट्रक्चर में ये चीज़ें शामिल होंगी:
- MiniKF (Mini Kubeflow) VM, जो अपने-आप इंस्टॉल हो जाता है:
- Kubernetes (Minikube का इस्तेमाल करके)
- Kubeflow
- Kale, एक ऐसा टूल है जो सामान्य तौर पर इस्तेमाल होने वाली Jupyter Notebooks को Kubeflow Pipelines के वर्कफ़्लो में बदलता है ( GitHub)
- डेटा वर्शनिंग और दोबारा इस्तेमाल करने के लिए Arrikto Rok
आपको क्या सीखने को मिलेगा
- MiniKF की मदद से Kubeflow को इंस्टॉल करने का तरीका
- सीएलआई कमांड या SDK टूल का इस्तेमाल किए बिना, Jupyter Notebooks को Kubeflow Pipelines में बदलने का तरीका
- बटन पर क्लिक करके, नोटबुक से Kubeflow Pipelines चलाने का तरीका
- किसी नोटबुक और हर पाइपलाइन चरण में, अपने डेटा को अपने-आप वर्शन करने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- चालू GCP प्रोजेक्ट, जिसके लिए आपके पास मालिक की अनुमतियां हों
यह Kubeflow पर आधारित एक बेहतर कोडलैब है. इस प्लैटफ़ॉर्म के बारे में ज़्यादा जानकारी और बुनियादी जानकारी के लिए, Kubeflow के बारे में बुनियादी जानकारी वाला दस्तावेज़ देखें. इसमें काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, आपको सिर्फ़ कॉपी और चिपकाने के लिए कोड उपलब्ध कराया जाता है.
2. एनवायरमेंट सेट अप करना
GCP प्रोजेक्ट आईडी और क्लस्टर का नाम सेट करना
अपना प्रोजेक्ट आईडी ढूंढने के लिए, GCP Console के होम पैनल पर जाएं. यह पैनल, सबसे ऊपर बाईं ओर मौजूद हैमबर्गर मेन्यू में होता है. अगर स्क्रीन खाली है, तो डैशबोर्ड बनाने के लिए, प्रॉम्प्ट में दिए गए 'हां' पर क्लिक करें.

अगर प्रोजेक्ट पहले से नहीं चुना गया है, तो कोई प्रोजेक्ट चुनें पर क्लिक करें:

इसके बाद, अपना प्रोजेक्ट चुनें. आपके पास सिर्फ़ एक होना चाहिए:

3. MiniKF इंस्टॉल करना
Compute इंस्टेंस बनाना
GCP Marketplace में, "MiniKF" खोजें.
Arrikto की MiniKF वर्चुअल मशीन चुनें.

Compute Engine पर लॉन्च करें बटन पर क्लिक करें और अपना प्रोजेक्ट चुनें.

कॉन्फ़िगर करें और डिप्लॉय करें विंडो में, अपने MiniKF इंस्टेंस के लिए नाम चुनें और डिफ़ॉल्ट विकल्पों को छोड़ दें. इसके बाद, डिप्लॉय करें बटन पर क्लिक करें.

MiniKF Compute इंस्टेंस के बूट होने का इंतज़ार करें.

MiniKF में लॉग इन करना
MiniKF वीएम के चालू होने पर, एसएसएच बटन पर क्लिक करके कनेक्ट करें और लॉगिन करें. स्क्रीन पर दिए गए निर्देशों का पालन करके, minikf कमांड चलाएं. इससे Minikube, Kubeflow, और Rok को डिप्लॉय करने की प्रोसेस शुरू हो जाएगी. इस प्रोसेस को पूरा होने में कुछ मिनट लगेंगे.

Kubeflow में लॉग इन करना
इंस्टॉल होने के बाद, जब सभी पॉड तैयार हो जाएं, तब MiniKF डैशबोर्ड पर जाएं. MiniKF के उपयोगकर्ता नाम और पासवर्ड का इस्तेमाल करके, Kubeflow में लॉग इन करें.


Chrome का इस्तेमाल करने वाले लोगों को यह स्क्रीन दिखेगी:

Firefox का इस्तेमाल करने वाले लोगों को यह स्क्रीन दिखेगी:

Safari का इस्तेमाल करने वाले लोगों को यह स्क्रीन दिखेगी:

Rok में लॉग इन करना
Kubeflow में लॉग इन करने के बाद, हैमबर्गर आइकॉन पर क्लिक करके बाईं ओर मौजूद मेन्यू खोलें. स्नैपशॉट स्टोर पर जाएं और MiniKF के उपयोगकर्ता नाम और पासवर्ड का इस्तेमाल करके Rok में लॉग इन करें.


बधाई हो! आपने GCP पर MiniKF को डिप्लॉय कर लिया है! अब आपके पास नोटबुक बनाने, एमएल कोड लिखने, और Kubeflow Pipelines चलाने का विकल्प है. डेटा वर्शनिंग और दोबारा इस्तेमाल करने के लिए, Rok का इस्तेमाल करें.
4. अपनी नोटबुक से पाइपलाइन चलाना
इस सेक्शन में, आपको टाइटैनिक का उदाहरण दिया जाएगा. यह Kaggle की एक ऐसी प्रतियोगिता है जिसमें यह अनुमान लगाया जाता है कि टाइटैनिक के जहाज़ के डूबने की घटना में कौनसे यात्री बच गए.
नोटबुक सर्वर बनाना
Kubeflow के सेंट्रल डैशबोर्ड पर, Notebook Servers लिंक पर जाएं.

नया सर्वर पर क्लिक करें.

अपने नोटबुक सर्वर के लिए कोई नाम तय करें.

पक्का करें कि आपने यह इमेज चुनी हो:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
5 जीबी का नया, खाली डेटा वॉल्यूम जोड़ें और इसे data नाम दें.

नोटबुक सर्वर बनाने के लिए, लॉन्च करें पर क्लिक करें.

नोटबुक सर्वर उपलब्ध होने पर, उससे कनेक्ट करने के लिए कनेक्ट करें पर क्लिक करें.

डेटा और नोटबुक डाउनलोड करना
JupyterLab का लैंडिंग पेज एक नए टैब में खुलेगा. JupyterLab में नया टर्मिनल बनाएं.

टर्मिनल विंडो में, इन कमांड को चलाकर data फ़ोल्डर पर जाएं. साथ ही, नोटबुक और उस डेटा को डाउनलोड करें जिसका इस्तेमाल आपको लैब के बाकी हिस्से के लिए करना है.
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
इस रिपॉज़िटरी में, डेटा और एनोटेट की गई नोटबुक के साथ चुने गए उदाहरणों की सीरीज़ शामिल है. साइडबार में मौजूद फ़ोल्डर data/examples/titanic-ml-dataset/ पर जाएं और नोटबुक titanic_dataset_ml.ipynb खोलें.

टाइटेनिक चैलेंज के एमएल कोड के बारे में जानें
नोटबुक को एक-एक करके चलाएं. ध्यान दें कि लाइब्रेरी मौजूद न होने की वजह से, कोड काम नहीं करता.

टर्मिनल पर वापस जाएं और जो लाइब्रेरी मौजूद नहीं है उसे इंस्टॉल करें.
pip3 install --user seaborn

रीफ़्रेश करें आइकॉन पर क्लिक करके, नोटबुक कर्नल को फिर से शुरू करें.

सही लाइब्रेरी इंस्टॉल करके, सेल को फिर से चलाएं और देखें कि यह काम कर रहा है या नहीं.
अपनी नोटबुक को Kubeflow Pipeline में बदलना
बाईं ओर मौजूद Kubeflow आइकॉन पर क्लिक करके, Kale को चालू करें.

हर सेल के हिसाब से डिपेंडेंसी एक्सप्लोर करें. देखें कि एक से ज़्यादा सेल, पाइपलाइन के किसी एक चरण का हिस्सा कैसे हो सकती हैं. साथ ही, यह भी देखें कि पाइपलाइन का कोई चरण, पिछले चरणों पर कैसे निर्भर हो सकता है.

कंपाइल करें और चलाएं बटन पर क्लिक करें.

स्नैपशॉट की प्रोग्रेस देखें.

पाइपलाइन रन की प्रोग्रेस देखें.

Kubeflow Pipelines के यूज़र इंटरफ़ेस (यूआई) पर जाने और रन देखने के लिए, लिंक पर क्लिक करें.

प्रोसेस पूरी होने तक इंतज़ार करें.


बधाई हो! आपने अभी-अभी अपनी नोटबुक से, एंड-टू-एंड Kubeflow Pipeline चलाया है!
5. वॉल्यूम स्नैपशॉट की मदद से रिसर्च को दोहराने की क्षमता
नतीजों की जांच करना
पाइपलाइन के आखिरी से दूसरे चरण नतीजे के लॉग देखें. ध्यान दें कि सभी अनुमान लगाने वाले वैरिएबल का स्कोर 100% है. अनुभव रखने वाला डेटा साइंटिस्ट, इसे तुरंत संदिग्ध मान लेगा. इससे पता चलता है कि हमारे मॉडल, ट्रेनिंग डेटा सेट के हिसाब से काम नहीं कर रहे हैं. ऐसा मॉडल के इस्तेमाल किए गए डेटा में किसी समस्या की वजह से हो सकता है.

पिछली स्थिति को फिर से लागू करना
Rok, डेटा वर्शनिंग का ध्यान रखता है. साथ ही, पूरे एनवायरमेंट को उसी तरह से फिर से बनाता है जैसा Compile and Run बटन पर क्लिक करते समय था. इस तरह, आपके पास अपने डेटा और कोड के लिए टाइम मशीन होती है. इसलिए, आइए किसी एक मॉडल को ट्रेन करने से पहले, पाइपलाइन की स्थिति को फिर से शुरू करें और देखें कि क्या हो रहा है. randomforest चरण देखें. इसके बाद, आर्टफ़ैक्ट पर क्लिक करें.

मार्कडाउन में दिए गए चरणों का पालन करें. इसका मतलब है कि Rok के यूज़र इंटरफ़ेस (यूआई) में स्नैपशॉट देखने के लिए, उससे जुड़े लिंक पर क्लिक करें.

Rok यूआरएल को कॉपी करें.

नोटबुक सर्वर लिंक पर जाएं.

नया सर्वर पर क्लिक करें.

Rok का वह यूआरएल चिपकाएं जिसे आपने पहले कॉपी किया था. इसके बाद, अपने-आप भरें बटन पर क्लिक करें.

अपनी नोटबुक के लिए कोई नाम तय करें.

पक्का करें कि आपने यह इमेज चुनी हो:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
नोटबुक सर्वर बनाने के लिए, लॉन्च करें पर क्लिक करें.

नोटबुक सर्वर उपलब्ध होने पर, उससे कनेक्ट करने के लिए कनेक्ट करें पर क्लिक करें.

ध्यान दें कि नोटबुक, पाइपलाइन के उस चरण की सेल में खुलती है जहां से आपने इसे शुरू किया है.

बैकग्राउंड में, Kale ने सभी लाइब्रेरी इंपोर्ट करके और पिछले चरणों से वैरिएबल लोड करके, Notebook की स्थिति को फिर से शुरू कर दिया है.
पिछली स्थिति को डीबग करें
इस सेल में प्रिंट करने का निर्देश जोड़ो:
print(acc_random_forest)
रैंडम फ़ॉरेस्ट को फिर से ट्रेन करने और स्कोर प्रिंट करने के लिए, Shift + Return दबाकर ऐक्टिव सेल को चलाएं. यह 100 है.

अब देखते हैं कि ट्रेनिंग डेटा में कुछ गड़बड़ी तो नहीं है. इस समस्या को एक्सप्लोर करने और ठीक करने के लिए, पिछली सेल को चुनें और प्लस आइकॉन (+) पर क्लिक करके, रैंडम फ़ॉरेस्ट मार्कडाउन के ऊपर एक सेल जोड़ें.

यहां दिया गया टेक्स्ट जोड़ें और ट्रेनिंग सेट को प्रिंट करने के लिए सेल को एक्ज़ीक्यूट करें.
train_df

ओह! ट्रेनिंग लेबल ("Survived") वाले कॉलम को गलती से इनपुट फ़ीचर के तौर पर शामिल कर दिया गया है! मॉडल ने "Survived" फ़ीचर पर फ़ोकस करना सीख लिया है और बाकी फ़ीचर को अनदेखा कर रहा है. इससे इनपुट में गड़बड़ी हो रही है. यह कॉलम, मॉडल के लक्ष्य से पूरी तरह मेल खाता है और अनुमान लगाने के दौरान मौजूद नहीं होता. इसलिए, इसे ट्रेनिंग डेटासेट से हटाना ज़रूरी है, ताकि मॉडल अन्य सुविधाओं से सीख सके.
बग ठीक करने से जुड़ी जानकारी जोड़ना
इस कॉलम को हटाने के लिए, सेल में बदलाव करके यह निर्देश जोड़ें:
train_df.drop('Survived', axis=1, inplace=True)
train_df

Kale को चालू करें. साथ ही, पक्का करें कि Survived लेबल हटाने वाली सेल, featureengineering पाइपलाइन के चरण का हिस्सा हो. इसका आउटलाइन कलर एक जैसा होना चाहिए.
कंपाइल करें और चलाएं बटन पर क्लिक करके, पाइपलाइन को फिर से चलाएं.
Kubeflow Pipelines के यूज़र इंटरफ़ेस (यूआई) पर जाने और रन देखने के लिए, लिंक पर क्लिक करें.
नतीजे वाले चरण के पूरा होने का इंतज़ार करें. इसके बाद, आखिरी नतीजे देखने के लिए लॉग देखें. अब आपको अनुमानित स्कोर ज़्यादा सटीक मिलेंगे!

6. व्यवस्थित करें
MiniKF VM को बंद करें
GCP Console में Deployment Manager पर जाएं और minikf-1 डिप्लॉयमेंट को मिटाएं.
7. बधाई हो
बधाई हो, आपने Kubeflow (MiniKF), Kale, और Rok का इस्तेमाल करके, डेटा साइंस के वर्कफ़्लो को पूरी तरह से लागू कर लिया है!
आगे क्या करना है?
Kubeflow कम्यूनिटी में शामिल हों:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- मंगलवार को होने वाली कम्यूनिटी कॉल
