HP Tuning के साथ Notebook से Kubeflow पाइपलाइन तक: डेटा साइंस का सफ़र

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 को इंस्टॉल करने का तरीका
  • सीएलआई कमांड या एसडीके का इस्तेमाल किए बिना, Jupyter Notebook को Kubeflow Pipelines में बदलने का तरीका
  • बटन पर क्लिक करके, नोटबुक से हाइपरपैरामीटर ट्यूनिंग के साथ Kubeflow Pipelines को चलाने का तरीका
  • नोटबुक और हर पाइपलाइन चरण में, अपने डेटा को अपने-आप वर्शन करने का तरीका

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

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

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

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

अपना GCP प्रोजेक्ट सेट अप करना

GCP प्रोजेक्ट बनाने या मौजूदा GCP प्रोजेक्ट को कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं. अगर आपको किसी मौजूदा GCP प्रोजेक्ट का इस्तेमाल करना है, तो पक्का करें कि वह प्रोजेक्ट यहां बताई गई ज़रूरी शर्तों को पूरा करता हो. पहला चरण, GCP Console में रिसॉर्स मैनेजर खोलना है.

नया प्रोजेक्ट बनाएं या कोई मौजूदा प्रोजेक्ट चुनें:

99b103929d928576.png

इन ज़रूरी शर्तों को पूरा करें:

GCP प्रोजेक्ट सेट अप करने के बारे में ज़्यादा जानने के लिए, GCP का दस्तावेज़ देखें.

GCP प्रोजेक्ट सेट अप करने के बाद, सीधे MiniKF इंस्टॉल करने के निर्देशों पर जाएं.

पहले से असाइन किया गया GCP प्रोजेक्ट खोलें

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

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

MiniKF के साथ Compute इंस्टेंस बनाना

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

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

5228086caadc44c6.png

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

MiniKF VM के चालू होने पर, SSH बटन पर क्लिक करके कनेक्ट करें और लॉग इन करें. स्क्रीन पर दिए गए निर्देशों का पालन करके, 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 में लॉग इन करें.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

इस सेक्शन के दौरान, आपको कुत्ते की नस्ल की पहचान करने वाले उदाहरण को चलाना होगा. यह Udacity AI Nanodegree का एक प्रोजेक्ट है. कुत्ते की इमेज दिए जाने पर, फ़ाइनल मॉडल कुत्ते की नस्ल का अनुमान लगाएगा.

Kubeflow क्लस्टर में नोटबुक सर्वर बनाना

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

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

पक्का करें कि आपने यह Docker इमेज चुनी हो (ध्यान दें कि इमेज टैग अलग हो सकता है):

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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

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

ab9ac96f1a1f0d09.png

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

cd data/
git clone https://github.com/kubeflow-kale/kale

क्लोन की गई रिपॉज़िटरी में, डेटा और एनोटेट की गई नोटबुक के साथ चुने गए उदाहरणों की एक सीरीज़ होती है.

साइडबार में, data/kale/examples/dog-breed-classification/ फ़ोल्डर पर जाएं और नोटबुक dog-breed.ipynb खोलें.

2bc436465522f65b.png

कुत्ते की नस्ल की पहचान करने के उदाहरण के एमएल कोड के बारे में जानें

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

सभी ज़रूरी लाइब्रेरी इंपोर्ट करने के लिए, imports सेल चलाएं. ध्यान दें कि कोड काम नहीं करता, क्योंकि लाइब्रेरी मौजूद नहीं है:

5e2b97ab2512f139.png

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

लाइब्रेरी इंस्टॉल करने के लिए, अगली सेल चलाएं:

c483da77943a6f01.png

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

376b5203209c2c91.png

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

अपनी नोटबुक को Kubeflow Pipelines में पाइपलाइन के तौर पर बदलना

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

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

बधाई हो! आपने अभी-अभी Kubeflow Pipelines में, नोटबुक से शुरू करके पूरी पाइपलाइन चलाई है!

5. हाइपरपैरामीटर ट्यूनिंग के साथ ट्रांसफ़र लर्निंग

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

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

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

हाइपरपैरामीटर ट्यूनिंग

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

आइए, देखते हैं कि अभी क्या हुआ. पहले, Kale ने नोटबुक से एक पाइपलाइन रन तैयार किया था. अब वह कई पाइपलाइन रन तैयार कर रहा है. इनमें से हर एक में, अलग-अलग कॉम्बिनेशन वाले आर्ग्युमेंट दिए गए हैं.

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

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

3e854d3d4bb766c.png

साथ ही, KFP के यूज़र इंटरफ़ेस (यूआई) में ये सुविधाएं भी उपलब्ध हैं:

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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

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

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

7. बधाई हो

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

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

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

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