एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

AWS और Amazon SageMaker पर Kubeflow का उपयोग करके लचीले और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर का निर्माण करें

इस पोस्ट में, हम प्रदर्शित करते हैं कि कैसे एडब्ल्यूएस पर क्यूबफ्लो (क्यूबफ्लो का एक एडब्ल्यूएस-विशिष्ट वितरण) के साथ प्रयोग किया जाता है AWS डीप लर्निंग कंटेनर और अमेज़ॅन इलास्टिक फ़ाइल सिस्टम (अमेज़ॅन ईएफएस) सहयोग को सरल बनाता है और दोनों पर बड़े पैमाने पर गहन शिक्षण मॉडल के प्रशिक्षण में लचीलापन प्रदान करता है अमेज़ॅन इलास्टिक कुबेरनेट्स सेवा (अमेज़ॅन ईकेएस) और अमेज़न SageMaker एक संकर वास्तुकला दृष्टिकोण का उपयोग करना।

मशीन लर्निंग (एमएल) विकास जटिल और लगातार विकसित होने वाले ओपन-सोर्स फ्रेमवर्क और टूलकिट के साथ-साथ जटिल और लगातार विकसित होने वाले हार्डवेयर इकोसिस्टम पर निर्भर करता है। एमएल विकास को क्लस्टर में स्केल करते समय यह एक चुनौती बन गया है। कंटेनर एक समाधान प्रदान करते हैं, क्योंकि वे न केवल प्रशिक्षण कोड को पूरी तरह से एनकैप्सुलेट कर सकते हैं, बल्कि संपूर्ण निर्भरता हार्डवेयर पुस्तकालयों में ढेर हो जाती है। यह एक ऐसा एमएल वातावरण सुनिश्चित करता है जो सुसंगत और पोर्टेबल हो, और प्रशिक्षण क्लस्टर के प्रत्येक व्यक्तिगत नोड पर प्रशिक्षण वातावरण की पुनरुत्पादन की सुविधा प्रदान करता है।

कुबेरनेट्स इन कंटेनरीकृत अनुप्रयोगों के बुनियादी ढांचे की तैनाती, संसाधन स्केलिंग और प्रबंधन को स्वचालित करने के लिए व्यापक रूप से अपनाई गई प्रणाली है। हालांकि, कुबेरनेट्स को एमएल को ध्यान में रखकर नहीं बनाया गया था, इसलिए वाईएएमएल विनिर्देश फाइलों पर इसकी भारी निर्भरता के कारण यह डेटा वैज्ञानिकों के लिए प्रतिकूल महसूस कर सकता है। ज्यूपिटर का कोई अनुभव नहीं है, और कई एमएल-विशिष्ट क्षमताएं नहीं हैं, जैसे कि वर्कफ़्लो प्रबंधन और पाइपलाइन, और अन्य क्षमताएं जो एमएल विशेषज्ञ अपेक्षा करते हैं, जैसे हाइपरपैरामीटर ट्यूनिंग, मॉडल होस्टिंग, और अन्य। ऐसी क्षमताओं का निर्माण किया जा सकता है, लेकिन कुबेरनेट्स को इसके प्राथमिक उद्देश्य के रूप में ऐसा करने के लिए डिज़ाइन नहीं किया गया था।

ओपन-सोर्स समुदाय ने नोटिस लिया और कुबेरनेट्स के शीर्ष पर क्यूबफ्लो नामक एक परत विकसित की। Kubeflow का उद्देश्य Kubernetes पर एंड-टू-एंड ML वर्कफ़्लोज़ को सरल, पोर्टेबल और स्केलेबल बनाना है। आप क्यूबफ्लो का उपयोग एमएल के लिए विविध बुनियादी ढांचे के लिए सर्वश्रेष्ठ-नस्ल के ओपन-सोर्स सिस्टम को तैनात करने के लिए कर सकते हैं।

Kubeflow और Kubernetes डेटा वैज्ञानिक टीमों को लचीलापन और नियंत्रण प्रदान करते हैं। हालांकि, कम परिचालन ओवरहेड के साथ बड़े पैमाने पर चल रहे प्रशिक्षण समूहों का उच्च उपयोग सुनिश्चित करना अभी भी चुनौतीपूर्ण है।

यह पोस्ट प्रदर्शित करती है कि जिन ग्राहकों के पास ऑन-प्रिमाइसेस प्रतिबंध या मौजूदा कुबेरनेट्स निवेश हैं, वे स्व-प्रबंधित दृष्टिकोण के आधार पर वितरित प्रशिक्षण के लिए एमएल पाइपलाइन को लागू करने के लिए AWS पर Amazon EKS और Kubeflow का उपयोग करके इस चुनौती का समाधान कैसे कर सकते हैं, और एक के लिए पूरी तरह से प्रबंधित SageMaker का उपयोग कर सकते हैं। लागत-अनुकूलित, पूरी तरह से प्रबंधित, और उत्पादन-पैमाने पर प्रशिक्षण बुनियादी ढांचा। इसमें हाइब्रिड वितरित प्रशिक्षण आर्किटेक्चर का चरण-दर-चरण कार्यान्वयन शामिल है जो आपको रनटाइम पर दो दृष्टिकोणों के बीच चयन करने की अनुमति देता है, जो आपकी तैनाती के लिए सख्त जरूरतों के साथ अधिकतम नियंत्रण और लचीलापन प्रदान करता है। आप देखेंगे कि आप अपनी गहन शिक्षण प्रशिक्षण स्क्रिप्ट में ओपन-सोर्स लाइब्रेरी का उपयोग कैसे जारी रख सकते हैं और फिर भी इसे कुबेरनेट्स और सेजमेकर दोनों पर प्लेटफॉर्म अज्ञेय तरीके से चलाने के लिए अनुकूल बना सकते हैं।

एडब्ल्यूएस और सेजमेकर पर क्यूबफ्लो कैसे मदद करता है?

TensorFlow, PyTorch, MXNet, और अन्य जैसे गहन शिक्षण ढांचे के साथ निर्मित तंत्रिका नेटवर्क मॉडल विशेष रूप से कंप्यूटर दृष्टि और प्राकृतिक भाषा प्रसंस्करण उपयोग के मामलों में काफी बड़े प्रशिक्षण डेटासेट का उपयोग करके बहुत अधिक सटीकता प्रदान करते हैं। हालांकि, बड़े प्रशिक्षण डेटासेट के साथ, गहन शिक्षण मॉडल को प्रशिक्षित करने में अधिक समय लगता है, जो अंततः बाजार के समय को धीमा कर देता है। यदि हम एक क्लस्टर का विस्तार कर सकते हैं और मॉडल प्रशिक्षण समय को हफ्तों से घटाकर दिनों या घंटों तक कम कर सकते हैं, तो इसका उत्पादकता और व्यावसायिक वेग पर बहुत अधिक प्रभाव पड़ सकता है।

अमेज़ॅन ईकेएस प्रबंधित कुबेरनेट्स नियंत्रण विमान को व्यवस्थित करने में मदद करता है। आप सीपीयू और जीपीयू इंस्टेंस के साथ बड़े पैमाने पर प्रशिक्षण क्लस्टर बनाने के लिए अमेज़ॅन ईकेएस का उपयोग कर सकते हैं और क्यूबफ्लो टूलकिट का उपयोग एमएल-फ्रेंडली, ओपन-सोर्स टूल प्रदान करने और एमएल वर्कफ़्लो को संचालित करने के लिए कर सकते हैं जो आपकी टीम की उत्पादकता में सुधार के लिए क्यूबफ्लो पाइपलाइनों का उपयोग करके पोर्टेबल और स्केलेबल हैं। बाजार के लिए समय कम करें।

हालाँकि, इस दृष्टिकोण के साथ कुछ चुनौतियाँ हो सकती हैं:

  • डेटा साइंस टीमों में क्लस्टर का अधिकतम उपयोग सुनिश्चित करना। उदाहरण के लिए, आपको मांग पर GPU इंस्टेंस का प्रावधान करना चाहिए और उत्पादन-पैमाने के कार्यों जैसे गहन शिक्षण प्रशिक्षण की मांग के लिए इसका उच्च उपयोग सुनिश्चित करना चाहिए, और कम मांग वाले कार्यों जैसे डेटा प्रीप्रोसेसिंग के लिए CPU इंस्टेंस का उपयोग करना चाहिए
  • कुबेरनेट्स क्लस्टर वर्कर नोड में तैनात डेटाबेस, स्टोरेज और प्रमाणीकरण सहित हेवीवेट क्यूबफ्लो इंफ्रास्ट्रक्चर घटकों की उच्च उपलब्धता सुनिश्चित करना। उदाहरण के लिए, Kubeflow नियंत्रण विमान कलाकृतियों (जैसे MySQL इंस्टेंस, पॉड लॉग, या मिनिओ स्टोरेज) उत्पन्न करता है जो समय के साथ बढ़ता है और निरंतर निगरानी क्षमताओं के साथ आकार बदलने योग्य स्टोरेज वॉल्यूम की आवश्यकता होती है।
  • डेवलपर्स, प्रशिक्षण समूहों और परियोजनाओं के बीच प्रशिक्षण डेटासेट, कोड और गणना वातावरण साझा करना चुनौतीपूर्ण है। उदाहरण के लिए, यदि आप अपने स्वयं के पुस्तकालयों के सेट पर काम कर रहे हैं और उन पुस्तकालयों में मजबूत अन्योन्याश्रितताएं हैं, तो एक ही टीम में डेटा वैज्ञानिकों के बीच कोड के समान टुकड़े को साझा करना और चलाना वास्तव में कठिन हो जाता है। साथ ही, प्रत्येक प्रशिक्षण रन के लिए आपको प्रशिक्षण डेटासेट डाउनलोड करने और नए कोड परिवर्तनों के साथ प्रशिक्षण छवि बनाने की आवश्यकता होती है।

AWS पर Kubeflow इन चुनौतियों का समाधान करने में मदद करता है और एक एंटरप्राइज़-ग्रेड अर्ध-प्रबंधित Kubeflow उत्पाद प्रदान करता है। AWS पर Kubeflow के साथ, आप कुछ Kubeflow कंट्रोल प्लेन सेवाओं जैसे डेटाबेस, स्टोरेज, मॉनिटरिंग और उपयोगकर्ता प्रबंधन को AWS प्रबंधित सेवाओं से बदल सकते हैं जैसे अमेज़न रिलेशनल डेटाबेस सर्विस (अमेज़ॅन आरडीएस), अमेज़न सरल भंडारण सेवा (अमेज़न S3), अमेज़ॅन इलास्टिक फ़ाइल सिस्टम (अमेजन EFS), अमेज़न FSx, अमेज़ॅन क्लाउडवॉच, तथा अमेज़ॅन कॉग्निटो.

इन Kubeflow घटकों की जगह Kubernetes से Kubeflow नियंत्रण विमान के महत्वपूर्ण भागों को अलग करता है, एक सुरक्षित, स्केलेबल, लचीला और लागत-अनुकूलित डिज़ाइन प्रदान करता है। यह दृष्टिकोण ईकेएस डेटा प्लेन से भंडारण और गणना संसाधनों को भी मुक्त करता है, जिसकी आवश्यकता वितरित मॉडल प्रशिक्षण या उपयोगकर्ता नोटबुक सर्वर जैसे अनुप्रयोगों द्वारा हो सकती है। एडब्ल्यूएस पर क्यूबफ्लो डीप लर्निंग कंटेनर (डीएलसी) छवियों के साथ ज्यूपिटर नोटबुक का मूल एकीकरण भी प्रदान करता है, जो पहले से पैक किए गए हैं और एडब्ल्यूएस अनुकूलित डीप लर्निंग फ्रेमवर्क जैसे कि पाइटोरच और टेन्सरफ्लो के साथ पूर्व-कॉन्फ़िगर किए गए हैं जो आपको बिना किसी सौदे के अपना प्रशिक्षण कोड लिखना शुरू करने की अनुमति देते हैं। निर्भरता संकल्प और ढांचे के अनुकूलन के साथ। साथ ही, प्रशिक्षण समूहों और विकास परिवेश के साथ Amazon EFS एकीकरण आपको अपना कोड और संसाधित प्रशिक्षण डेटासेट साझा करने की अनुमति देता है, जो प्रत्येक कोड परिवर्तन के बाद कंटेनर छवि बनाने और विशाल डेटासेट लोड करने से बचता है। AWS पर Kubeflow के साथ ये एकीकरण आपको मॉडल निर्माण और प्रशिक्षण समय में तेजी लाने में मदद करते हैं और आसान डेटा और कोड साझाकरण के साथ बेहतर सहयोग की अनुमति देते हैं।

AWS पर Kubeflow अत्यधिक उपलब्ध और मज़बूत ML प्लेटफ़ॉर्म बनाने में मदद करता है। यह प्लेटफ़ॉर्म गहन शिक्षण मॉडल बनाने और प्रशिक्षित करने के लिए लचीलापन प्रदान करता है और कई ओपन-सोर्स टूलकिट, लॉग में अंतर्दृष्टि और प्रयोग के लिए इंटरैक्टिव डिबगिंग तक पहुंच प्रदान करता है। हालाँकि, सैकड़ों GPU पर गहन शिक्षण मॉडल का प्रशिक्षण देते हुए बुनियादी ढाँचे के संसाधनों का अधिकतम उपयोग प्राप्त करना अभी भी बहुत सारे परिचालन ओवरहेड्स को शामिल करता है। इसे सेजमेकर का उपयोग करके संबोधित किया जा सकता है, जो एक पूरी तरह से प्रबंधित सेवा है जिसे प्रदर्शनकारी और लागत-अनुकूलित प्रशिक्षण समूहों को संभालने के लिए डिज़ाइन और अनुकूलित किया गया है जो केवल अनुरोध किए जाने पर प्रावधान किए जाते हैं, आवश्यकतानुसार स्केल किए जाते हैं, और काम पूरा होने पर स्वचालित रूप से बंद हो जाते हैं, जिससे करीब 100 प्रदान करते हैं। % संसाधन प्रयोग। आप प्रबंधित सेजमेकर घटकों का उपयोग करके सेजमेकर को क्यूबफ्लो पाइपलाइनों के साथ एकीकृत कर सकते हैं। यह आपको क्यूबफ्लो पाइपलाइनों के हिस्से के रूप में एमएल वर्कफ़्लोज़ को संचालित करने की अनुमति देता है, जहाँ आप स्थानीय प्रशिक्षण के लिए कुबेरनेट्स और हाइब्रिड आर्किटेक्चर में उत्पाद-स्तरीय प्रशिक्षण के लिए सेजमेकर का उपयोग कर सकते हैं।

समाधान अवलोकन

निम्नलिखित आर्किटेक्चर बताता है कि कैसे हम कुबेरनेट्स पर वितरित प्रशिक्षण चलाने के लिए पोर्टेबल और स्केलेबल एंड-टू-एंड एमएल वर्कफ़्लो बनाने और तैनात करने के लिए क्यूबफ़्लो पाइपलाइनों का उपयोग करते हैं, क्यूबफ़्लो प्रशिक्षण या सेजमेकर का उपयोग रनटाइम पैरामीटर के आधार पर करते हैं।

Kubeflow प्रशिक्षण Kubernetes ऑपरेटरों का एक समूह है जो TensorFlow, PyTorch, और अन्य जैसे विभिन्न ढांचे का उपयोग करके ML मॉडल के वितरित प्रशिक्षण के लिए Kubeflow में समर्थन जोड़ता है। pytorch-operator कुबेरनेट्स का क्यूबफ़्लो कार्यान्वयन है कस्टम संसाधन (PyTorchJob) कुबेरनेट्स पर वितरित PyTorch प्रशिक्षण कार्य चलाने के लिए।

जब हमें इंटरैक्टिव डिबगिंग और विश्लेषण के लिए लचीलेपन और सभी अंतर्निहित संसाधनों तक पहुंच की आवश्यकता होती है, तो हम प्रयोग चरण के दौरान PyTorch वितरित प्रशिक्षण को चलाने के लिए Kubeflow पाइपलाइन के हिस्से के रूप में PyTorchJob Launcher घटक का उपयोग करते हैं।

हम उत्पादन पैमाने पर अपने मॉडल प्रशिक्षण को चलाने के लिए क्यूबफ्लो पाइपलाइनों के लिए सेजमेकर घटकों का भी उपयोग करते हैं। यह हमें शक्तिशाली सेजमेकर सुविधाओं का लाभ उठाने की अनुमति देता है जैसे कि पूरी तरह से प्रबंधित सेवाएं, अधिकतम जीपीयू उपयोग के साथ वितरित प्रशिक्षण नौकरियां, और लागत प्रभावी प्रशिक्षण के माध्यम से अमेज़ॅन इलास्टिक कम्प्यूट क्लाउड (अमेज़ॅन ईसी 2) स्पॉट इंस्टेंस।

कार्यप्रवाह निर्माण प्रक्रिया के भाग के रूप में, आप इस पाइपलाइन को बनाने के लिए निम्नलिखित चरणों को पूरा करते हैं (जैसा कि पिछले आरेख में दिखाया गया है):

  1. Kubeflow डैशबोर्ड बनाने और Kubeflow केंद्रीय डैशबोर्ड से Jupyter नोटबुक तक पहुँचने के लिए Kubeflow मेनिफेस्ट फ़ाइल का उपयोग करें।
  2. Kubeflow पाइपलाइन SDK का उपयोग Python कोड का उपयोग करके Kubeflow पाइपलाइन बनाने और संकलित करने के लिए करें। पाइपलाइन संकलन पायथन फ़ंक्शन को एक वर्कफ़्लो संसाधन में परिवर्तित करता है, जो एक Argo-संगत YAML प्रारूप है।
  3. पाइपलाइन चलाने के लिए पाइपलाइन सेवा समापन बिंदु को कॉल करने के लिए क्यूबफ़्लो पाइपलाइन एसडीके क्लाइंट का उपयोग करें।
  4. पाइपलाइन सशर्त रनटाइम चर का मूल्यांकन करती है और लक्ष्य रन वातावरण के रूप में सेजमेकर या कुबेरनेट्स के बीच निर्णय लेती है।
  5. कुबेरनेट्स के मूल वातावरण पर वितरित प्रशिक्षण चलाने के लिए Kubeflow PyTorch Launcher घटक का उपयोग करें, या SageMaker प्रबंधित प्लेटफ़ॉर्म पर प्रशिक्षण सबमिट करने के लिए SageMaker घटक का उपयोग करें।

निम्नलिखित आंकड़ा वास्तुकला में शामिल क्यूबफ्लो पाइपलाइन घटकों को दिखाता है जो हमें कुबेरनेट्स या सेजमेकर वितरित वातावरण के बीच चयन करने की सुविधा देता है।

क्यूबफ्लो पाइपलाइन घटक

केस वर्कफ़्लो का उपयोग करें

हम AWS पर Kubeflow का उपयोग करके Amazon EKS और SageMaker का उपयोग करके वितरित प्रशिक्षण के लिए उपयोग के मामले को स्थापित करने और चलाने के लिए निम्नलिखित चरण-दर-चरण दृष्टिकोण का उपयोग करते हैं।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

.. पूर्वापेक्षाएँ

इस पूर्वाभ्यास के लिए, आपके पास निम्नलिखित शर्तें होनी चाहिए:

  • An AWS खाता.
  • डॉकर और के साथ एक मशीन AWS कमांड लाइन इंटरफ़ेस (एडब्ल्यूएस सीएलआई) स्थापित।
  • वैकल्पिक रूप से, आप उपयोग कर सकते हैं AWS क्लाउड 9, एक क्लाउड-आधारित एकीकृत विकास वातावरण (IDE) जो आपके वेब ब्राउज़र से सभी कार्य को पूरा करने में सक्षम बनाता है। सेटअप निर्देशों के लिए, देखें Cloud9 IDE सेटअप करें. अपने Cloud9 परिवेश से, धन चिह्न चुनें और नया टर्मिनल खोलें।
  • एक भूमिका बनाएँ नाम के साथ sagemakerrole. प्रबंधित नीतियां जोड़ें AmazonSageMakerFullAccess और AmazonS3FullAccess सेजमेकर को S3 बकेट तक पहुंच प्रदान करने के लिए। इस भूमिका का उपयोग सेजमेकर जॉब द्वारा क्यूबफ्लो पाइपलाइन चरण के भाग के रूप में प्रस्तुत किया जाता है।
  • सुनिश्चित करें कि आपके खाते में सेजमेकर प्रशिक्षण संसाधन प्रकार की सीमा है ml.p3.2xlarge 2 का उपयोग करके बढ़ाया गया सेवा कोटा कंसोल

1. AWS पर Amazon EKS और Kubeflow इंस्टॉल करें

आप Kubernetes क्लस्टर बनाने और Kubeflow को परिनियोजित करने के लिए कई अलग-अलग तरीकों का उपयोग कर सकते हैं। इस पोस्ट में, हम उस दृष्टिकोण पर ध्यान केंद्रित करते हैं जो हमें विश्वास है कि प्रक्रिया में सरलता लाता है। सबसे पहले, हम एक EKS क्लस्टर बनाते हैं, फिर हम Kubeflow को AWS v1.5 पर तैनात करते हैं। इन कार्यों में से प्रत्येक के लिए, हम संबंधित ओपन-सोर्स प्रोजेक्ट का उपयोग करते हैं जो कि सिद्धांतों का पालन करता है ढांचा करो. प्रत्येक कार्य के लिए पूर्वापेक्षाएँ स्थापित करने के बजाय, हम डॉकटर कंटेनरों का निर्माण करते हैं जिनमें सभी आवश्यक उपकरण होते हैं और कंटेनरों के भीतर से कार्य करते हैं।

हम इस पोस्ट में Do Framework का उपयोग करते हैं, जो एक ऐड-ऑन के रूप में Amazon EFS के साथ Kubeflow परिनियोजन को स्वचालित करता है। उत्पादन परिनियोजन के लिए AWS परिनियोजन विकल्पों पर आधिकारिक Kubeflow के लिए, देखें तैनाती.

वर्तमान कार्यशील निर्देशिका और AWS CLI को कॉन्फ़िगर करें

हम एक कार्यशील निर्देशिका को कॉन्फ़िगर करते हैं ताकि हम इसे अनुसरण करने वाले चरणों के लिए शुरुआती बिंदु के रूप में संदर्भित कर सकें:

export working_dir=$PWD

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

aws configure --profile=kubeflow
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: us-west-2
Default output format [None]: json

# (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

1.1 एक ईकेएस क्लस्टर बनाएं

यदि आपके पास पहले से ही एक ईकेएस क्लस्टर उपलब्ध है, तो आप अगले भाग पर जा सकते हैं। इस पोस्ट के लिए, हम उपयोग करते हैं एडब्ल्यूएस-डू-ईएक्स प्रोजेक्ट हमारे क्लस्टर बनाने के लिए।

  1. पहले प्रोजेक्ट को अपनी वर्किंग डायरेक्टरी में क्लोन करें
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-eks
    cd aws-do-eks/

  2. फिर बनाएं और चलाएं aws-do-eks कंटेनर:
    ./build.sh
    ./run.sh

    RSI build.sh स्क्रिप्ट एक डॉकर कंटेनर छवि बनाती है जिसमें ईकेएस क्लस्टर के प्रावधान और संचालन के लिए सभी आवश्यक उपकरण और स्क्रिप्ट हैं। run.sh स्क्रिप्ट बनाई गई डॉकर छवि का उपयोग करके एक कंटेनर शुरू करती है और इसे बनाए रखती है, इसलिए हम इसे अपने ईकेएस प्रबंधन वातावरण के रूप में उपयोग कर सकते हैं। अपनी स्थिति देखने के लिए aws-do-eks कंटेनर, आप चला सकते हैं ./status.sh. यदि कंटेनर Exited स्थिति में है, तो आप इसका उपयोग कर सकते हैं ./start.sh कंटेनर को ऊपर लाने के लिए स्क्रिप्ट, या कंटेनर को पुनरारंभ करने के लिए, आप चला सकते हैं ./stop.sh द्वारा पीछा ./run.sh.

  3. दौड़ में एक खोल खोलें aws-do-eks कंटेनर:
  4. हमारे KubeFlow परिनियोजन के लिए EKS क्लस्टर कॉन्फ़िगरेशन की समीक्षा करने के लिए, निम्न कमांड चलाएँ:
    vi ./eks-kubeflow.yaml

    डिफ़ॉल्ट रूप से, यह कॉन्फ़िगरेशन नाम का एक क्लस्टर बनाता है eks-kubeflow में us-west-2 छह m5.xबड़े नोड्स वाला क्षेत्र। साथ ही, EBS वॉल्यूम एन्क्रिप्शन डिफ़ॉल्ट रूप से सक्षम नहीं है। आप इसे जोड़कर सक्षम कर सकते हैं "volumeEncrypted: true" नोडग्रुप में और यह डिफ़ॉल्ट कुंजी का उपयोग करके एन्क्रिप्ट करेगा। यदि आवश्यक हो तो अन्य कॉन्फ़िगरेशन सेटिंग्स को संशोधित करें।

  5. क्लस्टर बनाने के लिए, निम्न कमांड चलाएँ:
    export AWS_PROFILE=kubeflow
    eksctl create cluster -f ./eks-kubeflow.yaml

    क्लस्टर प्रावधान प्रक्रिया में 30 मिनट तक का समय लग सकता है।

  6. यह सत्यापित करने के लिए कि क्लस्टर सफलतापूर्वक बनाया गया था, निम्न आदेश चलाएँ:
    kubectl get nodes

    सफलतापूर्वक बनाए गए क्लस्टर के लिए पिछले आदेश से आउटपुट निम्न कोड जैसा दिखता है:

    root@cdf4ecbebf62:/eks# kubectl get nodes
    NAME                                           STATUS   ROLES    AGE   VERSION
    ip-192-168-0-166.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-13-28.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-45-240.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-63-84.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-75-56.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-85-226.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326

सेजमेकर प्रशिक्षण कार्य के लिए एक ईएफएस वॉल्यूम बनाएं

इस उपयोग के मामले में, आप अमेज़ॅन ईएफएस में पहले से संग्रहीत डेटा से गहन शिक्षण मॉडल को प्रशिक्षित करके सेजमेकर प्रशिक्षण कार्य को गति देते हैं। इस विकल्प में अमेज़ॅन ईएफएस में डेटा से सीधे आपके प्रशिक्षण कार्य को लॉन्च करने का लाभ होता है, जिसमें कोई डेटा आंदोलन की आवश्यकता नहीं होती है, जिसके परिणामस्वरूप तेज़ प्रशिक्षण प्रारंभ होता है।

हम एक ईएफएस वॉल्यूम बनाते हैं और ईएफएस कंटेनर स्टोरेज इंटरफेस (सीएसआई) ड्राइवर को तैनात करते हैं। यह में स्थित एक परिनियोजन स्क्रिप्ट द्वारा पूरा किया जाता है /eks/deployment/csi/efs के अंदर aws-do-eks कंटेनर।

यह स्क्रिप्ट मानती है कि आपके खाते में एक EKS क्लस्टर है। समूह CLUSTER_NAME= यदि आपके पास एक से अधिक ईकेएस क्लस्टर हैं।

cd /eks/deployment/csi/efs
./deploy.sh

यह स्क्रिप्ट एक EFS वॉल्यूम का प्रावधान करती है और क्लस्टर VPC के सबनेट के लिए माउंट लक्ष्य बनाती है। यह तब EFS CSI ड्राइवर को तैनात करता है और बनाता है efs-sc भंडारण वर्ग और efs-pv ईकेएस क्लस्टर में लगातार वॉल्यूम।

स्क्रिप्ट के सफल समापन पर, आपको निम्न जैसा आउटपुट देखना चाहिए:

Generating efs-sc.yaml ...

Applying efs-sc.yaml ...
storageclass.storage.k8s.io/efs-sc created
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
efs-sc          efs.csi.aws.com         Delete          Immediate              false                  1s
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  36m

Generating efs-pv.yaml ...
Applying efs-pv.yaml ...
persistentvolume/efs-pv created
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
efs-pv   5Gi        RWX            Retain           Available           efs-sc                  10s

Done ...

Amazon S3 VPC एंडपॉइंट बनाएं

आप एक निजी VPC का उपयोग करते हैं जिस तक आपके SageMaker प्रशिक्षण कार्य और EFS फ़ाइल सिस्टम की पहुँच होती है। SageMaker प्रशिक्षण क्लस्टर को अपने निजी VPC से S3 बकेट तक पहुँच प्रदान करने के लिए, आप एक VPC समापन बिंदु बनाते हैं:

cd /eks/vpc 
export CLUSTER_NAME= 
export REGION= 
./vpc-endpoint-create.sh

अब आप बाहर निकल सकते हैं aws-do-eks कंटेनर शेल और अगले भाग पर आगे बढ़ें:

exit

root@cdf4ecbebf62:/eks/deployment/csi/efs# exit
exit
TeamRole:~/environment/aws-do-eks (main) $

1.2 Amazon EKS पर AWS पर Kubeflow परिनियोजित करें

Amazon EKS पर Kubeflow परिनियोजित करने के लिए, हम इसका उपयोग करते हैं aws-do-kubeflow प्रोजेक्ट.

  1. निम्नलिखित कमांड का उपयोग करके रिपॉजिटरी को क्लोन करें:
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-kubeflow
    cd aws-do-kubeflow

  2. फिर प्रोजेक्ट को कॉन्फ़िगर करें:
    ./config.sh

    यह स्क्रिप्ट प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल को टेक्स्ट एडिटर में खोलती है। इसके लिए महत्वपूर्ण है एडब्ल्यूएस_REGION उस क्षेत्र में सेट होने के लिए जिसमें आपका क्लस्टर है, साथ ही AWS_CLUSTER_NAME आपके द्वारा पहले बनाए गए क्लस्टर के नाम से मिलान करने के लिए। डिफ़ॉल्ट रूप से, आपका कॉन्फ़िगरेशन पहले से ही ठीक से सेट है, इसलिए यदि आपको कोई परिवर्तन करने की आवश्यकता नहीं है, तो बस संपादक को बंद कर दें।

    ./build.sh
    ./run.sh
    ./exec.sh

    RSI build.sh स्क्रिप्ट एक डॉकर कंटेनर छवि बनाती है जिसमें मौजूदा कुबेरनेट क्लस्टर पर क्यूबफ़्लो को तैनात और प्रबंधित करने के लिए आवश्यक सभी उपकरण होते हैं। run.sh स्क्रिप्ट डॉकर छवि का उपयोग करके एक कंटेनर शुरू करती है, और exec.sh स्क्रिप्ट कंटेनर में एक कमांड शेल खोलती है, जिसे हम अपने क्यूबफ्लो प्रबंधन वातावरण के रूप में उपयोग कर सकते हैं। आप का उपयोग कर सकते हैं ./status.sh स्क्रिप्ट देखने के लिए कि क्या aws-do-kubeflow कंटेनर ऊपर और चल रहा है और ./stop.sh और ./run.sh आवश्यकतानुसार इसे पुनः आरंभ करने के लिए स्क्रिप्ट।

  3. आपके द्वारा खोली गई खोल के बाद aws-do-eks कंटेनर, आप सत्यापित कर सकते हैं कि कॉन्फ़िगर किया गया क्लस्टर संदर्भ अपेक्षित है:
    root@ip-172-31-43-155:/kubeflow# kubectx
    kubeflow@eks-kubeflow.us-west-2.eksctl.io

  4. EKS क्लस्टर पर Kubeflow परिनियोजित करने के लिए, चलाएँ deploy.sh स्क्रिप्ट:
    ./kubeflow-deploy.sh

    जब क्यूबफ़्लो नेमस्पेस में सभी पॉड्स रनिंग स्थिति में प्रवेश करते हैं, तो परिनियोजन सफल होता है। एक विशिष्ट आउटपुट निम्न कोड की तरह दिखता है:

    Waiting for all Kubeflow pods to start Running ...
    
    Waiting for all Kubeflow pods to start Running ...
    
    Restarting central dashboard ...
    pod "centraldashboard-79f489b55-vr6lp" deleted
    /kubeflow/deploy/distro/aws/kubeflow-manifests /kubeflow/deploy/distro/aws
    /kubeflow/deploy/distro/aws
    
    Kubeflow deployment succeeded
    Granting cluster access to kubeflow profile user ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    clusterrolebinding.rbac.authorization.k8s.io/kubeflow-user-example-com-cluster-admin-binding created
    Setting up access to Kubeflow Pipelines ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    
    Creating pod-default for namespace kubeflow-user-example-com ...
    poddefault.kubeflow.org/access-ml-pipeline created

  5. KubeFlow पॉड्स की स्थिति की निगरानी के लिए, एक अलग विंडो में, आप निम्न कमांड का उपयोग कर सकते हैं:
    watch kubectl -n kubeflow get pods

  6. दबाएँ Ctrl + सी जब सभी पॉड चल रहे हों, तो निम्न कमांड चलाकर क्यूबफ़्लो डैशबोर्ड को क्लस्टर के बाहर प्रदर्शित करें:
    ./kubeflow-expose.sh

आपको आउटपुट देखना चाहिए जो निम्न कोड की तरह दिखता है:

root@ip-172-31-43-155:/kubeflow# ./kubeflow-expose.sh
root@ip-172-31-43-155:/kubeflow# Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

यह कमांड आपके क्लस्टर से आपके स्थानीय पोर्ट 8080 तक इस्तियो इनग्रेड गेटवे सेवा को पोर्ट-फॉरवर्ड करता है। क्यूबफ्लो डैशबोर्ड तक पहुंचने के लिए, यहां जाएं http://localhost:8080 और डिफ़ॉल्ट उपयोगकर्ता क्रेडेंशियल का उपयोग करके लॉग इन करें (user@example.com/12341234)। यदि आप चला रहे हैं aws-do-kubeflow AWS Cloud9 में कंटेनर, तो आप चुन सकते हैं पूर्वावलोकन, उसके बाद चुनो चल रहे एप्लिकेशन का पूर्वावलोकन करें. यदि आप डॉकर डेस्कटॉप पर चल रहे हैं, तो आपको चलाने की आवश्यकता हो सकती है ./kubeflow-expose.sh के बाहर की स्क्रिप्ट aws-do-kubeflow कंटेनर।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

2. एडब्ल्यूएस पर्यावरण पर क्यूबफ्लो सेट करें

AWS परिवेश पर अपना Kubeflow सेट करने के लिए, हम एक EFS वॉल्यूम और एक Jupyter नोटबुक बनाते हैं।

2.1 ईएफएस वॉल्यूम बनाएं

EFS वॉल्यूम बनाने के लिए, निम्न चरणों को पूरा करें:

  • Kubeflow डैशबोर्ड पर, चुनें वॉल्यूम नेविगेशन फलक में
  • चुना नई मात्रा.
  • के लिए नाम, दर्ज efs-sc-claim.
  • के लिए आयतन का आकार, दर्ज 10.
  • के लिए भंडारण वर्ग, चुनें ईएफएस-एससीई.
  • के लिए एक्सेस मोड, चुनें एक बार पढ़ें.
  • चुनें बनाएं.

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

2.2 ज्यूपिटर नोटबुक बनाएं

एक नई नोटबुक बनाने के लिए, निम्नलिखित चरणों को पूरा करें:

  • Kubeflow डैशबोर्ड पर, चुनें नोटबुक नेविगेशन फलक में
  • चुनें नई नोटबुक.
  • के लिए नाम, दर्ज aws-hybrid-nb.
  • के लिए जुपिटर डॉकेट छवि, छवि चुनें c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1 (नवीनतम उपलब्ध jupyter-pytorch DLC छवि)।
  • के लिए सी पी यू, दर्ज 1.
  • के लिए याद, दर्ज 5.
  • के लिए GPUs, के रूप में छोड़ दो कोई नहीं.
  • में कोई बदलाव न करें कार्यक्षेत्र मात्रा अनुभाग।
  • में डेटा वॉल्यूम अनुभाग चुनते हैं, मौजूदा वॉल्यूम संलग्न करें और मौजूदा वॉल्यूम अनुभाग का विस्तार करें
  • के लिए नाम, चुनें efs-sc-claim.
  • के लिए माउंट पथ, दर्ज /home/jovyan/efs-sc-claim.
    यह EFS वॉल्यूम को आपके Jupyter नोटबुक पॉड में माउंट करता है, और आप फ़ोल्डर देख सकते हैं efs-sc-claim आपके जुपिटर लैब इंटरफ़ेस में। आप इस फ़ोल्डर में प्रशिक्षण डेटासेट और प्रशिक्षण कोड सहेजते हैं ताकि प्रशिक्षण क्लस्टर परीक्षण के लिए कंटेनर छवियों के पुनर्निर्माण की आवश्यकता के बिना इसे एक्सेस कर सकें।एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.
  • चुनते हैं Kubeflow पाइपलाइनों तक पहुँच की अनुमति दें कॉन्फ़िगरेशन अनुभाग में।
  • चुनें लांच.
    सत्यापित करें कि आपकी नोटबुक सफलतापूर्वक बनाई गई है (इसमें कुछ मिनट लग सकते हैं)।एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.
  • पर नोटबुक पृष्ठ, चुनें जुडिये JupyterLab वातावरण में लॉग इन करने के लिए।
  • पर जाना मेनू, चुनें एक रिपॉजिटरी क्लोन करें.
  • के लिए एक रेपो क्लोन करें, दर्ज https://github.com/aws-samples/aws-do-kubeflow.
    एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

3. वितरित प्रशिक्षण चलाएं

जुपिटर नोटबुक सेट करने के बाद, आप फ़ोल्डर से निम्न उच्च-स्तरीय चरणों का उपयोग करके संपूर्ण डेमो चला सकते हैं aws-do-kubeflow/workshop क्लोन रिपॉजिटरी में:

  • PyTorch वितरित डेटा समानांतर (DDP) प्रशिक्षण स्क्रिप्ट: PyTorch DDP प्रशिक्षण स्क्रिप्ट cifar10-distributed-gpu-final.py का संदर्भ लें, जिसमें एक बहु-नोड CPU और GPU क्लस्टर पर प्रशिक्षण वितरित करने के लिए एक नमूना दृढ़ तंत्रिका नेटवर्क और तर्क शामिल है। (विवरण के लिए 3.1 देखें)
  • पुस्तकालय स्थापित करें: नोटबुक चलाएं 0_initialize_dependencies.ipynb सभी निर्भरताओं को प्रारंभ करने के लिए। (विवरण के लिए 3.2 देखें)
  • कुबेरनेट्स पर वितरित PyTorch नौकरी प्रशिक्षण चलाएँ: नोटबुक चलाएं 1_submit_pytorchdist_k8s.ipynb पायथन कोड का उपयोग करके कुबेरनेट्स कस्टम संसाधन PyTorchJob YAML फ़ाइल का उपयोग करके एक प्राथमिक और दो कार्यकर्ता कंटेनरों पर वितरित प्रशिक्षण बनाने और जमा करने के लिए। (विवरण के लिए 3.3 देखें)
  • हाइब्रिड क्यूबफ़्लो पाइपलाइन बनाएँ: नोटबुक चलाएं 2_create_pipeline_k8s_sagemaker.ipynb हाइब्रिड क्यूबफ़्लो पाइपलाइन बनाने के लिए जो रनटाइम वैरिएबल का उपयोग करके सेजमेकर या अमेज़ॅन ईकेएस पर वितरित प्रशिक्षण चलाता है training_runtime. (विवरण के लिए 3.4 देखें)

सुनिश्चित करें कि आपने नोटबुक चलाई है 1_submit_pytorchdist_k8s.ipynb नोटबुक शुरू करने से पहले 2_create_pipeline_k8s_sagemaker.ipynb.

बाद के खंडों में, हम इनमें से प्रत्येक चरण पर विस्तार से चर्चा करेंगे।

3.1 PyTorch वितरित डेटा समानांतर (DDP) प्रशिक्षण स्क्रिप्ट

वितरित प्रशिक्षण के हिस्से के रूप में, हम एक साधारण दृढ़ तंत्रिका नेटवर्क द्वारा बनाए गए वर्गीकरण मॉडल को प्रशिक्षित करते हैं जो CIFAR10 डेटासेट पर संचालित होता है। प्रशिक्षण स्क्रिप्ट cifar10-distributed-gpu-final.py इसमें केवल ओपन-सोर्स लाइब्रेरी है और यह GPU डिवाइस या CPU इंस्टेंस पर Kubernetes और SageMaker प्रशिक्षण क्लस्टर दोनों पर चलने के लिए अनुकूल है। हमारे नोटबुक उदाहरण चलाने से पहले आइए प्रशिक्षण स्क्रिप्ट के कुछ महत्वपूर्ण पहलुओं को देखें।

हम उपयोग torch.distributed मॉड्यूल, जिसमें क्लस्टर में नोड्स में बहु-प्रक्रिया समांतरता के लिए PyTorch समर्थन और संचार आदिम शामिल हैं:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

हम दृढ़, अधिकतम पूलिंग और रैखिक परतों के संयोजन का उपयोग करके एक साधारण छवि वर्गीकरण मॉडल बनाते हैं, जिसमें मॉडल प्रशिक्षण के आगे के पास में एक रिले सक्रियण फ़ंक्शन लागू होता है:

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

हम डेटा लोडर मशाल का उपयोग करते हैं जो डेटासेट को जोड़ती है और DistributedSampler (डेटा का एक सबसेट का उपयोग करके वितरित तरीके से लोड करता है torch.nn.parallel.DistributedDataParallel) और डेटा पर एकल-प्रक्रिया या बहु-प्रक्रिया पुनरावर्तक प्रदान करता है:

# Define data loader for training dataset
def _get_train_data_loader(batch_size, training_dir, is_distributed):
logger.info("Get train data loader")

train_set = torchvision.datasets.CIFAR10(root=training_dir,
train=True,
download=False,
transform=_get_transforms())

train_sampler = (
torch.utils.data.distributed.DistributedSampler(train_set) if is_distributed else None
)

return torch.utils.data.DataLoader(
train_set,
batch_size=batch_size,
shuffle=train_sampler is None,
sampler=train_sampler)
...

यदि प्रशिक्षण क्लस्टर में GPU है, तो स्क्रिप्ट CUDA उपकरणों पर प्रशिक्षण चलाती है और डिवाइस चर डिफ़ॉल्ट CUDA डिवाइस रखता है:

device = "cuda" if torch.cuda.is_available() else "cpu"
...

PyTorch का उपयोग करके वितरित प्रशिक्षण चलाने से पहले DistributedDataParallel कई नोड्स पर वितरित प्रसंस्करण को चलाने के लिए, आपको कॉल करके वितरित वातावरण को प्रारंभ करना होगा init_process_group. यह प्रशिक्षण क्लस्टर की प्रत्येक मशीन पर आरंभ किया जाता है।

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

हम क्लासिफायर मॉडल को इंस्टेंट करते हैं और मॉडल को टारगेट डिवाइस पर कॉपी करते हैं। यदि वितरित प्रशिक्षण कई नोड्स पर चलने के लिए सक्षम है, तो DistributedDataParallel क्लास का उपयोग मॉडल ऑब्जेक्ट के चारों ओर एक रैपर ऑब्जेक्ट के रूप में किया जाता है, जो कई मशीनों में सिंक्रोनस वितरित प्रशिक्षण की अनुमति देता है। इनपुट डेटा को बैच आयाम पर विभाजित किया जाता है और प्रत्येक मशीन और प्रत्येक डिवाइस पर मॉडल की एक प्रतिकृति रखी जाती है।

model = Net().to(device)

if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model)

...

3.2 पुस्तकालय स्थापित करें

आप PyTorch वितरित प्रशिक्षण उदाहरण को चलाने के लिए सभी आवश्यक पुस्तकालय स्थापित करेंगे। इसमें क्यूबफ्लो पाइपलाइन एसडीके, ट्रेनिंग ऑपरेटर पायथन एसडीके, कुबेरनेट्स के लिए पायथन क्लाइंट और अमेज़ॅन सेजमेकर पायथन एसडीके शामिल हैं।

#Please run the below commands to install necessary libraries

!pip install kfp==1.8.4

!pip install kubeflow-training

!pip install kubernetes

!pip install sagemaker

3.3 कुबेरनेट्स पर वितरित PyTorch नौकरी प्रशिक्षण चलाएं

नोटबुक 1_submit_pytorchdist_k8s.ipynb Kubeflow प्रशिक्षण और Kubernetes क्लाइंट Python SDK का उपयोग करके Kubernetes कस्टम संसाधन PyTorchJob YAML फ़ाइल बनाता है। इस नोटबुक के कुछ महत्वपूर्ण अंश निम्नलिखित हैं।

हम प्राथमिक और कार्यकर्ता कंटेनरों के साथ PyTorchJob YAML बनाते हैं जैसा कि निम्नलिखित कोड में दिखाया गया है:

# Define PyTorchJob custom resource manifest
pytorchjob = V1PyTorchJob(
api_version="kubeflow.org/v1",
kind="PyTorchJob",
metadata=V1ObjectMeta(name=pytorch_distributed_jobname,namespace=user_namespace),
spec=V1PyTorchJobSpec(
run_policy=V1RunPolicy(clean_pod_policy="None"),
pytorch_replica_specs={"Master": master,
"Worker": worker}
)
)

इसे कुबेरनेट्स कंट्रोल प्लेन को सबमिट किया जाता है PyTorchJobClient:

# Creates and Submits PyTorchJob custom resource file to Kubernetes
pytorchjob_client = PyTorchJobClient()

pytorch_job_manifest=pytorchjob_client.create(pytorchjob):

कुबेरनेट्स प्रशिक्षण लॉग देखें

आप प्रशिक्षण लॉग को या तो उसी ज्यूपिटर नोटबुक से पायथन कोड का उपयोग करके या कुबेरनेट्स क्लाइंट शेल से देख सकते हैं।

3.4 हाइब्रिड क्यूबफ्लो पाइपलाइन बनाएं

नोटबुक 2_create_pipeline_k8s_sagemaker.ipynb सशर्त रनटाइम चर के आधार पर एक हाइब्रिड क्यूबफ़्लो पाइपलाइन बनाता है training_runtime, जैसा कि निम्नलिखित कोड में दिखाया गया है। नोटबुक का उपयोग करता है Kubeflow पाइपलाइनों SDK और यह ML वर्कफ़्लो पाइपलाइनों को निर्दिष्ट करने और चलाने के लिए पायथन पैकेज का एक सेट प्रदान करता है। इस एसडीके के हिस्से के रूप में, हम निम्नलिखित पैकेजों का उपयोग करते हैं:

  • डोमेन-विशिष्ट भाषा (डीएसएल) पैकेज डेकोरेटर dsl.pipeline, जो एक पाइपलाइन को वापस करने के लिए पायथन कार्यों को सजाता है
  • RSI dsl.Condition पैकेज, जो संचालन के एक समूह का प्रतिनिधित्व करता है जो केवल एक निश्चित शर्त पूरी होने पर ही चलाया जाता है, जैसे कि जाँच करना training_runtime मान के रूप में sagemaker or kubernetes

निम्नलिखित कोड देखें:

# Define your training runtime value with either 'sagemaker' or 'kubernetes'
training_runtime='sagemaker'

# Create Hybrid Pipeline using Kubeflow PyTorch Training Operators and Amazon SageMaker Service
@dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
def pytorch_cnn_pipeline():

# Pipeline Step 1: to evaluate the condition. You can enter any logic here. For demonstration we are checking if GPU is needed for training
condition_result = check_condition_op(training_runtime)

# Pipeline Step 2: to run training on Kuberentes using PyTorch Training Operators. This will be executed if gpus are not needed
with dsl.Condition(condition_result.output == 'kubernetes', name="PyTorch_Comp"):
train_task = pytorch_job_op(
name=training_job_name,
namespace=user_namespace,
master_spec=json.dumps(master_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_master_spec.yml
worker_spec=json.dumps(worker_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_worker_spec.yml
delete_after_done=False
).after(condition_result)

# Pipeline Step 3: to run training on SageMaker using SageMaker Components for Pipeline. This will be executed if gpus are needed
with dsl.Condition(condition_result.output == 'sagemaker', name="SageMaker_Comp"):
training = sagemaker_train_op(
region=region,
image=train_image,
job_name=training_job_name,
training_input_mode=training_input_mode,
hyperparameters='{ 
"backend": "'+str(pytorch_backend)+'", 
"batch-size": "64", 
"epochs": "3", 
"lr": "'+str(learning_rate)+'", 
"model-type": "custom", 
"sagemaker_container_log_level": "20", 
"sagemaker_program": "cifar10-distributed-gpu-final.py", 
"sagemaker_region": "us-west-2", 
"sagemaker_submit_directory": "'+source_s3+'" 
}',
channels=channels,
instance_type=instance_type,
instance_count=instance_count,
volume_size=volume_size,
max_run_time=max_run_time,
model_artifact_path=f's3://{bucket_name}/jobs',
network_isolation=network_isolation,
traffic_encryption=traffic_encryption,
role=role,
vpc_subnets=subnet_id,
vpc_security_group_ids=security_group_id
).after(condition_result)

हम दो ml.p3.2xबड़े उदाहरणों का उपयोग करके SageMaker वितरित प्रशिक्षण को कॉन्फ़िगर करते हैं।

पाइपलाइन परिभाषित होने के बाद, आप Kubeflow पाइपलाइन SDK's का उपयोग करके पाइपलाइन को Argo YAML विनिर्देश में संकलित कर सकते हैं kfp.compiler पैकेट। आप Kubeflow Pipeline SDK क्लाइंट का उपयोग करके इस पाइपलाइन को चला सकते हैं, जो पाइपलाइन सेवा समापन बिंदु को कॉल करता है और नोटबुक से उपयुक्त प्रमाणीकरण शीर्षलेखों में गुजरता है। निम्नलिखित कोड देखें:

# DSL Compiler that compiles pipeline functions into workflow yaml.
kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml")

# Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
client = kfp.Client()

experiment = client.create_experiment(name="kubeflow")

# Run a specified pipeline
my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml")

# Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

अगर आपको ए sagemaker import त्रुटि, !पाइप इंस्टाल सेजमेकर चलाएँ और कर्नेल को पुनः आरंभ करें (पर) गुठली मेनू, चुनें कर्नेल को पुनरारंभ करें).

चुनना विवरण चलाएँ Kubeflow पाइपलाइन को देखने के लिए अंतिम सेल के नीचे लिंक करें।

पाइपलाइन निर्माण चरण को इसके साथ दोहराएं training_runtime='kubernetes' कुबेरनेट्स वातावरण पर चलने वाली पाइपलाइन का परीक्षण करने के लिए। training_runtime चर को उत्पादन परिदृश्य में आपके सीआई/सीडी पाइपलाइन में भी पारित किया जा सकता है।

सेजमेकर घटक के लिए क्यूबफ्लो पाइपलाइन रन लॉग देखें

निम्न स्क्रीनशॉट सेजमेकर घटक के लिए हमारे पाइपलाइन विवरण दिखाता है।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

प्रशिक्षण कार्य चरण चुनें और Logs टैब में, SageMaker लॉग्स तक पहुँचने के लिए CloudWatch लॉग्स लिंक चुनें।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

निम्न स्क्रीनशॉट दो ml.p3.2xबड़े उदाहरणों में से प्रत्येक के लिए CloudWatch लॉग दिखाता है।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

लॉग देखने के लिए कोई भी समूह चुनें।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

Kubeflow PyTorchJob Launcher घटक के लिए Kubeflow पाइपलाइन रन लॉग देखें

निम्न स्क्रीनशॉट हमारे Kubeflow घटक के लिए पाइपलाइन विवरण दिखाता है।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.

निम्न कमांड का उपयोग करके चलाएँ Kubectl लॉग देखने के लिए कुबेरनेट्स क्लस्टर से जुड़े आपके कुबेरनेट्स क्लाइंट शेल पर (अपना नामस्थान और पॉड नाम बदलें):

kubectl get pods -n kubeflow-user-example-com
kubectl logs  -n kubeflow-user-example-com -f

4.1 सफाई

हमारे द्वारा खाते में बनाए गए सभी संसाधनों को साफ करने के लिए, हमें उन्हें उल्टे क्रम में निकालना होगा।

  1. क्यूबफ्लो इंस्टॉलेशन को चलाकर डिलीट करें ./kubeflow-remove.sh में aws-do-kubeflow कंटेनर। कमांड का पहला सेट वैकल्पिक है और यदि आपके पास पहले से कमांड शेल नहीं है तो इसका उपयोग किया जा सकता है aws-do-kubeflow कंटेनर खुला।
    cd aws-do-kubeflow
    ./status.sh
    ./start.sh
    ./exec.sh
    
    ./kubeflow-remove.sh

  2. से aws-do-eks कंटेनर फ़ोल्डर में, EFS वॉल्यूम निकालें। कमांड का पहला सेट वैकल्पिक है और यदि आपके पास पहले से कमांड शेल नहीं है तो इसका उपयोग किया जा सकता है aws-do-eks कंटेनर खुला।
    cd aws-do-eks
    ./status.sh
    ./start.sh
    ./exec.sh
    
    cd /eks/deployment/csi/efs
    ./delete.sh
    ./efs-delete.sh

    हमारे क्लस्टर के लिए हमारे द्वारा बनाए गए VPC से जुड़े नेटवर्क इंटरफ़ेस को रिलीज़ करने के लिए Amazon EFS को हटाना आवश्यक है। ध्यान दें कि EFS वॉल्यूम को हटाने से उस पर संग्रहीत कोई भी डेटा नष्ट हो जाता है।

  3. से aws-do-eks कंटेनर, चलाएँ eks-delete.sh VPC सहित क्लस्टर और इससे जुड़े किसी भी अन्य संसाधन को हटाने के लिए स्क्रिप्ट:
    cd /eks
    ./eks-delete.sh

सारांश

इस पोस्ट में, हमने वितरित मॉडल प्रशिक्षण और एमएल वर्कफ़्लो की कुछ विशिष्ट चुनौतियों पर चर्चा की। हमने एडब्ल्यूएस वितरण पर क्यूबफ्लो का अवलोकन प्रदान किया और दो ओपन-सोर्स प्रोजेक्ट साझा किए (एडब्ल्यूएस-डू-ईएक्स और aws-do-kubeflow) जो बुनियादी ढांचे के प्रावधान और उस पर क्यूबफ्लो की तैनाती को आसान बनाता है। अंत में, हमने एक हाइब्रिड आर्किटेक्चर का वर्णन और प्रदर्शन किया जो स्व-प्रबंधित कुबेरनेट्स और पूरी तरह से प्रबंधित सेजमेकर इन्फ्रास्ट्रक्चर पर चलने के बीच वर्कलोड को निर्बाध रूप से संक्रमण में सक्षम बनाता है। हम आपको अपने स्वयं के उपयोग के मामलों के लिए इस हाइब्रिड आर्किटेक्चर का उपयोग करने के लिए प्रोत्साहित करते हैं।

आप इस का पालन कर सकते हैं एडब्ल्यूएस लैब्स रिपॉजिटरी Kubeflow में सभी AWS योगदानों को ट्रैक करने के लिए। आप हमें पर भी ढूंढ सकते हैं Kubeflow #AWS स्लैक चैनल; आपकी प्रतिक्रिया हमें Kubeflow परियोजना में योगदान करने के लिए अगली सुविधाओं को प्राथमिकता देने में मदद करेगी।

श्री अरसनगट्टा (सॉफ्टवेयर डेवलपमेंट मैनेजर AWS ML) और सूरज कोटा (सॉफ्टवेयर देव इंजीनियर) को इस पोस्ट के लॉन्च में उनके समर्थन के लिए विशेष धन्यवाद।


लेखक के बारे में

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.कंवलजीत खुर्मी Amazon वेब सर्विसेज में AI/ML स्पेशलिस्ट सॉल्यूशंस आर्किटेक्ट हैं। वह AWS उत्पाद, इंजीनियरिंग और ग्राहकों के साथ मार्गदर्शन और तकनीकी सहायता प्रदान करने के लिए काम करते हैं, जिससे उन्हें AWS का उपयोग करते समय उनके हाइब्रिड ML समाधानों के मूल्य में सुधार करने में मदद मिलती है। कंवलजीत कंटेनरीकृत और मशीन लर्निंग एप्लिकेशन के साथ ग्राहकों की मदद करने में माहिर हैं।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.गौतम कुमार एडब्ल्यूएस एआई डीप लर्निंग के साथ एक सॉफ्टवेयर इंजीनियर हैं। उन्होंने एडब्ल्यूएस डीप लर्निंग कंटेनर और एडब्ल्यूएस डीप लर्निंग एएमआई विकसित किया है। उन्हें AI के लिए टूल और सिस्टम बनाने का शौक है। अपने खाली समय में, वह बाइकिंग और किताबें पढ़ने का आनंद लेते हैं।

एडब्ल्यूएस और अमेज़ॅन सेजमेकर प्लेटोब्लॉकचैन डेटा इंटेलिजेंस पर क्यूबफ्लो का उपयोग करके लचीला और स्केलेबल वितरित प्रशिक्षण आर्किटेक्चर बनाएं। लंबवत खोज। ऐ.एलेक्स इयानकोल्स्की एक पूर्ण-स्टैक सॉफ़्टवेयर और बुनियादी ढांचा वास्तुकार है जो गहन, व्यावहारिक कार्य करना पसंद करता है। वह वर्तमान में AWS में स्व-प्रबंधित मशीन लर्निंग के लिए एक प्रमुख समाधान वास्तुकार हैं। अपनी भूमिका में वह कंटेनर-संचालित AWS सेवाओं पर ML और AI वर्कलोड के कंटेनरीकरण और ऑर्केस्ट्रेशन के साथ ग्राहकों की मदद करने पर ध्यान केंद्रित करता है। वह ओपन सोर्स के लेखक भी हैं ढांचा करो और एक डॉकर कप्तान जो दुनिया की सबसे बड़ी चुनौतियों को हल करते हुए नवाचार की गति को तेज करने के लिए कंटेनर प्रौद्योगिकियों को लागू करना पसंद करता है। पिछले 10 वर्षों के दौरान, एलेक्स ने जलवायु परिवर्तन का मुकाबला करने, एआई और एमएल का लोकतंत्रीकरण करने, यात्रा को सुरक्षित बनाने, स्वास्थ्य सेवा को बेहतर बनाने और ऊर्जा को बेहतर बनाने पर काम किया है।

समय टिकट:

से अधिक AWS मशीन लर्निंग

भाषा संबंधी बाधाओं को दूर करना: निर्बाध समर्थन के लिए अमेज़ॅन ट्रांसलेट के साथ एप्लिकेशन लॉग का अनुवाद करें | अमेज़न वेब सेवाएँ

स्रोत नोड: 1888722
समय टिकट: सितम्बर 12, 2023