MiniKF और Kale के साथ Notebook से Kubeflow पाइपलाइन तक

1. परिचय

Kubeflow, Kubernetes के लिए मशीन लर्निंग टूलकिट है. इस प्रोजेक्ट का मकसद, Kubernetes पर मशीन लर्निंग (एमएल) वर्कफ़्लो के डिप्लॉयमेंट को आसान, पोर्टेबल, और स्केलेबल बनाना है. इसका मकसद, अलग-अलग इन्फ़्रास्ट्रक्चर में एमएल के लिए सबसे बेहतरीन ओपन-सोर्स सिस्टम को आसानी से डिप्लॉय करने का तरीका उपलब्ध कराना है.

Kubeflow डिप्लॉयमेंट कैसा दिखता है?

Kubeflow डिप्लॉयमेंट का मतलब है:

  • पोर्टेबल - यह किसी भी Kubernetes क्लस्टर पर काम करता है. भले ही, वह Google Cloud Platform (GCP), ऑन-प्रिमाइसेस या अलग-अलग प्रोवाइडर पर मौजूद हो.
  • स्केल करने की सुविधा - इसमें ज़रूरत के हिसाब से संसाधनों का इस्तेमाल किया जा सकता है. साथ ही, यह सिर्फ़ Kubernetes क्लस्टर को असाइन किए गए संसाधनों की संख्या से सीमित होता है.
  • कंपोज़ेबल - ऑफ़लाइन या कम क्वालिटी वाले नेटवर्क पर काम करने के लिए, सर्विस वर्कर की मदद से बेहतर बनाया गया है.

यह एक ऐसी तकनीक है जिसकी मदद से, कम इंटरेक्शन वाली माइक्रोसेवाओं को एक यूनिट के तौर पर व्यवस्थित किया जा सकता है. साथ ही, उन्हें अलग-अलग जगहों पर डिप्लॉय किया जा सकता है. जैसे, लैपटॉप या क्लाउड.

इस कोडलैब में, MiniKF का इस्तेमाल करके Kubeflow डिप्लॉयमेंट बनाने और Jupyter Notebook में Kubeflow Pipelines वर्कफ़्लो चलाने का तरीका बताया गया है.

आपको क्या बनाने को मिलेगा

इस कोडलैब में, आपको Kubeflow Pipelines की मदद से एक जटिल डेटा साइंस पाइपलाइन बनाने का तरीका बताया जाएगा. इसके लिए, आपको किसी भी सीएलआई कमांड या एसडीके का इस्तेमाल नहीं करना होगा. इसके लिए, आपको Kubernetes या Docker के बारे में जानकारी होना ज़रूरी नहीं है. यह प्रोसेस पूरी होने के बाद, आपके इन्फ़्रास्ट्रक्चर में ये चीज़ें शामिल होंगी:

  • MiniKF (Mini Kubeflow) VM, जो अपने-आप इंस्टॉल हो जाता है:
  • Kubernetes (Minikube का इस्तेमाल करके)
  • Kubeflow
  • Kale, यह एक ऐसा टूल है जो सामान्य Jupyter Notebooks को Kubeflow Pipelines वर्कफ़्लो में बदलता है ( GitHub)
  • डेटा वर्शनिंग और दोबारा इस्तेमाल करने के लिए Arrikto Rok

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

  • MiniKF की मदद से Kubeflow को इंस्टॉल करने का तरीका
  • सीएलआई कमांड या एसडीके का इस्तेमाल किए बिना, Jupyter Notebook को Kubeflow Pipelines में बदलने का तरीका
  • बटन पर क्लिक करके, नोटबुक से Kubeflow Pipelines चलाने का तरीका
  • किसी नोटबुक और हर पाइपलाइन चरण में, अपने डेटा को अपने-आप वर्शन करने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • चालू GCP प्रोजेक्ट, जिसके लिए आपके पास मालिक की अनुमतियां हों

यह Kubeflow पर आधारित एक बेहतर कोडलैब है. ज़्यादा जानकारी और प्लैटफ़ॉर्म के बारे में बुनियादी जानकारी के लिए, Kubeflow के बारे में बुनियादी जानकारी वाला दस्तावेज़ देखें. इसमें काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, आपको सिर्फ़ कॉपी और चिपकाने के लिए कोड उपलब्ध कराया जाता है.

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

GCP प्रोजेक्ट आईडी और क्लस्टर का नाम सेट करना

अपना प्रोजेक्ट आईडी ढूंढने के लिए, GCP Console के होम पैनल पर जाएं. यह पैनल, सबसे ऊपर बाईं ओर मौजूद हैमबर्गर मेन्यू में होता है. अगर स्क्रीन खाली है, तो डैशबोर्ड बनाने के लिए, प्रॉम्प्ट में दिए गए 'हां' पर क्लिक करें.

GCP Console खोलें

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. MiniKF इंस्टॉल करना

Compute इंस्टेंस बनाना

GCP Marketplace में, "MiniKF" खोजें.

Arrikto की MiniKF वर्चुअल मशीन चुनें.

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

MiniKF में लॉग इन करना

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

774e83c3e96cf7b3.png

Kubeflow में लॉग इन करना

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

Rok में लॉग इन करना

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

a683198ac4ba900d.png

80aad6ba5d298a7e.png

बधाई हो! आपने GCP पर MiniKF को डिप्लॉय कर लिया है! अब आपके पास नोटबुक बनाने, एमएल कोड लिखने, और Kubeflow Pipelines चलाने का विकल्प है. डेटा वर्शनिंग और दोबारा इस्तेमाल करने के लिए, Rok का इस्तेमाल करें.

4. अपनी नोटबुक से पाइपलाइन चलाना

इस सेक्शन में, आपको टाइटैनिक का उदाहरण दिया जाएगा. यह Kaggle की एक ऐसी प्रतियोगिता है जिसमें यह अनुमान लगाया जाता है कि टाइटैनिक के जहाज़ के डूबने की घटना में कौनसे यात्री बच गए.

नोटबुक सर्वर बनाना

Kubeflow के सेंट्रल डैशबोर्ड पर, Notebook Servers लिंक पर जाएं.

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

पक्का करें कि आपने यह इमेज चुनी हो:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

5 जीबी का नया, खाली डेटा वॉल्यूम जोड़ें और इसे data नाम दें.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

2f06041475f45d3.png

डेटा और नोटबुक डाउनलोड करना

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

2482011174f7bc75.png

टर्मिनल विंडो में, इन कमांड को चलाकर data फ़ोल्डर पर जाएं. साथ ही, नोटबुक और उस डेटा को डाउनलोड करें जिसका इस्तेमाल आपको लैब के बाकी हिस्से के लिए करना है.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

इस रिपॉज़िटरी में, डेटा और एनोटेट की गई नोटबुक के साथ चुने गए उदाहरणों की सीरीज़ शामिल है. साइडबार में मौजूद फ़ोल्डर data/examples/titanic-ml-dataset/ पर जाएं और नोटबुक titanic_dataset_ml.ipynb खोलें.

c85baf68b36c63b2.png

टाइटेनिक चैलेंज के एमएल कोड को एक्सप्लोर करें

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

bf2451fd7407e334.png

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

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

सही लाइब्रेरी इंस्टॉल करके, सेल को फिर से चलाएं और देखें कि यह काम कर रहा है या नहीं.

अपनी नोटबुक को Kubeflow Pipeline में बदलना

बाएं पैनल में मौजूद Kubeflow आइकॉन पर क्लिक करके, Kale को चालू करें.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

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

bde5cef34f00e258.png

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

9408f46abb2493f5.png

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

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

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

44bee7dc0d24ec21.png

d377b6d574a4970.png

बधाई हो! आपने अभी-अभी अपनी नोटबुक से, एंड-टू-एंड Kubeflow Pipeline चलाया है!

5. वॉल्यूम स्नैपशॉट की मदद से रिसर्च दोहराने की क्षमता

नतीजों की जांच करना

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

2a594032c2dd6ff6.png

पिछली स्थिति को फिर से लागू करना

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

4f25ca4560711b23.png

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

e533bc781da9355a.png

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

d155d19731b5cedd.png

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

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

पहले कॉपी किया गया Rok यूआरएल चिपकाएं और अपने-आप भरें बटन पर क्लिक करें.

9ba4d4128a3bdeea.png

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

7685c3bf35fc74b2.png

पक्का करें कि आपने यह इमेज चुनी हो:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

बैकग्राउंड में, Kale ने सभी लाइब्रेरी इंपोर्ट करके और पिछले चरणों से वैरिएबल लोड करके, Notebook की स्थिति को फिर से शुरू कर दिया है.

पिछली स्थिति को डीबग करें

इस सेल में प्रिंट करने का निर्देश जोड़ो:

print(acc_random_forest)

रैंडम फ़ॉरेस्ट को फिर से ट्रेन करने और स्कोर प्रिंट करने के लिए, Shift + Return दबाकर ऐक्टिव सेल को चलाएं. यह 100 है.

e2a8a3b5465fcb5d.png

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

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

बग ठीक करने से जुड़ा अपडेट जोड़ना

इस कॉलम को हटाने के लिए, सेल में बदलाव करके यह निर्देश जोड़ें:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Kale को चालू करें. साथ ही, यह पक्का करें कि Survived लेबल हटाने वाली सेल, featureengineering पाइपलाइन के चरण का हिस्सा हो. इसका आउटलाइन कलर भी एक जैसा होना चाहिए.

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

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

नतीजे वाले चरण के पूरा होने का इंतज़ार करें. इसके बाद, आखिरी नतीजे देखने के लिए लॉग देखें. अब आपको अनुमान के सटीक स्कोर मिलेंगे!

8c6a9676b49e5be8.png

6. व्यवस्थित करें

MiniKF VM को डिस्ट्रॉय करना

GCP Console में Deployment Manager पर जाएं और minikf-1 डिप्लॉयमेंट मिटाएं.

7. बधाई हो

बधाई हो, आपने Kubeflow (MiniKF), Kale, और Rok का इस्तेमाल करके, डेटा साइंस के वर्कफ़्लो को पूरी तरह से लागू कर लिया है!

आगे क्या करना है?

Kubeflow कम्यूनिटी में शामिल हों:

इस बारे में और पढ़ें