1. परिचय
| Kubeflow, Kubernetes के लिए मशीन लर्निंग टूलकिट है. इस प्रोजेक्ट का मकसद, Kubernetes पर मशीन लर्निंग (एमएल) वर्कफ़्लो के डिप्लॉयमेंट को आसान, पोर्टेबल, और स्केलेबल बनाना है. इसका मकसद, अलग-अलग इन्फ़्रास्ट्रक्चर में एमएल के लिए बेहतरीन ओपन-सोर्स सिस्टम को आसानी से डिप्लॉय करने का तरीका उपलब्ध कराना है. |
Kubeflow डिप्लॉयमेंट कैसा दिखता है?
Kubeflow डिप्लॉयमेंट:
- पोर्टेबल - यह किसी भी Kubernetes क्लस्टर पर काम करता है. भले ही, यह Google Cloud Platform (GCP), कंपनी की इमारत में या अलग-अलग प्रोवाइडर के बीच मौजूद हो.
- स्केल करने की सुविधा - इसमें ज़रूरत के हिसाब से संसाधनों का इस्तेमाल किया जा सकता है. साथ ही, यह सिर्फ़ Kubernetes क्लस्टर को असाइन किए गए संसाधनों की संख्या से सीमित होता है.
- कंपोज़ेबल - इसकी मदद से, एमएल वर्कफ़्लो के हर चरण को अलग-अलग कॉन्फ़िगर किया जा सकता है. इसके लिए, एमएल फ़्रेमवर्क और लाइब्रेरी के चुने गए सेट में से किसी एक को चुना जा सकता है.
Kubeflow की मदद से, कमज़ोर रूप से जुड़ी माइक्रोसेवाओं को एक यूनिट के तौर पर व्यवस्थित किया जा सकता है. साथ ही, उन्हें अलग-अलग जगहों पर डिप्लॉय किया जा सकता है. जैसे, लैपटॉप पर, कंपनी की इमारत में या क्लाउड में.
इस कोडलैब में, MiniKF का इस्तेमाल करके अपना Kubeflow डिप्लॉयमेंट बनाने का तरीका बताया गया है. इसके बाद, मॉडल को ट्रेन करने और उसे इस्तेमाल करने के लिए, हाइपरपैरामीटर ट्यूनिंग के साथ Kubeflow Pipelines वर्कफ़्लो चलाने का तरीका बताया गया है. यह सब Jupyter Notebook में किया जाता है.
आपको क्या बनाने को मिलेगा
इस कोडलैब में, आपको Kubeflow Pipelines पर हाइपरपैरामीटर ट्यूनिंग के साथ एक जटिल डेटा साइंस पाइपलाइन बनाने का तरीका बताया जाएगा. इसके लिए, आपको किसी भी सीएलआई कमांड या एसडीके का इस्तेमाल नहीं करना होगा. इसके लिए, आपको 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 प्रोजेक्ट बनाने या अपने मौजूदा GCP प्रोजेक्ट को कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं. अगर आपको किसी मौजूदा GCP प्रोजेक्ट का इस्तेमाल करना है, तो पक्का करें कि वह प्रोजेक्ट यहां बताई गई ज़रूरी शर्तों को पूरा करता हो. सबसे पहले, GCP Console में रिसॉर्स मैनेजर खोलें.
नया प्रोजेक्ट बनाएं या कोई मौजूदा प्रोजेक्ट चुनें:

यहां दी गई ज़रूरी शर्तें देखें:
- पक्का करें कि आपके पास प्रोजेक्ट के लिए मालिक की भूमिका हो.
- पक्का करें कि आपके प्रोजेक्ट के लिए बिलिंग चालू हो.
- अगर GCP के मुफ़्त टियर का इस्तेमाल किया जा रहा है या 12 महीने की बिना शुल्क आज़माने की अवधि के साथ 300 डॉलर का क्रेडिट मिला है, तो ध्यान दें कि MiniKF के डिफ़ॉल्ट GCP इंस्टॉलेशन को नहीं चलाया जा सकता. ऐसा इसलिए, क्योंकि मुफ़्त टियर में ज़रूरी संसाधन उपलब्ध नहीं होते. आपको पैसे चुकाकर इस्तेमाल किए जाने वाले खाते पर अपग्रेड करना होगा.
GCP प्रोजेक्ट सेट अप करने के बारे में ज़्यादा जानने के लिए, GCP का दस्तावेज़ देखें.
GCP प्रोजेक्ट सेट अप करने के बाद, सीधे MiniKF इंस्टॉल करने के निर्देशों पर जाएं.
पहले से असाइन किया गया GCP प्रोजेक्ट खोलें
पहले से असाइन किए गए GCP प्रोजेक्ट को खोलने के लिए, नीचे दिए गए बटन पर क्लिक करके GCP Console पर जाएं. इसके बाद, सबसे ऊपर बाईं ओर मौजूद हैमबर्गर मेन्यू में जाकर, होम पैनल खोलें. अगर स्क्रीन खाली है, तो डैशबोर्ड बनाने के लिए, प्रॉम्प्ट में दिए गए 'हां' पर क्लिक करें.

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

पक्का करें कि आपने यह Docker इमेज चुनी हो (ध्यान दें कि इमेज टैग अलग हो सकता है):
gcr.io/arrikto/jupyter-kale:f20978e
5 जीबी का नया, खाली डेटा वॉल्यूम जोड़ें और उसका नाम data रखें.

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

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

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

टर्मिनल विंडो में, data फ़ोल्डर पर जाने के लिए ये कमांड चलाएं. साथ ही, नोटबुक और उस डेटा को डाउनलोड करें जिसका इस्तेमाल आपको लैब के बाकी हिस्से में करना है:
cd data/ git clone https://github.com/kubeflow-kale/kale
क्लोन की गई रिपॉज़िटरी में, डेटा और एनोटेट की गई नोटबुक के साथ चुने गए उदाहरणों की एक सीरीज़ होती है.
साइडबार में, data/kale/examples/dog-breed-classification/ फ़ोल्डर पर जाएं और dog-breed.ipynb नोटबुक खोलें.

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

आम तौर पर, आपको एक नई Docker इमेज बनानी चाहिए, ताकि इस नोटबुक को Kubeflow पाइपलाइन के तौर पर चलाया जा सके. साथ ही, इसमें नई इंस्टॉल की गई लाइब्रेरी शामिल की जा सकें. Rok और Kale यह पक्का करते हैं कि डेवलपमेंट के दौरान इंस्टॉल की गई कोई भी लाइब्रेरी, आपकी पाइपलाइन में पहुंच जाए. ऐसा Rok की स्नैपशॉट टेक्नोलॉजी और Kale की मदद से किया जाता है. Kale, स्नैपशॉट किए गए उन वॉल्यूम को पाइपलाइन के चरणों में माउंट करता है.
लाइब्रेरी इंस्टॉल करने के लिए, अगली सेल चलाएं:

Restart आइकॉन पर क्लिक करके, नोटबुक कर्नल को रीस्टार्ट करें:

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

Kale Deployment Panel में मौजूद स्लाइडर पर क्लिक करके, Kale को चालू करें:

नोटबुक में हर सेल की डिपेंडेंसी एक्सप्लोर करें. देखें कि नोटबुक की कई सेल, पाइपलाइन के एक ही चरण का हिस्सा कैसे हो सकती हैं. इसके लिए, सेल के बाईं ओर मौजूद कलर बार देखें. साथ ही, यह भी देखें कि पाइपलाइन का कोई चरण, पिछले चरणों पर कैसे निर्भर हो सकता है. इसके लिए, सेल के ऊपर मौजूद depends on लेबल देखें. उदाहरण के लिए, नीचे दी गई इमेज में एक ही पाइपलाइन चरण के कई सेल दिखाए गए हैं. इन दोनों का रंग लाल है और ये पिछली पाइपलाइन के चरण पर निर्भर हैं.

Compile and Run बटन पर क्लिक करें:

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

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

Kubeflow Pipelines का यूज़र इंटरफ़ेस (यूआई) नए टैब में खुलता है. रन पूरा होने तक इंतज़ार करें.


बधाई हो! आपने अभी-अभी Kubeflow Pipelines में एंड-टू-एंड पाइपलाइन चलाई है. इसकी शुरुआत आपकी नोटबुक से हुई थी!
5. हाइपरपैरामीटर ट्यूनिंग के साथ ट्रांसफ़र लर्निंग
नतीजों की जांच करना
cnn-from-scratch चरण के लॉग देखें. (Kubeflow Pipelines के यूज़र इंटरफ़ेस पर मौजूद ग्राफ़ में दिए गए चरण पर क्लिक करें. इसके बाद, लॉग टैब पर क्लिक करें.) इस चरण में, आपने कॉन्वोल्यूशनल न्यूरल नेटवर्क (सीएनएन) को शुरू से ट्रेन किया था. ध्यान दें कि ट्रेन किए गए मॉडल की सटीकता बहुत कम है. साथ ही, इस चरण को पूरा होने में बहुत समय लगा.

cnn-vgg16 चरण के लॉग देखें. इस चरण में, आपने पहले से ट्रेन किए गए VGG-16 मॉडल पर ट्रांसफ़र लर्निंग का इस्तेमाल किया. यह एक न्यूरल नेटवर्क है, जिसे विज़ुअल ज्योमेट्री ग्रुप (वीजीजी) ने ट्रेन किया है. यह पिछले मॉडल की तुलना में ज़्यादा सटीक है, लेकिन हम इसे और बेहतर बना सकते हैं.

अब cnn-resnet50 चरण के लॉग देखें. इस चरण में, आपने पहले से ट्रेन किए गए ResNet-50 मॉडल पर ट्रांसफ़र लर्निंग का इस्तेमाल किया. यह ज़्यादा सटीक है. इसलिए, इस कोडलैब के बाकी हिस्सों के लिए इसी मॉडल का इस्तेमाल करें.

हाइपरपैरामीटर ट्यूनिंग
Kubeflow के यूज़र इंटरफ़ेस (यूआई) में जाकर, नोटबुक सर्वर पर वापस जाएं. इसके बाद, dog-breed-katib.ipynb नाम की नोटबुक खोलें. यह data/kale/examples/dog-breed-classification/ पाथ पर मौजूद है. इस नोटबुक में, Katib का इस्तेमाल करके ResNet-50 मॉडल पर कुछ हाइपरपैरामीटर ट्यूनिंग एक्सपेरिमेंट चलाए जाएंगे. ध्यान दें कि नोटबुक की शुरुआत में, पैरामीटर तय करने के लिए आपके पास एक सेल है:

हाइपरपैरामीटर ट्यूनिंग चलाने के लिए, नोटबुक के बाईं ओर मौजूद पैनल में Katib की मदद से एचपी ट्यूनिंग चालू करें:

इसके बाद, Katib को कॉन्फ़िगर करने के लिए, Katib जॉब सेट अप करें पर क्लिक करें:

हर पैरामीटर के लिए खोज की जगह तय करें और कोई लक्ष्य तय करें:

Katib जॉब को कंपाइल और रन करें बटन पर क्लिक करें:

Katib एक्सपेरिमेंट की प्रोग्रेस देखें:

Katib एक्सपेरिमेंट देखने के लिए, देखें पर क्लिक करें:

Kubeflow Pipelines (KFP) में रन देखने के लिए, हो गया पर क्लिक करें:

Katib के एक्सपेरिमेंट पेज पर, आपको नए ट्रायल दिखेंगे:

साथ ही, KFP के यूज़र इंटरफ़ेस (यूआई) में आपको नए रन दिखेंगे:

आइए, देखते हैं कि अभी क्या हुआ. पहले, Kale ने नोटबुक से पाइपलाइन रन तैयार किया था. अब यह कई पाइपलाइन रन तैयार कर रहा है. इनमें से हर एक में, अलग-अलग कॉम्बिनेशन वाले आर्ग्युमेंट शामिल किए गए हैं.
Katib, Kubeflow का एक कॉम्पोनेंट है. इसका इस्तेमाल, अलग-अलग कामों के लिए हाइपरपैरामीटर ट्यूनिंग के जॉब चलाने के लिए किया जाता है. Katib को उन कामों के बारे में कोई जानकारी नहीं होती जिन्हें वह असल में चला रहा होता है. इन्हें Katib की भाषा में ट्रायल कहा जाता है. Kale को सिर्फ़ सर्च स्पेस, ऑप्टिमाइज़ेशन एल्गोरिदम, और लक्ष्य से मतलब है. Katib, ट्रायल के तौर पर सामान्य जॉब (यानी कि पॉड) चलाने की सुविधा देता है. हालांकि, Kale एक शिम लागू करता है, ताकि ट्रायल के तौर पर Kubeflow Pipelines में पाइपलाइन चलाई जा सकें. इसके बाद, पाइपलाइन रन से मेट्रिक इकट्ठा की जा सकें.
Katib एक्सपेरिमेंट के ट्रायल जनरेट होने पर, आपको Katib के यूज़र इंटरफ़ेस (यूआई) में ज़्यादा ट्रायल दिखेंगे:

KFP के यूज़र इंटरफ़ेस (यूआई) में और भी कई रन होते हैं:

Katib एक्सपेरिमेंट पूरा होने के बाद, Katib के यूज़र इंटरफ़ेस (यूआई) में सभी ट्रायल देखे जा सकते हैं:

साथ ही, KFP यूज़र इंटरफ़ेस (यूआई) में मौजूद सभी रन:

नोटबुक पर वापस जाने पर, आपको Kale पैनल में Katib एक्सपेरिमेंट के ठीक बगल में, जानकारी वाला बटन दिखेगा:

इस पर क्लिक करने से, आपको सबसे अच्छा नतीजा और उसे जनरेट करने वाले पैरामीटर दिखेंगे:

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