वेट फोल्डिंग, CUDA स्ट्रीम्स, और वो बग जिसने मेरे मॉडल से उल्टी बात करवाई — फ़िलिप मक्रादुली

AAI Engineer
Computing/SoftwareInternet Technology

Transcript

00:00:00.
00:00:13नमस्कार दोस्तों, यहाँ आने के लिए धन्यवाद और
00:00:18मैं अब अपनी बात शुरू करता हूँ। तो
00:00:22यह टॉक्स एक रिसर्च पेपर के बारे में है
00:00:27जो मैंने लिखा है, और यह बहुत सरल है।
00:00:33इसका मुख्य प्रस्ताव एकदम स्पष्ट है।
00:00:36यह मूल रूप से बीजगणित (algebra) की दो पंक्तियाँ हैं
00:00:39जो ट्रांसफॉर्मर में RMS norm
00:00:42लेयर को किफ़ायती, तेज़ बनाती हैं
00:00:45और इसे एक तरह से बेहतर बनाती हैं
00:00:48जैसे ट्रांसफॉर्मर आर्किटेक्चर में एक लेयर होती है।
00:00:51ठीक वैसे ही जैसे
00:00:54कभी Layer norm मानक हुआ करता था
00:00:57और फिर उसकी जगह RMS norm ने ले ली।
00:01:00यह काम भी इसी सोच के साथ आगे बढ़ता है।
00:01:04और मुझे ओपन-सोर्स दुनिया के
00:01:09कुछ लोगों से मिलने का मौका मिला
00:01:11और मैंने निल्स ग्राफ के साथ मिलकर यह पेपर लिखा
00:01:14जो एक तरह से
00:01:17इसके निर्माता थे।
00:01:21और आगे का काम वहीं से शुरू होता है।
00:01:23तो इसे arXiv पर प्रस्तुत किया गया है।
00:01:26आप इसे देख सकते हैं, पढ़ सकते हैं, टेस्ट कर सकते हैं।
00:01:29एक रिपॉजिटरी भी उपलब्ध है।
00:01:31और इसकी अवधारणा, कहें कि विचार
00:01:36और सोचने का तरीका, इसे सबसे आसानी से
00:01:38शायद FlashAttention से समझाया जा सकता है।
00:01:40तो ठीक उसी तरह जैसे FlashAttention
00:01:45गुणा (multiplication) होने तक इंतज़ार करता है
00:01:48और मेमोरी के बीच इस संचार को सीमित करने की कोशिश करता है
00:01:52ताकि पूरी प्रक्रिया
00:01:54ज़्यादा तेज़ हो सके।
00:01:55यह भी उसी दिशा में एक मिलती-जुलती सोच है।
00:01:58और यह कुछ ऐसे सुधार करता है
00:02:01जो RMS norm प्रक्रिया को बहुत तेज़ बना देते हैं
00:02:08और वास्तव में पूरे ट्रांसफॉर्मर को बेहतर बनाते हैं।
00:02:15और एक सवाल यह है कि आखिर RMS norm ही क्यों?
00:02:19क्योंकि वह लेयर तो गणित का ना के बराबर काम करती है।
00:02:24और यह बात सच भी है।
00:02:26तो अगर आप देखें तो गणित वाले हिस्से का योगदान
00:02:29काफी कम है।
00:02:31हालाँकि, क्लॉक टाइम या वॉल टाइम,
00:02:34जैसा कि वे कहते हैं, काफी ज़्यादा है।
00:02:36और उदाहरण के लिए, एक डिकोड स्टेप में,
00:02:40यानी ठीक उसी समय जब इन्फरेंस होता है,
00:02:43RMS norm को लगभग 33 बार शुरू किया जा सकता है।
00:02:47बेशक, यह मॉडल और बाकी चीज़ों पर निर्भर करता है।
00:02:50पेपर में विशिष्ट मॉडल दिए गए हैं
00:02:52और बताया गया है कि इसे कैसे टेस्ट किया गया था।
00:02:54और सवाल यह है कि इसे कैसे सुधारा जा सकता है
00:02:59और मैट्रिक्स मल्टिप्लिकेशन के लिए इस वेट (weight)
00:03:03से कैसे बचा जा सकता है।
00:03:06और इसके धीमे होने की वजह यह है
00:03:09कि GPUs गणित में धीमे या खराब नहीं हैं,
00:03:15बल्कि वे असली गणित के अलावा बाकी सभी चीज़ों में खराब हैं।
00:03:20यानी काम शुरू करना, जो असल काम है।
00:03:24तो उदाहरण के लिए, प्रक्रिया को शुरू करना जैसा कि
00:03:30कुछ प्रयोगों में 33 बार होता है,
00:03:32उसमें बहुत समय लगता है।
00:03:35और उदाहरण के लिए, प्रत्येक नॉर्मलाइजेशन को
00:03:40मैट्रिक्स मल्टिप्लिकेशन में फ़्यूज़ करने से इससे बचा जा सकता है।
00:03:44साथ ही weight folding करने से
00:03:46मेमोरी के बीच डेटा ट्रांसफर करने में मदद मिल सकती है
00:03:50और यह एक ऐसी प्रक्रिया है जो GPUs के लिए भी धीमी होती है।
00:03:54और इंतज़ार करने से भी बचा जा सकता है।
00:03:56उदाहरण के लिए, RMS norm लेयर में होने वाले
00:04:00विभाजन (division) को टालना
00:04:02भी इस इंतज़ार वाले चरण से बचने का एक तरीका है।
00:04:06तो मूल रूप से यह रिसर्च पेपर
00:04:09इन तीनों पहलुओं में सुधार करता है
00:04:13RMS norm की गणना के तरीके में
00:04:16कुछ गणितीय ट्रिक्स अपनाकर।
00:04:19बस इतना ही है।
00:04:21और गणित के नज़रिए से, ये वे ट्रिक्स हैं।
00:04:25यह मुख्य रूप से पहले दो प्रस्तावों के इर्द-गिर्द है।
00:04:29पहला है weightless normalization।
00:04:31आप इसे यहाँ देख सकते हैं।
00:04:33और दूसरा है deferred normalization।
00:04:35तो यह दूसरा वाला है।
00:04:37और अब नए आर्किटेक्चर में,
00:04:39ऐसी स्थिति आ सकती है जहाँ RMS दो बार दिखाई दे।
00:04:44उदाहरण के लिए, Gemma 4 में ऐसा होता है।
00:04:48तो pre-normalization को रद्द करना भी काम करता है।
00:04:52और यह सब पेपर में गणितीय रूप से सिद्ध किया गया है।
00:04:58और पहला प्रस्ताव यह है
00:05:00जहाँ एक तरह से गेन (gain) और weight fold
00:05:04एक ही मैट्रिक्स में फोल्ड हो जाते हैं।
00:05:06W को आप यहाँ एक स्टार (asterisk) के साथ देख सकते हैं।
00:05:09और इसकी गणना ऑफलाइन की जाती है,
00:05:12ठीक वैसे ही जैसे शायद FlashAttention में
00:05:14आप अलग से कुछ गणनाएँ करते हैं
00:05:16ताकि हर समय मेमोरी के बीच
00:05:18संचार न होता रहे।
00:05:20तो यह एक चरण है जो पूरा हो चुका है,
00:05:24यह weight folding।
00:05:26और दूसरा चरण matmul के अदिश विभाजन (scalar divide)
00:05:32को टालना है ताकि उन्हें समानांतर (parallel) किया जा सके।
00:05:35तो सामान्य स्थिति में, आपको एक बार गणना करनी होगी,
00:05:38फिर इंतज़ार करना होगा और दोबारा गणना करनी होगी।
00:05:41इस मामले में, विचार इसे एक तरह से विभाजित करने का है
00:05:44ताकि इसे पैरेलल में चलाया जा सके।
00:05:48और तीसरा वाला, जो इसी का एक रूप है,
00:05:51यह है कि अगर दो हैं,
00:05:56चूँकि यह स्केल-इनवेरिएंट है,
00:05:58तो उनमें से एक को हटाया जा सकता है और यह फिर भी काम करता है।
00:06:01और यह उन नए मॉडलों पर लागू होता है
00:06:04जिनमें यह आर्किटेक्चर और कार्यान्वयन हो सकता है।
00:06:10तो इसे वास्तविक जीवन में लागू करने के लिए,
00:06:13खासकर इस प्रस्ताव नंबर दो को।
00:06:16जैसे इसके लिए, उदाहरण के लिए, यह आसान है।
00:06:20 transformer tricks नाम से एक रिपॉजिटरी है।
00:06:22आप इसे किसी भी मॉडल पर लागू कर सकते हैं और यह काम करता है।
00:06:25लेकिन ऐसा करने के लिए, कर्नेल (kernel) स्तर पर कुछ काम करना पड़ता है।
00:06:29इसलिए इसे करना उतना आसान नहीं है।
00:06:31तो मेरे लिए ऐसा करने के लिए,
00:06:35जब मैं इसे लागू कर रहा था, तब एक बार मेरे सामने यह प्रयोग आया।
00:06:42तो सामान्य तौर पर यह ठीक दिखता है जहाँ यह ऐसा है कि,
00:06:46“ठीक है, प्रॉम्ट है कि ट्रांसफॉर्मर आर्किटेक्चर ने
00:06:48NLP में क्रांति ला दी क्योंकि,”
00:06:51और फिर कुछ अपेक्षित आउटपुट आता है।
00:06:54लेकिन जो आउटपुट मुझे मिला,
00:06:56उसमें मैंने यह दोहराव और एक स्टेप का अंतर (lag) देखा।
00:06:59जैसा कि आप यहाँ देख सकते हैं, “because” शब्द दोबारा आता है।
00:07:01और GPU स्ट्रीम्स के साथ कुछ समस्या हो रही थी
00:07:07और मैं यह समझने की कोशिश कर रहा था कि क्या हो रहा था।
00:07:10और मुझे यह एक स्टेप का lag मिल रहा था और एक तरह से ऐसे आउटपुट
00:07:15आ रहे थे जो अतीत से संबंधित थे।
00:07:18और इस सब की डिबगिंग करते हुए,
00:07:21मुझे अहसास हुआ कि इस तरह की कोई चीज़ बनाने की प्रक्रिया में।
00:07:26जैसा कि मैंने प्रस्ताव 2 में बताया था या ऑपरेशन्स को टालने की बात कही थी,
00:07:32CUDA में आप दो काम कर सकते हैं।
00:07:35आप tensor cores का उपयोग कर सकते हैं जो मैट्रिक्स मल्टिप्लिकेशन का एक हिस्सा करते हैं
00:07:39और आप CUDA cores का उपयोग कर सकते हैं जो एलिमेंट-वाइज़ ऑपरेशन्स,
00:07:44रिडक्शन्स, स्क्वायर रूट्स वगैरह चलाते हैं।
00:07:47तो विचार इसे पैरेलल में करने का था और इसका लाभ उठाने का था
00:07:52जो मैं पेपर में समझा रहा था ताकि इस अवधारणा का परीक्षण किया जा सके।
00:07:58तो इसे कुछ इस तरह दिखना चाहिए था।
00:08:00अगर आप चीज़ों को एक के बाद एक (क्रमिक रूप से) करते हैं,
00:08:03तो एक निष्क्रिय प्रतीक्षा समय होता है जब वेक्टर यूनिट RMS और स्केलिंग की गणना करती है,
00:08:10और फिर मैट्रिक्स गुणा होता है।
00:08:12इसलिए विचार यह था कि, फ़्लैश नॉर्म के साथ, जो कि पेपर की तकनीक है,
00:08:16आपको इन दोनों को समानांतर रूप से करना चाहिए।
00:08:19ताकि मैट्रिक्स यूनिट matmul की गणना करे और वेक्टर यूनिट RMS की गणना करे।
00:08:23इस तरह आप समय बचाते हैं।
00:08:26हालाँकि, आप इसे केवल पाइथन में नहीं कर सकते।
00:08:28आपको थोड़ा निचले स्तर (लो-लेवल) पर जाना होगा।
00:08:30और मैंने इस तरह के CUDA कोड्स के साथ ऐसा किया।
00:08:35और उस समय यह आमतौर पर ठीक दिख रहा था।
00:08:42हालाँकि, मुझे अहसास हुआ कि मैंने कुछ थोड़ा गलत कर दिया था।
00:08:47और बात यह थी कि अंत में जहाँ आपको दोनों स्ट्रीम्स को जोड़ना था, वह मेरे मामले में अप्रत्यक्ष (इम्पलीसिट) था।
00:08:57और जब मैंने इसका परीक्षण किया, तो यूनिट टेस्ट काम कर गया।
00:09:01परप्लेक्सिटी टेस्टिंग वगैरह में गुणवत्ता समान लग रही थी क्योंकि जनरेशन एक जैसा ही था।
00:09:08लेकिन लंबे जनरेशन के दौरान मैं यह समस्या देख पाया।
00:09:11इसलिए मुझे अंदाज़ा नहीं था कि यह क्या था।
00:09:14और कारण यह था कि जब मैं यह इम्पलीसिट जॉइन कर रहा था, तो मूल रूप से एक स्ट्रीम ने काम पूरा नहीं किया था।
00:09:24इसलिए मुझे रेस कंडीशन्स मिलीं जो अधूरे मैट्रिक्स गुणा से पुराने डेटा को पढ़ रही थीं।
00:09:31इसलिए इसे ठीक करने का विचार इस बात पर आधारित था कि मुझे जॉइन को लेकर स्पष्ट (एक्सपलीसिट) होना था।
00:09:40और एक ऑपरेशन के खत्म होने तक इंतज़ार करना था ताकि मैं आश्वस्त रहूँ कि जॉइन करते समय मैं पुराना डेटा नहीं पढ़ रहा हूँ।
00:09:48CUDA स्ट्रीम्स के इस अन्वेषण में यही बात समझ आई थी।
00:09:54और इस तरह मैंने चीज़ें की थीं।
00:09:57जॉइन अप्रत्यक्ष (इम्पलीसिट) था।
00:10:00इसलिए पोस्ट स्केल पुरानी बफ़र वैल्यू को पढ़ लेता था।
00:10:06और इसे इससे ठीक किया जाता है जहाँ मूल रूप से आपको मैट्रिक्स गुणा के अंत को चिह्नित करने की आवश्यकता होती है।
00:10:14फिर RMS के अंत को चिह्नित करें।
00:10:17और फिर पोस्ट स्केल पहली स्ट्रीम का इंतज़ार करे।
00:10:21और फिर दूसरी स्ट्रीम का इंतज़ार करे।
00:10:24और उसने उस बग को ठीक कर दिया और पेपर के काम को सही बनाया जिससे मॉडल उल्टा बोलने के बजाय सीधा बोलने लगा।
00:10:33और वह शायद एक बेहतरीन अकादमिक दृष्टिकोण था।
00:10:38लेकिन मैं चीज़ों को आज़माना भी चाहता था, सही?
00:10:40इसे डिप्लॉय करें, टेस्ट करें, और देखें कि मैं इसे किसी प्रोडक्शन सेटिंग में कैसे काम में ला सकता हूँ।
00:10:47और आप पेपर भी पढ़ सकते हैं और सारे टेस्ट देख सकते हैं।
00:10:50कुछ टेस्ट Llama मॉडल्स पर किए गए हैं, लेकिन यह अन्य आर्किटेक्चर के लिए भी काम करता है।
00:10:56तो आप इस खास पेपर के लिए क्या कर सकते हैं, उदाहरण के लिए जो वेट फोल्डिंग मैंने समझाई (प्रस्तावना एक), आप इसे रेपो में दिए कोड से कर सकते हैं।
00:11:10यह ऐसा है कि आप फ़्लैशिफ़ाई कहते हैं और यह काम हो जाता है।
00:11:13हालाँकि, जो दूसरी चीज़ मैंने बताई, उसके लिए आपको थोड़ा कर्नल वर्क करने की ज़रूरत होगी अगर आप वो करना चाहते हैं।
00:11:19जैसे मैंने अपने उदाहरण में समझाया।
00:11:22और ये कुछ परिणाम हैं जो Llama मॉडल्स पर आधारित हैं और यहाँ विभिन्न विवरण हैं जिन्हें आप देख सकते हैं।
00:11:29जैसे कि क्या होता है अगर आप केवल डिफर्ड नॉर्मलाइजेशन करते हैं, और क्या होता है अगर आप पूरा फ्यूज्ड कर्नल इस्तेमाल करते हैं।
00:11:36तो सभी प्रस्तावनाओं का परीक्षण करने के लिए लो-लेवल जाने के कई प्रयोग मौजूद हैं।
00:11:41और ये बारीकी और गहराई के अलग-अलग स्तरों पर हमारे परिणाम रहे हैं।
00:11:48लेकिन वेट फोल्डिंग जैसा साधारण तरीका भी कुछ सुधार दिखाता है।
00:11:54और यह उन रोज़मर्रा के टूल्स के साथ भी काम करता है जिन्हें आप मॉडल में इस्तेमाल करते हैं।
00:11:59तो ऐसा नहीं है कि आपको फिर से पहिया बनाना है या सब कुछ शुरुआत से करना है।
00:12:05इसलिए यह torch compile के साथ काम करता है क्योंकि यह एक तरह से एक नया चेकपॉइंट है और बस इतना ही।
00:12:13Flash attention एक अलग लेयर पर इसी तरह की ट्रिक्स अपनाता है।
00:12:16और यह क्वांटाइज्ड मॉडल्स के साथ भी काम करता है।
00:12:18तो इसे लागू करना पूरी तरह से बढ़िया है और आप ऐसा मॉडल प्राप्त कर सकते हैं जिसमें यह नई नॉर्मलाइजेशन लेयर हो।
00:12:27और इसे चलाने के लिए विवरण और कोड्स आपको जिस जगह मिलेंगे, वह है यह transformer tricks रेपो।
00:12:34इसमें विभिन्न अलजेब्रिक ट्रिक्स हैं जैसा कि मैंने समझाया, साथ ही वह पेपर भी है जिसका मैंने जिक्र किया था।
00:12:41और HuggingFace मॉडल रेपो भी है जहाँ मैंने कुछ मॉडल्स के साथ ऐसा किया है।
00:12:50और आपके पास उस मॉडल का HuggingFace लिंक हो सकता है ताकि आप उसका परीक्षण कर सकें।
00:12:54और इन HuggingFace मॉडल्स के साथ आप इन्हें प्रोडक्शन में डिप्लॉय भी कर सकते हैं।
00:13:00तो जब मैं यह करने की सोच रहा था, तो मुझे अहसास हुआ कि ठीक है, अब जबकि साइंस का काम पूरा हो गया है और HuggingFace मॉडल का लिंक मौजूद है,
00:13:11किसी भी HuggingFace मॉडल को डिप्लॉय करने के लिए Superlink का इनफरेंस इंजन एक शानदार तरीका था।
00:13:19और हमने हैकाथॉन में ऐसा किया है जहाँ लोग अपनी फ़ाइन-ट्यून की गई चीज़ों के साथ कोई कस्टम HuggingFace मॉडल या चेकपॉइंट लाते थे।
00:13:27और आप परीक्षण कर सकते हैं, भले ही आपके पास इन अलजेब्रिक ट्रिक्स का कोई वर्ज़न हो जिससे आप मॉडल सुधारना चाहते हों और अपने रिसर्च आइडियाज़ का टेस्ट करना चाहते हों,
00:13:37आप इसे आज़मा सकते हैं और क्लस्टर पर इस मॉडल का डिप्लॉयड वर्ज़न रख सकते हैं, बिना मॉडल्स को डिप्लॉय करने वाले ग्लू कोड की चिंता किए।
00:13:48तो यह काफी बढ़िया है। और मुख्य बात यह है कि यदि आपके पास पूरा क्लस्टर और मॉडल इनफरेंस ओपन-सोर्स है,
00:13:58तो आप इस तरह के नए रिसर्च आइडियाज़ का परीक्षण कर सकते हैं, जहाँ अगर आप कर्नल मैनिपुलेशन या फ़्लैश नॉर्म जैसी चीज़ें करना चाहते हैं,
00:14:12तो किसी किराए के एंडपॉइंट पर ऐसा करना बहुत मुश्किल होता है जहाँ इनफरेंस पर आपका नियंत्रण नहीं होता।
00:14:18इसलिए आपको कुछ ऐसा चाहिए जो पोर्टेबल और फ्लेक्सिबल हो ताकि आप ये काम कर सकें,
00:14:23लेकिन साथ ही इतना प्रोडक्शन-रेडी भी हो कि आप बड़े पैमाने पर चीज़ों का परीक्षण कर सकें।
00:14:27और उदाहरण के लिए, आप इसे अन्य मॉडल्स के साथ जोड़ने के लिए Sy का उपयोग कर सकते हैं।
00:14:33जैसे कि आप ऊपर बाएँ देख सकते हैं, यदि आप चाहें तो एजेंटिक टास्क करने के लिए इन फ़्लैशिफ़ाइड मॉडल्स को अन्य मॉडल्स के साथ रख सकते हैं,
00:14:43और उस एंड-टू-एंड बड़े यूज़ केस को अंजाम दे सकते हैं।
00:14:46और जिस तरह से Sy काम करता है, यह प्रोडक्शन क्लस्टर मॉडल्स को डिप्लॉय करने में मदद करता है।
00:14:52तो इस बारे में अधिक जानकारी के लिए आप Sy की रेपो भी देख सकते हैं।
00:14:57और एक स्मार्ट क्यूइंग मैकेनिज्म भी है जो मदद करता है, खासकर यदि आप छोटे मॉडल्स के साथ काम करते हैं,
00:15:03क्योंकि फ़्लैश नॉर्म का काम करते समय, मैंने छोटे Llama मॉडल्स और HuggingFace के छोटे एजेंट्स के साथ काम किया था।
00:15:11तो छोटे मॉडल्स को डिप्लॉय करने का तरीका होना जो एक ही GPU पर काम कर सकें, ताकि आपको GPU लागत पर पैसे खर्च न करने पड़ें,
00:15:24बल्कि मॉडल्स को आपस में स्विच किया जा सके, खासकर छोटे मॉडल्स को, यह काफी उपयोगी था।
00:15:30और आप API के साथ-साथ क्लस्टर के ज़रिए मॉडल कॉन्फ़िग्स को भी नियंत्रित कर सकते हैं,
00:15:35जो कि आपके ओपन सोर्स रिसर्च में किसी इन्फ्रा बंदे के सपोर्ट के बिना भी काफी सुविधाजनक है।
00:15:40तो यह भी काफी बढ़िया है।
00:15:43और आपका अपना क्लाउड होता है, जो तब उपयोगी होता है जब आप ओपन वेट्स, ओपन मॉडल्स और ओपन सोर्स चाहते हैं।
00:15:50और Sy के पास विभिन्न मॉडल्स का एक कैटलॉग भी है, केवल वही नहीं जिनका मैंने जिक्र किया,
00:15:57बल्कि आप जाकर देख सकते हैं।
00:15:59अगर आप वैसा कुछ बना रहे हैं तो री-रैंकिंग एम्बेडिंग मॉडल्स भी मौजूद हैं।
00:16:03और इसके साथ ही, मैं अपनी रिसर्च यात्रा की इस कहानी को समाप्त कर रहा हूँ जहाँ मैंने ट्रांसफॉर्मर को बेहतर बनाने वाली तकनीक पर इस पेपर का सह-लेखन किया,
00:16:15लेकिन इसे प्रोडक्शन में लाने, इसका परीक्षण करने और इन ओपन सोर्स मॉडल्स के साथ प्रयोग करने का तरीका भी निकाला।
00:16:24और यदि आपके पास कोई प्रश्न या योगदान है तो बेझिझक मुझसे LinkedIn पर संपर्क करें।
00:16:30जिन चीज़ों का मैंने ज़िक्र किया है, उनमें से कई VLLM या Hugging Face पर PRs के रूप में हैं।
00:16:36वे आपको हर जगह मिल सकती हैं।
00:16:38आप पेपर भी देख सकते हैं।
00:16:40यह arXiv का लिंक है जो आपके पास वहाँ है।
00:16:43और आपके पास Sy का रेपो और मेरा LinkedIn भी है।
00:16:47तो, शामिल होने के लिए आप सभी का बहुत-बहुत धन्यवाद।
00:16:58और आप सवालों के लिए मुझसे मिल सकते हैं।
00:16:59हम यहीं होंगे।
00:17:00आस-पास ही।
00:17:13धन्यवाद।

Key Takeaway

RMS norm में वेट फोल्डिंग और डिफर्ड नॉर्मलाइजेशन जैसी बीजगणितीय ट्रिक्स लागू करने से ट्रांसफॉर्मर मॉडल तेज़ होते हैं, जिन्हें CUDA स्ट्रीम्स के सही प्रबंधन और ओपन-सोर्स टूल्स के ज़रिए प्रोडक्शन में डिप्लॉय किया जा सकता है।

Highlights

  • RMS norm को मैट्रिक्स मल्टिप्लिकेशन में फ्यूज़ करने और वेट फोल्डिंग तकनीक अपनाने से ट्रांसफॉर्मर आर्किटेक्चर की प्रक्रिया काफी तेज़ हो जाती है।

  • डिकोड स्टेप या इन्फरेंस के दौरान RMS norm को एक ही स्टेप में लगभग 33 बार शुरू किया जा सकता है।

  • CUDA स्ट्रीम्स में इम्पलीसिट जॉइन के कारण रेस कंडीशन्स उत्पन्न होती हैं जो अधूरे मैट्रिक्स गुणा से पुराना डेटा पढ़ लेती हैं।

  • फ्लैश नॉर्म और वेट फोल्डिंग जैसी तकनीकों को लागू करने के लिए transformer tricks नाम की रिपॉजिटरी में कोड उपलब्ध है।

  • सुपरलिंक का इनफरेंस इंजन और Sy का उपयोग करके क्लस्टर पर कस्टम HuggingFace मॉडल्स को आसानी से डिप्लॉय किया जा सकता है।

Timeline

RMS norm और ट्रांसफॉर्मर आर्किटेक्चर में सुधार

  • बीजगणित की दो पंक्तियाँ ट्रांसफॉर्मर में RMS norm लेयर को किफ़ायती और तेज़ बनाती हैं।
  • यह कार्य FlashAttention जैसी सोच से प्रेरित है जो मेमोरी के बीच संचार को सीमित करता है।

यह शोध पेपर RMS norm प्रक्रिया को तेज़ करने पर केंद्रित है। ट्रांसफॉर्मर आर्किटेक्चर में लेयर norm की जगह RMS norm ने ले ली है, और यह नया काम इसी दिशा में आगे बढ़ता है। इसे arXiv पर प्रस्तुत किया गया है और इसकी अवधारणा FlashAttention से मिलती-जुलती है।

धीमेपन के कारण और गणितीय ट्रिक्स

  • GPUs असली गणित के अलावा प्रक्रिया शुरू करने जैसे अन्य कामों में धीमे होते हैं।
  • वेटलेस नॉर्मलाइजेशन और डिफर्ड नॉर्मलाइजेशन जैसे प्रस्ताव RMS norm की गणना के तरीके में सुधार करते हैं।

इन्फरेंस के दौरान RMS norm को कई बार शुरू किया जाता है जिसमें काफी समय लगता है। इस धीमेपन से बचने के लिए प्रत्येक नॉर्मलाइजेशन को मैट्रिक्स मल्टिप्लिकेशन में फ़्यूज़ किया जाता है और वेट फोल्डिंग का उपयोग किया जाता है। इन्हें पेपर में गणितीय रूप से सिद्ध किया गया है।

CUDA स्ट्रीम्स और डिबगिंग की समस्या

  • लो-लेवल CUDA कोड्स में इम्पलीसिट जॉइन के कारण रेस कंडीशन्स उत्पन्न होती हैं।
  • मैट्रिक्स गुणा और RMS के अंत को स्पष्ट रूप से चिह्नित करने से बग ठीक हो जाता है।

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

मॉडल डिप्लॉयमेंट और ओपन-सोर्स टूल्स

  • transformer tricks रिपॉजिटरी से कोड का उपयोग करके इन तकनीकों को लागू किया जा सकता है।
  • Superlink और Sy जैसे टूल्स ओपन-सोर्स मॉडल्स को क्लस्टर पर डिप्लॉय करने में मदद करते हैं।

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

Community Posts

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

Write about this video