आपका GPU छोटा नहीं है… आपका सेटअप गलत है

BBetter Stack
Computing/SoftwareAdult EducationInternet Technology

Transcript

00:00:00यह है डीप स्पीड (DeepSpeed), माइक्रोसॉफ्ट की ओपन-सोर्स लाइब्रेरी जो सीधे पायटॉर्च (PyTorch) से जुड़ जाती है और मेमोरी की असली समस्या को हल करती है।
00:00:07इसकी मदद से आप उन मॉडल्स को भी एक ही GPU पर चला सकते हैं जो आम तौर पर तुरंत क्रैश हो जाते हैं। बड़े मॉडल्स इसलिए फेल नहीं होते क्योंकि वे धीमे हैं।
00:00:14वे फेल होते हैं क्योंकि ऑप्टिमाइज़र स्टेट्स, ग्रेडिएंट्स और पैरामीटर्स आपकी VRAM को भर देते हैं। डीप स्पीड का राज़ है ZeRO, जो ट्रेनिंग स्टेट्स को बांट (shard) देता है।
00:00:23ताकि आप हर जगह एक ही चीज़ को बार-बार स्टोर न कर रहे हों। हमारे नए वीडियो अक्सर आते रहते हैं, तो सब्सक्राइब ज़रूर करें।
00:00:30अब चलिए सीधे शुरू करते हैं और इसे चला कर देखते हैं। मैं इसे गूगल कोलैब (Google Colab) पर चलाऊँगा क्योंकि मैं मैक (Mac) और M4 Pro पर हूँ।
00:00:40तो मेरे पास एनवीडिया (Nvidia) GPU नहीं है, जिससे चीज़ें थोड़ी मुश्किल हो जाती हैं, लेकिन मैं इसे कोलैब पर कर सकता हूँ।
00:00:46सबसे पहले मैं अपने GPU की जांच करूँगा, फिर हम अपने सभी पैकेज इंस्टॉल (pip install) कर सकते हैं।
00:00:51मैं पायटॉर्च, हगिंग फेस और डीप स्पीड जैसे टूल इंस्टॉल करूँगा और फिर आपके CUDA और कंपाइलर सेटअप की जाँच के लिए 'ds_report' चलाऊँगा।
00:00:59कुछ और चीज़ें इंस्टॉल करनी होंगी ताकि सब कुछ आसानी से चले।
00:01:02फिर हम अपनी कॉन्फ़िग JSON फ़ाइल बनाएंगे ताकि डीप स्पीड को कॉन्फ़िगर कर सकें। यह कॉन्फ़िग फ़ाइल ही असली चीज़ है।
00:01:09हम ZeRO स्टेज 2 से शुरू करेंगे, जो ऑप्टिमाइज़र स्टेट्स और ग्रेडिएंट्स को सभी GPU में बाँट देता है।
00:01:14इससे मेमोरी का इस्तेमाल बहुत कम हो जाता है, जबकि मॉडल पैरामीटर्स अपनी जगह बने रहते हैं। इस बारे में ज़्यादा मत सोचिए क्योंकि इसने मुझे भी काफी परेशान किया था।
00:01:22बस आधिकारिक डॉक्यूमेंट्स से शुरू करें, एक बार में एक ही चीज़ बदलें और बिना सोचे-समझे कुछ भी जोड़ने की इच्छा को रोकें।
00:01:28यह कॉन्फ़िग आपको हगिंग फेस और डीप स्पीड दोनों की वेबसाइट पर मिल जाएगी।
00:01:34और मैंने अपनी ज़्यादातर पायथन स्क्रिप्ट भी इन्हीं डॉक्यूमेंट्स से ली है।
00:01:37लेकिन मैंने अपने सिस्टम के हिसाब से इसमें थोड़े बदलाव किए हैं ताकि यह मैक सिस्टम पर बेहतर चल सके।
00:01:42अगर यह स्टेप फेल हो जाए तो यहीं रुक जाइए, क्योंकि डीप स्पीड की ज़्यादातर समस्याएँ CUDA मिसमैच की वजह से होती हैं, आपके मॉडल की वजह से नहीं।
00:01:48अब हम इसे चलाएंगे और देखेंगे कि यह कैसे काम करता है।
00:01:51मैं इस उदाहरण के लिए एक छोटे डेटासेट का इस्तेमाल करूँगा ताकि यह जल्दी काम करने लगे।
00:01:58और देखिए, कुछ ही मिनटों में काम हो गया। हम इसके स्टेप्स और पीक GPU मेमोरी भी देख सकते हैं।
00:02:03हाँ, इस बार ट्रेनिंग लॉस में कोई खास बदलाव या कमी नहीं आई।
00:02:08लेकिन बेहतर लॉस के लिए हम इसे ऑप्टिमाइज़ कर सकते हैं या बड़े डेटासेट का इस्तेमाल कर सकते हैं।
00:02:13यहाँ लोग अक्सर धोखा खा जाते हैं और फिर भी उनकी मेमोरी कम पड़ जाती है।
00:02:16ZeRO अलग-अलग स्टेज में आता है, और हर स्टेज एक सवाल का जवाब देती है: “मुझे एक GPU पर क्या-क्या स्टोर करना बंद कर देना चाहिए?”
00:02:24स्टेज 1 ऑप्टिमाइज़र स्टेट्स को बाँटता है, और स्टेज 2 वही काम ग्रेडिएंट्स के साथ भी करता है।
00:02:30अब आप उन चीज़ों को हटा रहे हैं जो चुपके से आपकी मेमोरी खा जाती हैं। इसके बाद आता है ZeRO स्टेज 3।
00:02:36यह सबसे बड़ा लेवल है। यह ऑप्टिमाइज़र स्टेट्स, ग्रेडिएंट्स और पैरामीटर्स, तीनों को बाँट देता है।
00:02:40इससे मेमोरी की सबसे ज़्यादा बचत होती है, लेकिन शायद यह भी काफी न हो।
00:02:45अगर मॉडल फिर भी फिट नहीं हो रहा, तो ZeRO Infinity इसे CPU या यहाँ तक कि NVMe पर भी ऑफ़लोड कर सकता है।
00:02:50हाँ, यहाँ आप स्केल के बदले थोड़ी स्पीड का त्याग कर रहे हैं। लेकिन कभी-कभी असली जीत मॉडल को किसी भी तरह फिट करने में ही होती है।
00:02:56अब अगर आप सोच रहे हैं कि मेमोरी ही आपकी इकलौती समस्या नहीं है, तो आप सही हैं। डीप स्पीड 3D पैरेललिज्म, पाइपलाइन और टेंसर पैरेललिज्म को भी सपोर्ट करता है।
00:03:04और इसमें 'मिक्सचर ऑफ एक्सपर्ट्स' (MoE) मॉडल्स के लिए इन-बिल्ट सपोर्ट भी है।
00:03:09ताकि स्पार्स (sparse) मॉडल्स आपकी कंप्यूटिंग पावर को ज़्यादा खर्च न करें।
00:03:12अब हमारे पास कई बेहतरीन विकल्प हैं। डीप स्पीड हगिंग फेस और एक्सेलरेट (Accelerate) के साथ बहुत अच्छे से जुड़ जाता है।
00:03:19इसलिए आपको सब कुछ खरोंच से बनाने की ज़रूरत नहीं है।
00:03:21आप बस वही लें जिसकी आपको ज़रूरत है और बाकी को छोड़ दें। अब बेंचमार्क आपके सेटअप पर बहुत निर्भर करते हैं।
00:03:27इसलिए हमेशा बड़े नंबरों पर आँख बंद करके भरोसा न करें। मैंने इसे कई बार चलाने की कोशिश की।
00:03:30लेकिन फिर वही बात, M4 Pro पर होने की वजह से मैं इस बेसिक मॉडल को और ज़्यादा ऑप्टिमाइज़ नहीं कर सका।
00:03:36तो कुछ कहना मुश्किल है, लेकिन दूसरे डीप स्पीड प्रोजेक्ट्स ने थ्रूपुट (throughput) में बड़ी बढ़त दिखाई है।
00:03:41खासकर तब जब मेमोरी एक बड़ी बाधा थी। अगर आप विंडोज़ या लिनक्स पर हैं, तो ये बड़े फायदे दे सकते हैं।
00:03:46तो सबसे सही तरीका यही है कि आप इसे खुद आज़माएँ। आधिकारिक कॉन्फ़िग से शुरुआत करें।
00:03:51मैंने भी यहाँ वही किया, मैक के लिए थोड़ा बदलाव किया और फिर CUDA की समस्याओं को सुलझाया।
00:03:56अगर आप 'ऑफलोड' ऑन करते हैं, तो CPU RAM पर नज़र रखें, और अगर आप आगे चलकर मल्टी-GPU इस्तेमाल करना चाहते हैं।
00:04:01तो 'एक्सेलरेट' उसमें आपकी मदद करेगा। डीप स्पीड असल में एक ऐसा बटन है जो कहता है, “आज मेरी मेमोरी कम नहीं पड़ेगी!”
00:04:07एक बार जब आप ZeRO और ऑफ़लोडिंग को समझ लेते हैं, तो यह बड़े मॉडल्स को सीमित हार्डवेयर पर चलाना संभव बना देता है।
00:04:14लेकिन शुरुआत में इसे सेट अप करना थोड़ा उलझन भरा ज़रूर हो सकता है।
00:04:17अगर इससे आपका GPU समय बचा या आपको ऐसे डेवलपर टूल्स पसंद हैं, तो सब्सक्राइब करें। मिलते हैं अगले वीडियो में!

Key Takeaway

डीप स्पीड और इसकी ZeRO तकनीक हार्डवेयर की सीमाओं को तोड़कर बड़े AI मॉडल्स को सीमित GPU क्षमता वाले सिस्टम पर कुशलतापूर्वक चलाने का समाधान प्रदान करती है।

Highlights

डीप स्पीड (DeepSpeed) माइक्रोसॉफ्ट की एक ओपन-सोर्स लाइब्रेरी है जो पायटॉर्च के साथ मिलकर GPU मेमोरी की कमी को दूर करती है।

बड़े मॉडल्स के फेल होने का मुख्य कारण केवल उनकी गति नहीं

Timeline

डीप स्पीड और मेमोरी प्रबंधन का परिचय

इस शुरुआती भाग में माइक्रोसॉफ्ट की डीप स्पीड लाइब्रेरी का परिचय दिया गया है जो पायटॉर्च के साथ सीधे काम करती है। वक्ता बताते हैं कि बड़े मॉडल्स अक्सर इसलिए क्रैश होते हैं क्योंकि ऑप्टिमाइज़र स्टेट्स और पैरामीटर्स GPU की VRAM को पूरी तरह भर देते हैं। यहाँ ZeRO तकनीक का उल्लेख किया गया है जो ट्रेनिंग डेटा को बांटने का काम करती है ताकि मेमोरी की बचत हो सके। वक्ता यह भी साझा करते हैं कि वे एनवीडिया GPU की कमी के कारण गूगल कोलैब का उपयोग कर रहे हैं। इस चरण में 'ds_report' जैसे टूल्स के माध्यम से CUDA और कंपाइलर सेटअप की जाँच करने की सलाह दी गई है।

कॉन्फ़िगरेशन और ZeRO स्टेज 2 का कार्यान्वयन

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

ZeRO के विभिन्न स्तर और ऑफ़लोडिंग तकनीकें

इस भाग में ZeRO के विभिन्न चरणों (स्टेज 1, 2, और 3) की गहरी समझ दी गई है और बताया गया है कि हर स्तर मेमोरी बचत में कैसे योगदान देता है। स्टेज 3 सबसे उन्नत स्तर है जो ऑप्टिमाइज़र स्टेट्स, ग्रेडिएंट्स और पैरामीटर्स तीनों को बांट देता है। यदि मेमोरी फिर भी कम पड़ती है, तो 'ZeRO Infinity' का उपयोग करके डेटा को CPU या NVMe पर ऑफ़लोड किया जा सकता है। वक्ता यहाँ स्पष्ट करते हैं कि हालांकि इससे थोड़ी गति कम हो सकती है, लेकिन यह बड़े मॉडल्स को फिट करने के लिए एक आवश्यक त्याग है। इसके अतिरिक्त, डीप स्पीड 3D पैरेललिज्म और 'मिक्सचर ऑफ एक्सपर्ट्स' (MoE) मॉडल्स के लिए भी समर्थन प्रदान करता है।

निष्कर्ष और भविष्य के सुझाव

अंतिम भाग में डीप स्पीड के अन्य टूल्स जैसे हगिंग फेस और एक्सेलरेट के साथ एकीकरण पर चर्चा की गई है। वक्ता बताते हैं कि बेंचमार्क परिणाम व्यक्तिगत सेटअप पर निर्भर करते हैं, इसलिए इन्हें खुद आज़माना सबसे अच्छा तरीका है। मैक सिस्टम पर CUDA की संभावित समस्याओं और ऑफलोड मोड के दौरान CPU RAM की निगरानी करने की चेतावनी दी गई है। मल्टी-GPU उपयोग के लिए 'एक्सेलरेट' के लाभों को दोहराया गया है। अंत में, डीप स्पीड को एक ऐसे समाधान के रूप में प्रस्तुत किया गया है जो "आज मेरी मेमोरी कम नहीं पड़ेगी" का वादा करता है।

Community Posts

No posts yet. Be the first to write about this video!

Write about this video