लोकल ग्रेडिएंट एक्युमुलेशन ट्रेनिंग की गति को 1.7x बढ़ा देता है
पाइपलाइनों में आइडल टाइम (idle time) के कारण ट्रेनिंग की गति अक्सर रुक जाती है। इस आइडल टाइम को 'बबल' (bubble) कहा जाता है।
PACI नामक एक नई विधि इस समस्या का समाधान करती है। यह इन बबल्स को हटा देती है और ट्रेनिंग की गति को 1.69x तक बढ़ा देती है।
अधिकांश टीमें 1F1B-flush नामक रणनीति का उपयोग करती हैं। यह विधि weights को सुसंगत रखती है लेकिन खाली स्लॉट बना देती है जहाँ सिस्टम डेटा का इंतज़ार करता है। यह वेटिंग टाइम सब कुछ धीमा कर देता है।
अन्य asynchronous विधियाँ इसे ठीक करने की कोशिश करती हैं। वे weight stashing या duplicate copies जैसी जटिल ट्रिक्स का उपयोग करती हैं। ये ट्रिक्स बहुत अधिक मेमोरी का उपयोग करती हैं और अक्सर ट्रेनिंग को अस्थिर बना देती हैं।
PACI एक अलग रास्ता अपनाती है। यह local gradient accumulation का उपयोग करती है। यह global synchronization की आवश्यकता के बिना पाइपलाइन को व्यस्त रखती है।
यहाँ बताया गया है कि PACI क्यों महत्वपूर्ण है:
- यह मानक विधियों की स्थिरता (stability) के बराबर है।
- यह उतनी ही मेमोरी का उपयोग करती है।
- यह तेज़ लेकिन भारी कॉन्फ़िगरेशन की गति तक पहुँच जाती है।
- यह time-to-accuracy को 1.69x तक कम कर देती है।
GPT-2 Medium के साथ किए गए परीक्षणों में, PACI ने लक्षित सटीकता (target accuracy) बहुत तेज़ी से प्राप्त की। यह दर्शाता है कि आप भारी दक्षता लाभ (efficiency gains) के लिए थोड़े से weight drift से समझौता कर सकते हैं।
इंजीनियरिंग टीमों के लिए, इसका अर्थ है हार्डवेयर लागत में 40% की कमी। आपको अधिक GPUs खरीदे बिना या अधिक मेमोरी जोड़े बिना तेज़ परिणाम मिलते हैं।
शोधकर्ताओं ने GPT-शैली के मॉडलों के साथ 8-स्टेज पाइपलाइन पर इसका परीक्षण किया। यदि आप अपनी पाइपलाइन की गहराई (depth) या batch size बदलते हैं, तो आपको accumulation window को ट्यून करने की आवश्यकता हो सकती है।
आप इसे स्वयं टेस्ट कर सकते हैं। लेखक अपने रिपॉजिटरी में एक local-accumulation wrapper प्रदान करते हैं। स्पीडअप देखने के लिए अपने वर्तमान flush synchronizer को इससे बदल दें।
Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk
Optional learning community: https://t.me/GyaanSetuAi