अमेज़ॅन ईकेएस और मशाल वितरित लोचदार प्लेटोब्लॉकचैन डेटा इंटेलिजेंस के साथ वितरित प्रशिक्षण। लंबवत खोज। ऐ.

अमेज़ॅन ईकेएस और मशाल वितरित लोचदार के साथ वितरित प्रशिक्षण

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

डेवलपर्स सहज ज्ञान युक्त मॉडल आर्किटेक्चर को आसानी से डिजाइन करने के लिए PyTorch जैसे ओपन-सोर्स फ्रेमवर्क का उपयोग कर सकते हैं। हालांकि, ऑर्केस्ट्रेशन की बढ़ती जटिलता के कारण इन मॉडलों के प्रशिक्षण को कई नोड्स में बढ़ाना चुनौतीपूर्ण हो सकता है।

वितरित मॉडल प्रशिक्षण में मुख्य रूप से दो प्रतिमान होते हैं:

  • मॉडल समानांतर - मॉडल समानांतर प्रशिक्षण में, मॉडल स्वयं इतना बड़ा होता है कि यह एकल GPU की मेमोरी में फिट नहीं हो सकता है, और मॉडल को प्रशिक्षित करने के लिए कई GPU की आवश्यकता होती है। ओपन एआई का जीपीटी-3 मॉडल 175 अरब प्रशिक्षित मानकों (लगभग 350 जीबी आकार) के साथ इसका एक अच्छा उदाहरण है।
  • डेटा समानांतर - डेटा समानांतर प्रशिक्षण में, मॉडल एकल GPU में रह सकता है, लेकिन चूंकि डेटा इतना बड़ा है, इसलिए मॉडल को प्रशिक्षित करने में दिन या सप्ताह लग सकते हैं। कई GPU नोड्स में डेटा वितरित करने से प्रशिक्षण का समय काफी कम हो सकता है।

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

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

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

ईकेएस क्लस्टर

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

हमने एक ओपन-सोर्स प्रोजेक्ट जारी किया है, EKS के लिए AWS DevOps (aws-do-eks), जो उपयोग में आसान और विन्यास योग्य लिपियों और उपकरणों का एक बड़ा संग्रह प्रदान करता है जो ईकेएस समूहों को व्यवस्थित करने और वितरित प्रशिक्षण कार्य चलाने के लिए है। यह परियोजना के सिद्धांतों का पालन करते हुए बनाई गई है ढांचा करो: सादगी, लचीलापन और सार्वभौमिकता। आप अपने इच्छित क्लस्टर का उपयोग करके कॉन्फ़िगर कर सकते हैं eks.conf फ़ाइल और फिर इसे चलाकर लॉन्च करें eks-create.sh लिखी हुई कहानी। में विस्तृत निर्देश दिए गए हैं गीथहब रेपो.

टार्च वितरित इलास्टिक का उपयोग करके PyTorch मॉडल को प्रशिक्षित करें

मशाल वितरित लोचदार (TDE) बड़े पैमाने पर गहन शिक्षण मॉडल के प्रशिक्षण के लिए एक देशी PyTorch पुस्तकालय है जहां उपलब्धता के आधार पर गतिशील रूप से गणना संसाधनों को मापना महत्वपूर्ण है। कुबेरनेट्स के लिए मशाल लोचदार नियंत्रक TDE के लिए एक देशी Kubernetes कार्यान्वयन है जो TDE प्रशिक्षण के लिए आवश्यक पॉड्स और सेवाओं के जीवनचक्र को स्वचालित रूप से प्रबंधित करता है। यह आवश्यकतानुसार प्रशिक्षण के दौरान गणना संसाधनों को गतिशील रूप से स्केल करने की अनुमति देता है। यह नोड विफलता से नौकरियों को पुनर्प्राप्त करके दोष-सहिष्णु प्रशिक्षण भी प्रदान करता है।

इस पोस्ट में, हम PyTorch को प्रशिक्षित करने के चरणों पर चर्चा करते हैं कुशल नेट-बी7 और रेसनेट50 मॉडल का उपयोग IMAGEnet TDE के साथ एक वितरित फैशन में डेटा। हम PyTorch . का उपयोग करते हैं वितरित डेटा समानांतर API और Kubernetes TorchElastic कंट्रोलर, और कई GPU नोड्स वाले EKS क्लस्टर पर हमारे प्रशिक्षण कार्य चलाते हैं। निम्नलिखित आरेख इस मॉडल प्रशिक्षण के लिए वास्तुकला आरेख दिखाता है।

अमेज़ॅन ईकेएस और मशाल वितरित लोचदार प्लेटोब्लॉकचैन डेटा इंटेलिजेंस के साथ वितरित प्रशिक्षण। लंबवत खोज। ऐ.

Kubernetes के लिए TorchElastic में मुख्य रूप से दो घटक होते हैं: TorchElastic Kubernetes Controller (TEC) और पैरामीटर सर्वर (etcd)। नियंत्रक प्रशिक्षण कार्यों की निगरानी और प्रबंधन के लिए जिम्मेदार है, और पैरामीटर सर्वर वितरित सिंक्रनाइज़ेशन और सहकर्मी खोज के लिए कार्यकर्ता नोड्स का ट्रैक रखता है।

प्रशिक्षण पॉड्स को डेटा तक पहुंचने के लिए, हमें एक साझा डेटा वॉल्यूम की आवश्यकता होती है जिसे प्रत्येक पॉड द्वारा माउंट किया जा सकता है। के माध्यम से साझा वॉल्यूम के लिए कुछ विकल्प कंटेनर भंडारण इंटरफ़ेस (सीएसआई) ड्राइवर शामिल हैं EKS के लिए AWS DevOps रहे अमेज़ॅन इलास्टिक फ़ाइल सिस्टम (अमेज़ॅन ईएफएस) और चमक के लिए FSx.

क्लस्टर सेटअप

हमारे क्लस्टर कॉन्फ़िगरेशन में, हम सिस्टम पॉड्स के लिए एक c5.2xबड़े उदाहरण का उपयोग करते हैं। हम एक EfficientNet मॉडल को प्रशिक्षित करने के लिए वर्कर पॉड के रूप में तीन p4d.24xlarge इंस्टेंस का उपयोग करते हैं। ResNet50 प्रशिक्षण के लिए, हम वर्कर पॉड के रूप में p3.8xlarge इंस्टेंस का उपयोग करते हैं। इसके अतिरिक्त, हम अपने प्रशिक्षण डेटा और मॉडल कलाकृतियों को संग्रहीत करने के लिए एक FSx साझा फ़ाइल सिस्टम का उपयोग करते हैं।

एडब्ल्यूएस p4d.24xबड़े उदाहरण से लैस हैं लोचदार कपड़ा एडाप्टर (EFA) नोड्स के बीच नेटवर्किंग प्रदान करने के लिए। हम बाद में पोस्ट में ईएफए पर चर्चा करते हैं। EFA के माध्यम से संचार को सक्षम करने के लिए, हमें .yaml फ़ाइल के माध्यम से क्लस्टर सेटअप को कॉन्फ़िगर करने की आवश्यकता है। एक उदाहरण फ़ाइल GitHub रिपॉजिटरी में प्रदान किया गया है।

इसके बाद .yaml फ़ाइल ठीक से कॉन्फ़िगर हो गई है, हम GitHub रेपो में प्रदान की गई स्क्रिप्ट का उपयोग करके क्लस्टर लॉन्च कर सकते हैं:

./eks-create.sh

को देखें गीथहब रेपो विस्तृत निर्देशों के लिए।

व्यावहारिक रूप से p4d.24xlarge और p3.8xlarge पर जॉब चलाने में कोई अंतर नहीं है। इस पोस्ट में बताए गए स्टेप्स दोनों के लिए काम करते हैं। केवल अंतर p4d.24xlarge उदाहरणों पर EFA की उपलब्धता का है। ResNet50 जैसे छोटे मॉडलों के लिए, EFA नेटवर्किंग की तुलना में मानक नेटवर्किंग का प्रशिक्षण की गति पर न्यूनतम प्रभाव पड़ता है।

लस्टर फाइल सिस्टम के लिए FSx

FSx को उच्च-प्रदर्शन कंप्यूटिंग वर्कलोड के लिए डिज़ाइन किया गया है और सॉलिड-स्टेट ड्राइव स्टोरेज वॉल्यूम का उपयोग करके सब-मिलीसेकंड लेटेंसी प्रदान करता है। हमने FSx को चुना क्योंकि यह बेहतर प्रदर्शन प्रदान करता है क्योंकि हमने बड़ी संख्या में नोड्स को बढ़ाया है। ध्यान देने योग्य एक महत्वपूर्ण विवरण यह है कि FSx केवल एकल उपलब्धता क्षेत्र में मौजूद हो सकता है। इसलिए, FSx फ़ाइल सिस्टम तक पहुँचने वाले सभी नोड्स FSx फ़ाइल सिस्टम के समान उपलब्धता क्षेत्र में मौजूद होने चाहिए। इसे प्राप्त करने का एक तरीका क्लस्टर बनाने से पहले विशिष्ट नोड समूहों के लिए क्लस्टर .yaml फ़ाइल में प्रासंगिक उपलब्धता क्षेत्र निर्दिष्ट करना है। वैकल्पिक रूप से, हम क्लस्टर स्थापित होने के बाद इन नोड्स के लिए ऑटो स्केलिंग समूह के नेटवर्क भाग को संशोधित कर सकते हैं, और इसे एकल सबनेट का उपयोग करने तक सीमित कर सकते हैं। इसे Amazon EC2 कंसोल पर आसानी से किया जा सकता है।

यह मानते हुए कि ईकेएस क्लस्टर चल रहा है और उपलब्धता क्षेत्र के लिए सबनेट आईडी ज्ञात है, हम आवश्यक जानकारी प्रदान करके एक एफएसएक्स फाइल सिस्टम स्थापित कर सकते हैं। fsx.conf फ़ाइल के रूप में वर्णित है रीडमी और चल रहा है तैनाती.शो में स्क्रिप्ट FSX फ़ोल्डर। यह फ़ाइल सिस्टम तक पहुँचने के लिए सही नीति और सुरक्षा समूह स्थापित करता है। स्क्रिप्ट भी स्थापित करती है सीएसआई चालक FSx के लिए एक डेमोंसेट के रूप में। अंत में, हम एक .yaml फ़ाइल को लागू करके कुबेरनेट्स में FSx परसिस्टेंट वॉल्यूम क्लेम बना सकते हैं:

kubectl apply -f fsx-pvc-dynamic.yaml

यह उपलब्धता क्षेत्र में निर्दिष्ट FSx फ़ाइल सिस्टम बनाता है fsx.conf फ़ाइल, और लगातार वॉल्यूम का दावा भी बनाता है fsx-pvc, जिसे क्लस्टर में किसी भी पॉड द्वारा रीड-राइट-मैनी (RWX) फैशन में माउंट किया जा सकता है।

अपने प्रयोग में, हमने संपूर्ण इमेजनेट डेटा का उपयोग किया, जिसमें 12 कक्षाओं में विभाजित 1,000 मिलियन से अधिक प्रशिक्षण चित्र शामिल हैं। डेटा से डाउनलोड किया जा सकता है इमेजनेट वेबसाइट. मूल टीएआर बॉल में कई निर्देशिकाएं हैं, लेकिन हमारे मॉडल प्रशिक्षण के लिए, हम केवल इसमें रुचि रखते हैं ILSVRC/Data/CLS-LOC/, जिसमें शामिल हैं train और val उपनिर्देशिकाएँ। प्रशिक्षण से पहले, हमें छवियों को पुनर्व्यवस्थित करने की आवश्यकता है val PyTorch द्वारा आवश्यक निर्देशिका संरचना से मेल खाने के लिए उपनिर्देशिका छवि फ़ोल्डर कक्षा। यह एक सरल . का उपयोग करके किया जा सकता है पायथन लिपि अगले चरण में डेटा को लगातार वॉल्यूम में कॉपी करने के बाद।

किसी से डेटा कॉपी करने के लिए अमेज़न सरल भंडारण सेवा (अमेज़ॅन एस 3) एफएसएक्स फाइल सिस्टम के लिए बाल्टी, हम एक डॉकर छवि बनाते हैं जिसमें इस कार्य के लिए स्क्रिप्ट शामिल होती है। एक उदाहरण डॉकरफाइल और एक शेल स्क्रिप्ट को इसमें शामिल किया गया है सीएसआई GitHub रेपो के भीतर फ़ोल्डर। हम का उपयोग करके छवि का निर्माण कर सकते हैं build.sh स्क्रिप्ट और फिर इसे अमेज़ॅन ईसीआर का उपयोग करके धक्का दें push.sh लिखी हुई कहानी। इन लिपियों का उपयोग करने से पहले, हमें ईसीआर भंडार के लिए सही यूआरआई प्रदान करने की आवश्यकता है .env GitHub रेपो के रूट फोल्डर में फाइल करें। डॉकर छवि को अमेज़ॅन ईसीआर पर धकेलने के बाद, हम प्रासंगिक .yaml फ़ाइल को लागू करके डेटा की प्रतिलिपि बनाने के लिए एक पॉड लॉन्च कर सकते हैं:

kubectl apply -f fsx-data-prep-pod.yaml

पॉड स्वचालित रूप से स्क्रिप्ट चलाता है डेटा-prep.sh Amazon S3 से साझा किए गए वॉल्यूम में डेटा कॉपी करने के लिए। चूंकि इमेजनेट डेटा में 12 मिलियन से अधिक फाइलें हैं, इसलिए कॉपी प्रक्रिया में कुछ घंटे लगते हैं। पायथन लिपि imagenet_data_prep.py को पुनर्व्यवस्थित करने के लिए भी चलाया जाता है val PyTorch द्वारा अपेक्षित डेटासेट।

नेटवर्क त्वरण

हम इलास्टिक फैब्रिक एडॉप्टर (EFA) के साथ संयोजन में उपयोग कर सकते हैं समर्थित EC2 उदाहरण प्रकार अपने क्लस्टर में GPU नोड्स के बीच नेटवर्क ट्रैफ़िक को तेज़ करने के लिए। बड़े वितरित प्रशिक्षण कार्य चलाते समय यह उपयोगी हो सकता है जहां मानक नेटवर्क संचार एक अड़चन हो सकता है। ईकेएस क्लस्टर में ईएफए डिवाइस प्लगइन को तैनात करने और परीक्षण करने के लिए लिपियों का उपयोग हम यहां करते हैं ईएफए-डिवाइस-प्लगइन GitHub रेपो में फ़ोल्डर। अपने ईकेएस क्लस्टर में ईएफए के साथ नौकरी को सक्षम करने के लिए, आवश्यक हार्डवेयर और सॉफ्टवेयर वाले क्लस्टर नोड्स के अलावा, ईएफए डिवाइस प्लगइन को क्लस्टर में तैनात करने की आवश्यकता है, और आपके जॉब कंटेनर में संगत सीयूडीए और एनसीसीएल होना चाहिए संस्करणों स्थापित.

एनसीसीएल परीक्षण चलाने और p4d.24xबड़े उदाहरणों पर ईएफए के प्रदर्शन का मूल्यांकन करने के लिए, हमें पहले संबंधित को चलाकर क्यूबफ्लो एमपीआई ऑपरेटर को तैनात करना होगा तैनाती.शो में स्क्रिप्ट एमपीआई-ऑपरेटर फ़ोल्डर। फिर हम चलाते हैं तैनाती.शो स्क्रिप्ट और अद्यतन परीक्षण-efa-nccl.yaml संसाधन के लिए इतनी सीमाएँ और अनुरोध प्रकट करें vpc.amazonaws.com 4 पर सेट हैं। p4d.24xlarge नोड्स में उपलब्ध चार EFA एडेप्टर अधिकतम थ्रूपुट प्रदान करने के लिए एक साथ बंडल हो जाते हैं।

रन kubectl apply -f ./test-efa-nccl.yaml परीक्षण लागू करने के लिए और फिर परीक्षण फली के लॉग प्रदर्शित करें। लॉग आउटपुट में निम्न पंक्ति पुष्टि करती है कि EFA का उपयोग किया जा रहा है:

NCCL INFO NET/OFI Selected Provider is efa

परीक्षण के परिणाम निम्न आउटपुट के समान दिखना चाहिए:

[1,0]<stdout>:#                                                       out-of-place                       in-place
[1,0]<stdout>:#       size         count      type   redop     time   algbw   busbw  error     time   algbw   busbw  error
[1,0]<stdout>:#        (B)    (elements)                       (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
[1,0]<stdout>:           8             2     float     sum    629.7    0.00    0.00  2e-07    631.4    0.00    0.00  1e-07
[1,0]<stdout>:          16             4     float     sum    630.5    0.00    0.00  1e-07    628.1    0.00    0.00  1e-07
[1,0]<stdout>:          32             8     float     sum    627.6    0.00    0.00  1e-07    628.2    0.00    0.00  1e-07
[1,0]<stdout>:          64            16     float     sum    633.6    0.00    0.00  1e-07    628.4    0.00    0.00  6e-08
[1,0]<stdout>:         128            32     float     sum    627.5    0.00    0.00  6e-08    632.0    0.00    0.00  6e-08
[1,0]<stdout>:         256            64     float     sum    634.5    0.00    0.00  6e-08    636.5    0.00    0.00  6e-08
[1,0]<stdout>:         512           128     float     sum    634.8    0.00    0.00  6e-08    635.2    0.00    0.00  6e-08
[1,0]<stdout>:        1024           256     float     sum    646.6    0.00    0.00  2e-07    643.6    0.00    0.00  2e-07
[1,0]<stdout>:        2048           512     float     sum    745.0    0.00    0.01  5e-07    746.0    0.00    0.01  5e-07
[1,0]<stdout>:        4096          1024     float     sum    958.2    0.00    0.01  5e-07    955.8    0.00    0.01  5e-07
[1,0]<stdout>:        8192          2048     float     sum    963.0    0.01    0.02  5e-07    954.5    0.01    0.02  5e-07
[1,0]<stdout>:       16384          4096     float     sum    955.0    0.02    0.03  5e-07    955.5    0.02    0.03  5e-07
[1,0]<stdout>:       32768          8192     float     sum    975.5    0.03    0.06  5e-07   1009.0    0.03    0.06  5e-07
[1,0]<stdout>:       65536         16384     float     sum   1353.4    0.05    0.09  5e-07   1343.5    0.05    0.09  5e-07
[1,0]<stdout>:      131072         32768     float     sum   1395.9    0.09    0.18  5e-07   1392.6    0.09    0.18  5e-07
[1,0]<stdout>:      262144         65536     float     sum   1476.7    0.18    0.33  5e-07   1536.3    0.17    0.32  5e-07
[1,0]<stdout>:      524288        131072     float     sum   1560.3    0.34    0.63  5e-07   1568.3    0.33    0.63  5e-07
[1,0]<stdout>:     1048576        262144     float     sum   1599.2    0.66    1.23  5e-07   1595.3    0.66    1.23  5e-07
[1,0]<stdout>:     2097152        524288     float     sum   1671.1    1.25    2.35  5e-07   1672.5    1.25    2.35  5e-07
[1,0]<stdout>:     4194304       1048576     float     sum   1785.1    2.35    4.41  5e-07   1780.3    2.36    4.42  5e-07
[1,0]<stdout>:     8388608       2097152     float     sum   2133.6    3.93    7.37  5e-07   2135.0    3.93    7.37  5e-07
[1,0]<stdout>:    16777216       4194304     float     sum   2650.9    6.33   11.87  5e-07   2649.9    6.33   11.87  5e-07
[1,0]<stdout>:    33554432       8388608     float     sum   3422.0    9.81   18.39  5e-07   3478.7    9.65   18.09  5e-07
[1,0]<stdout>:    67108864      16777216     float     sum   4783.2   14.03   26.31  5e-07   4782.6   14.03   26.31  5e-07
[1,0]<stdout>:   134217728      33554432     float     sum   7216.9   18.60   34.87  5e-07   7240.9   18.54   34.75  5e-07
[1,0]<stdout>:   268435456      67108864     float     sum    12738   21.07   39.51  5e-07    12802   20.97   39.31  5e-07
[1,0]<stdout>:   536870912     134217728     float     sum    24375   22.03   41.30  5e-07    24403   22.00   41.25  5e-07
[1,0]<stdout>:  1073741824     268435456     float     sum    47904   22.41   42.03  5e-07    47893   22.42   42.04  5e-07
[1,4]<stdout>:test-efa-nccl-worker-0:33:33 [4] NCCL INFO comm 0x7fd4a0000f60 rank 4 nranks 16 cudaDev 4 busId 901c0 - Destroy COMPLETE
[1,0]<stdout>:# Out of bounds values : 0 OK
[1,0]<stdout>:# Avg bus bandwidth    : 8.23785

हम परीक्षण के परिणामों में देख सकते हैं कि अधिकतम थ्रूपुट लगभग 42 जीबी/सेकंड है और औसत बस बैंडविड्थ लगभग 8 जीबी है।

हमने एकल EFA अडैप्टर सक्षम के साथ-साथ बिना EFA एडेप्टर के भी प्रयोग किए। सभी परिणामों को निम्न तालिका में संक्षेपित किया गया है।

ईएफए एडेप्टर की संख्या नेट/ओएफआई चयनित प्रदाता औसत बैंडविड्थ (जीबी/एस) मैक्स। बैंडविड्थ (जीबी/एस)
4 efa 8.24 42.04
1 efa 3.02 5.89
0 सॉकेट 0.97 2.38

हमने यह भी पाया कि इमेजनेट जैसे अपेक्षाकृत छोटे मॉडल के लिए, त्वरित नेटवर्किंग के उपयोग से प्रति युग केवल 5-8% के साथ 64 के बैच आकार में प्रशिक्षण समय कम हो जाता है। बड़े मॉडल और छोटे बैच आकारों के लिए, जब वज़न के नेटवर्क संचार में वृद्धि की आवश्यकता होती है , त्वरित नेटवर्किंग के उपयोग का अधिक प्रभाव पड़ता है। हमने एफिशिएंटनेट-बी15 के बैच आकार 18 के प्रशिक्षण के लिए 7-1% के साथ युग प्रशिक्षण समय की कमी देखी। आपके प्रशिक्षण पर ईएफए का वास्तविक प्रभाव आपके मॉडल के आकार पर निर्भर करेगा।

GPU निगरानी

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

CloudWatch को सेट करने के लिए प्रासंगिक स्क्रिप्ट में स्थित हैं जीपीयू-मेट्रिक्स फ़ोल्डर। सबसे पहले, हम एक डॉकर छवि बनाते हैं amazon-cloudwatch-agent और nvidia-smi. हम Dockerfile का उपयोग कर सकते हैं gpu-metrics इस छवि को बनाने के लिए फ़ोल्डर। यह मानते हुए कि ईसीआर रजिस्ट्री पहले से ही सेट है .env पिछले चरण से फ़ाइल, हम छवि का निर्माण और धक्का दे सकते हैं build.sh और push.sh. इसके बाद चल रहा है deploy.sh स्क्रिप्ट स्वचालित रूप से सेटअप पूरा करती है। यह के साथ एक डेमोंसेट लॉन्च करता है amazon-cloudwatch-agent और विभिन्न मेट्रिक्स को CloudWatch पर धकेलता है। GPU मेट्रिक्स के अंतर्गत दिखाई देते हैं CWAgent CloudWatch कंसोल पर नेमस्पेस। बाकी क्लस्टर मेट्रिक्स नीचे दिखाई देते हैं ContainerInsights नाम स्थान।

मॉडल प्रशिक्षण

PyTorch प्रशिक्षण के लिए आवश्यक सभी लिपियों में स्थित हैं इलास्टिकजॉब GitHub रेपो में फ़ोल्डर। प्रशिक्षण कार्य शुरू करने से पहले, हमें चलाने की आवश्यकता है etcd सर्वर, जिसका उपयोग टीईसी द्वारा कार्यकर्ता खोज और पैरामीटर एक्सचेंज के लिए किया जाता है। तैनाती.शो में स्क्रिप्ट elasticjob फ़ोल्डर ठीक यही करता है।

p4d.24xlarge उदाहरणों में EFA का लाभ उठाने के लिए, हमें उपलब्ध विशिष्ट डॉकर छवि का उपयोग करने की आवश्यकता है अमेज़न ईसीआर पब्लिक गैलरी जो ईएफए के माध्यम से एनसीसीएल संचार का समर्थन करता है। हमें बस अपने प्रशिक्षण कोड को इस डॉकर छवि में कॉपी करने की आवश्यकता है। Dockerfile नीचे नमूने फ़ोल्डर p4d इंस्टेंस पर प्रशिक्षण कार्य चलाते समय उपयोग की जाने वाली छवि बनाता है। हमेशा की तरह, हम उपयोग कर सकते हैं बिल्ड.शो और पुश.श छवि बनाने और धक्का देने के लिए फ़ोल्डर में स्क्रिप्ट।

RSI इमेजनेट-efa.yaml फ़ाइल प्रशिक्षण कार्य का वर्णन करती है। यह .yaml फ़ाइल प्रशिक्षण कार्य को चलाने के लिए आवश्यक संसाधनों को सेट करती है और पिछले अनुभाग में सेट किए गए प्रशिक्षण डेटा के साथ निरंतर मात्रा को भी माउंट करती है।

यहां एक दो बातें ध्यान देने योग्य हैं। प्रतिकृतियों की संख्या क्लस्टर में उपलब्ध नोड्स की संख्या पर सेट की जानी चाहिए। हमारे मामले में, हमने इसे 3 पर सेट किया क्योंकि हमारे पास तीन p4d.24xबड़े नोड थे। में imagenet-efa.yaml फ़ाइल, nvidia.com/gpu संसाधनों के तहत पैरामीटर और nproc_per_node के अंतर्गत args प्रति नोड GPU की संख्या पर सेट किया जाना चाहिए, जो कि p4d.24xlarge के मामले में 8 है। साथ ही, पायथन स्क्रिप्ट के लिए कार्यकर्ता तर्क प्रति प्रक्रिया सीपीयू की संख्या निर्धारित करता है। हमने इसे 4 चुना है क्योंकि, हमारे प्रयोगों में, यह p4d.24xबड़े उदाहरणों पर चलते समय इष्टतम प्रदर्शन प्रदान करता है। क्लस्टर में उपलब्ध सभी हार्डवेयर संसाधनों के उपयोग को अधिकतम करने के लिए ये सेटिंग्स आवश्यक हैं।

जब काम चल रहा होता है, तो हम क्लस्टर में सभी GPU के लिए CloudWatch में GPU के उपयोग का निरीक्षण कर सकते हैं। क्लस्टर में तीन p4d.24xlarge नोड्स के साथ हमारे एक प्रशिक्षण कार्य का एक उदाहरण निम्नलिखित है। यहां हमने प्रत्येक नोड से एक GPU चुना है। पहले बताई गई सेटिंग्स के साथ, क्लस्टर में सभी नोड्स के लिए युग के प्रशिक्षण चरण के दौरान GPU का उपयोग 100% के करीब है।

अमेज़ॅन ईकेएस और मशाल वितरित लोचदार प्लेटोब्लॉकचैन डेटा इंटेलिजेंस के साथ वितरित प्रशिक्षण। लंबवत खोज। ऐ.

P50xlarge इंस्टेंस का उपयोग करके एक ResNet3.8 मॉडल को प्रशिक्षित करने के लिए, हमें ठीक उसी चरण की आवश्यकता है जैसा कि p4d.24xlarge का उपयोग करके EfficientNet प्रशिक्षण के लिए वर्णित है। हम उसी डॉकर छवि का भी उपयोग कर सकते हैं। जैसा कि पहले उल्लेख किया गया है, p3.8xबड़े उदाहरण EFA से सुसज्जित नहीं हैं। हालाँकि, ResNet50 मॉडल के लिए, यह कोई महत्वपूर्ण कमी नहीं है। इमेजनेट-fsx.yaml GitHub रिपॉजिटरी में प्रदान की गई स्क्रिप्ट p3.8xlarge नोड प्रकार के लिए उपयुक्त संसाधनों के साथ प्रशिक्षण कार्य सेट करती है। कार्य FSx फ़ाइल सिस्टम से समान डेटासेट का उपयोग करता है।

GPU स्केलिंग

हमने यह देखने के लिए कुछ प्रयोग किए कि GPU की संख्या बढ़ाकर EfficientNet-B7 मॉडल के लिए प्रशिक्षण का समय कैसे बढ़ता है। ऐसा करने के लिए, हमने प्रत्येक प्रशिक्षण रन के लिए हमारे प्रशिक्षण .yaml फ़ाइल में प्रतिकृतियों की संख्या 1 से 3 में बदल दी है। हमने संपूर्ण इमेजनेट डेटासेट का उपयोग करते हुए केवल एक युग के लिए समय देखा। निम्नलिखित आंकड़ा हमारे GPU स्केलिंग प्रयोग के परिणाम दिखाता है। लाल बिंदीदार रेखा दर्शाती है कि GPU की संख्या में वृद्धि करके 8 GPU का उपयोग करके प्रशिक्षण का समय कैसे कम होना चाहिए। जैसा कि हम देख सकते हैं, स्केलिंग अपेक्षा के काफी करीब है।

अमेज़ॅन ईकेएस और मशाल वितरित लोचदार प्लेटोब्लॉकचैन डेटा इंटेलिजेंस के साथ वितरित प्रशिक्षण। लंबवत खोज। ऐ.

इसी तरह, हमने p50xlarge इंस्टेंस पर ResNet3.8 प्रशिक्षण के लिए GPU स्केलिंग प्लॉट प्राप्त किया। इस मामले के लिए, हमने अपनी .yaml फ़ाइल में प्रतिकृतियों को 1 से 4 में बदल दिया है। इस प्रयोग के परिणाम निम्न आकृति में दिखाए गए हैं।

अमेज़ॅन ईकेएस और मशाल वितरित लोचदार प्लेटोब्लॉकचैन डेटा इंटेलिजेंस के साथ वितरित प्रशिक्षण। लंबवत खोज। ऐ.

क्लीन अप

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

kubectl delete -f fsx-pvc-dynamic.yaml
./delete.sh

ध्यान दें कि यह न केवल स्थायी वॉल्यूम को हटा देगा, यह FSx फ़ाइल सिस्टम को भी हटा देगा, और फ़ाइल सिस्टम पर सभी डेटा खो जाएगा। जब यह चरण पूरा हो जाता है, तो हम निम्नलिखित स्क्रिप्ट का उपयोग करके क्लस्टर को हटा सकते हैं ई.के.एस. फ़ोल्डर:

./eks-delete.sh

यह सभी मौजूदा पॉड्स को हटा देगा, क्लस्टर को हटा देगा और शुरुआत में बनाए गए VPC को हटा देगा।

निष्कर्ष

इस पोस्ट में, हमने EKS क्लस्टर पर PyTorch वितरित डेटा समानांतर मॉडल प्रशिक्षण को चलाने के लिए आवश्यक चरणों का विवरण दिया है। यह कार्य कठिन लग सकता है, लेकिन EKS के लिए AWS DevOps एडब्ल्यूएस में एमएल फ्रेमवर्क टीम द्वारा बनाई गई परियोजना प्रक्रिया को सरल बनाने और वितरित मॉडल प्रशिक्षण को आसानी से सुलभ बनाने के लिए सभी आवश्यक स्क्रिप्ट और उपकरण प्रदान करती है।

इस पोस्ट में उपयोग की जाने वाली तकनीकों के बारे में अधिक जानकारी के लिए देखें अमेज़न ईकेएस और मशाल वितरित लोचदार. हम आपको अपने स्वयं के वितरित प्रशिक्षण उपयोग के मामलों में यहां वर्णित दृष्टिकोण को लागू करने के लिए प्रोत्साहित करते हैं।

उपयुक्त संसाधन चुनें


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

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

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

समय टिकट:

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