English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

चिह्न, घातांक, मंटिसा

IEEE 754 फ्लोटिंग-पॉइंट प्रारूप

हर फ्लोटिंग-पॉइंट संख्या तीन फील्ड संग्रहीत करती है:


- चिह्न बिट (1 बिट): धनात्मक या ऋणात्मक

- घातांक (E बिट्स): परिमाण स्केल, 2 का एक पूर्णांक घात

- मैंटिसा (M बिट्स): भिन्नात्मक परिशुद्धता, 1.0 और ~2.0 के बीच एक संख्या


कुल बिट्स = 1 + E + M। मान लगभग (-1)^sign (1 + mantissa) 2^(exponent - bias) के बराबर होता है।


प्रशिक्षण के लिए दो गुण महत्वपूर्ण हैं:


गतिक परास = 2^(2^E) (लगभग)। अधिक घातांक बिट्स का मतलब है कि छोटे और विशाल संख्याओं को ओवरफ्लो के बिना दर्शाना।


सटीकता = 2^M भिन्न मान प्रत्येक 2 की घात के लिए। अधिक मैन्टिसा बिट्स का अर्थ है 2 की लगातार घातों के बीच अधिक बारीक अनुदेशन प्रतिनिधित्व।


तीन प्रारूप


प्रारूपकुल बिट्सचिह्नघातांकमैन्टगतिशील सीमासटीकता
FP32321823~10^-38 से ~10^38~7 अंक
FP16161510~10^-5 से ~10^5~3 अंक
FP8 E4M38143~2^-9 से ~448~2 अंक

FP8 E4M3 का मतलब है "4 एक्सपोनेंट बिट्स, 3 मैंटिसा बिट्स"। एक वैकल्पिक FP8 E5M2 रेंज के लिए सटीकता का व्यापार करता है; ANDREA प्रयोग E4M3 का उपयोग करते हैं क्योंकि ट्रांसफॉर्मर एक्टिवेशन्स संकीर्ण परिमाण बैंड्स में रहते हैं जहाँ अतिरिक्त सटीकता अतिरिक्त रेंज पर विजय प्राप्त करती है।

प्रति पैरामीटर बाइट्स

ANDREA-120M में लगभग 120,000,000 पैरामीटर होते हैं। केवल वजन मैट्रिक्स का स्टोरेज फुटप्रिंट 계산 करें (a) FP32 में, (b) FP16 में, (c) FP8 में। MB में अपना अंकगणित दिखाएँ। फिर (d) वजन + Adam पहला क्षण + Adam दूसरा क्षण (वजन गिनती का 3x) FP16 पर स्टोरेज फुटप्रिंट 계산 करें।

कम प्रेसिजन क्यों तेजी से चलता है

मेमोरी बैंडविड्थ ट्रेनिंग स्पीड को नियंत्रित करती है

आधुनिक GPUs कम्प्यूटिंग से ज्यादा समय मेमोरी का इंतजार करते हुए बिताते हैं। RTX 4090 में 1008 GB/s मेमोरी बैंडविड्थ और 165 TFLOPS FP16 कम्प्यूट है। एक सामान्य लेयर VRAM से वेट्स पढ़ती है, एक्टिवेशन्स से गुणा करती है, रिजल्ट्स वापस लिखती है। बैंडविड्थ, न कि कम्प्यूट, थ्रूपुट तय करती है।


प्रेसिजन को आधा करने से पैरामीटर प्रति बाइट्स आधी हो जाती है, इसलिए वही वेट्स पढ़ने में आधी मेमोरी बैंडविड्थ लगती है। थ्रूपुट लगभग दोगुना हो जाता है।


टेंसर कोर: हार्डवेयर-त्वरित मैट्रिक्स मल्टीप्लाई

RTX 4090 में समर्पित टेंसर कोर इकाइयाँ होती हैं जो FP16 या FP8 पर मैट्रिक्स मल्टीप्लाई को सीधे गणना करती हैं। एक टेंसर कोर ऑपरेशन एक छोटे ब्लॉक (उदाहरण के लिए 16x16) को एक चक्र में गुणा करता है, जो स्केलर FP32 मल्टीप्लाई से नाटकीय रूप से तेज़ है।


ANDREA-120M से अनुभवजन्य संख्याएँ:


सटीकतास्टेप्स/मिनटटिप्पणियाँ
FP32~3बेसलाइन; कोई टेंसर कोर त्वरण नहीं
FP16~6cuBLAS tensor cores; 2x speedup
FP8 E4M3~6tensor cores; FP16 के समकक्ष

FP8 ने इस कार्यभार पर FP16 को थ्रूपुट में हराया नहीं क्योंकि कम्प्यूट थ्रूपुट बोतलनेक बनना बंद हो गया था; मेमोरी बैंडविड्थ और लॉन्च ओवरहेड बाइंडिंग बन गए। ANDREA-120M v3 FP16 cuBLAS पर 6 स्टेप्स/मिनट की दर से शिप होता है जो थ्रूपुट खोए बिना आरामदायक सुरक्षा मार्जिन प्रदान करता है।


FP8 पर NaN का जोखिम

FP8 E4M3 ~2^-9 से ~448 तक के नंबर्स को रिप्रेजेंट करता है। उस रेंज से बाहर के एक्टिवेशन्स या ग्रेडिएंट्स NaN (not a number) में ओवरफ्लो हो जाते हैं या जीरो में अंडरफ्लो हो जाते हैं। एक सिंगल NaN हर डाउनस्ट्रीम कम्प्यूटेशन को जहर दे देता है: NaN के साथ मैट्रिक्स मल्टीप्लाईज सभी-NaN रिटर्न करते हैं; सभी-NaN ग्रेडिएंट्स AdamW स्टेट को करप्ट करते हैं; NaN m & v वाले AdamW NaN अपडेट्स आउटपुट करते हैं; वेट्स NaN बन जाते हैं; पूरा ट्रेनिंग रन मर जाता है।


एंड्रिया के FP8 प्रयोगों ने कभी-कभी NaN क्लिफ्स उत्पन्न किए जो लॉस स्केलिंग, शेड्यूल्ड प्रिसिजन स्विचिंग, या फॉलबैक पाथ्स की आवश्यकता रखते थे। FP16 का डायनामिक रेंज (~10^-5 से ~10^5) इतना व्यापक है कि NaN घटनाएं जटिल स्केलिंग ट्रिक्स के बिना भी दुर्लभ रहती हैं।


Precision Comparison: FP32 vs FP16 vs FP8

नए रन के लिए प्रिसिजन चुनना

आप RTX 4090 पर एक नया ANDREA-स्टाइल ट्रेनिंग रन शुरू कर रहे हैं। आपके दो परस्पर विरोधी प्राथमिकताएं हैं: (1) steps/min को अधिकतम करें, (2) ट्रेनिंग के बीच में NaN क्रैश डिबगिंग से बचें। ANDREA-120M v3 ने ~6 steps/min पर चलने वाले दोनों के बावजूद FP8 E4M3 के बजाय FP16 cuBLAS चुना। तर्क दें कि FP16 ने यह निर्णय क्यों जीता। अपने उत्तर में डायनामिक रेंज AND टेंसर कोर सपोर्ट का संदर्भ दें।

एक सिंगल 4090 पर 120M को फिट करना

परिचय पाठ से 6-8x गुणक

grow_a_language_model_intro से याद करें कि ट्रेनिंग मेमोरी लगभग कच्चे वजन की संख्या के 6-8x के बराबर होती है, जिसमें शामिल हैं:


- वजन (1x)

- Adam पहला क्षण m (1x)

- Adam दूसरा क्षण v (1x)

- ग्रेडिएंट बफर (1x)

- एक्टिवेशन्स और टेम्पररीज़ (~2-4x, बैच और कॉन्टेक्स्ट पर निर्भर)


ANDREA-120M FP16 पर batch_size=8, context=1024 के साथ:


घटकFP16 आकार
वेट्स240 MB
m (पहला क्षण)240 MB
v (दूसरा क्षण)240 MB
ग्रेडिएंट्स240 MB
एक्टिवेशन्स~2-4 GB (बैच, ctx)
कुल~3.5 GB

RTX 4090 में 24 GB VRAM है। ANDREA-120M FP16 पर ~14% उपयोग करता है। बड़े बैच साइज या लंबे संदर्भ विंडो के लिए पर्याप्त जगह है। ANDREA-12M ने कुल केवल 1.4 GB उपयोग किया।


मिश्रित परिशुद्धता कहाँ रहती है

ANDREA सब कुछ एक ही परिशुद्धता पर नहीं रखता। मिश्रित-परिशुद्धता प्रशिक्षण में संग्रहीत होता है:


- मास्टर वेट्स: FP32 (प्रशिक्षण स्थिरता को संरक्षित करता है)

- फॉरवर्ड और बैकवर्ड कम्प्यूट: FP16 (टेंसर कोर का उपयोग करता है)

- AdamW ऑप्टिमाइज़र स्टेट: FP32 (m और v को लॉन्ग-टेल अपडेट्स के लिए परिशुद्धता की आवश्यकता होती है)

- ग्रेडिएंट बफर: FP16 (कम्प्यूट साइड)


अंतिम मेमोरी बजट दोनों को मिलाता है। ANDREA का वास्तविक फुटप्रिंट शुद्ध FP16 (720 MB optimizer state) और शुद्ध FP32 (1.44 GB optimizer state) के बीच स्थित है, FP32 के करीब क्योंकि m और v FP32 में रहते हैं।

ANDREA-480M के लिए बजट का आकार निर्धारण

ANDREA-480M (परिवार का नियोजित तीसरा सदस्य) में लगभग 480 मिलियन पैरामीटर हैं। अनुमान लगाएं (a) केवल FP16 वेट्स MB में, (b) FP16 वेट्स + m + v MB में (सरलता के लिए मान लें m और v भी FP16 हैं), और (c) 6-8x गुणक के नियम के आधार पर, FP16 पर कुल ट्रेनिंग-टाइम फुटप्रिंट। क्या ANDREA-480M एक सिंगल RTX 4090 (24 GB) पर फिट होता है?

प्रैक्टिस में सटीकता

मान लीजिए कि ट्रेनिंग के बीच में आपने पाया कि ANDREA-120M हर ~5000 स्टेप्स पर FP16 में कभी-कभी NaN लॉस उत्पन्न कर रहा था, & प्रत्येक NaN के लिए चेकपॉइंट से पुनः आरंभ करना पड़ता था। FP16 छोड़ते हुए NaN की आवृत्ति कम करने के लिए आप **सबसे पहले कौन सा एक बदलाव** आजमाते? एक-वाक्य तंत्र के साथ औचित्य दें।

संबंधित गतिविधियाँ

तीन भाई-बहन प्रेसिजन से जुड़े हैं:


- गतिविधि 1: परिचय / VRAM बजट। प्रेसिजन मेमोरी बजट अंकगणित के हर पद को गुणा करती है। 6-8x गुणक का अंगूठे का नियम इकाई-रहित है; bytes-per-param इसे इकाइयाँ देता है।

- गतिविधि 10: AdamW. ऑप्टिमाइज़र स्टेट (m और v) सामान्यतः FP32 पर ही रहता है भले ही फॉरवर्ड/बैकवर्ड कम्प्यूट FP16 पर चले। कारण: लॉन्ग-टेल एक्यूमुलेटर की प्रेसिजन रनटाइम स्पीड से अधिक महत्वपूर्ण है ऑप्टिमाइज़र के लिए।

- गतिविधि 12: ग्रेडिएंट क्लिपिंग। क्लिपिंग ग्रेडिएंट मैग्निट्यूड्स को कैप करती है ऑप्टिमाइज़र स्टेट अपडेट्स से पहले। FP16 फॉरवर्ड/बैकवर्ड और FP32 ऑप्टिमाइज़र के साथ, क्लिपिंग उस बाउंड्री पर होती है जहाँ प्रेसिजन बदलती है और ओवरफ्लो रिस्क केंद्रित होता है।


प्रेसिजन एक मुफ्त नॉब है: इसे बदलें, मॉडल तेज़ी से ट्रेन होता है और कम मेमोरी इस्तेमाल करता है। लागत है न्यूमेरिकल सावधानी: NaN हैंडलिंग, लॉस स्केलिंग, मिक्स्ड-प्रेसिजन डिसिप्लिन। ANDREA-120M v3 पेऑफ़ दिखाता है: 120M पैरामीटर्स कंज्यूमर हार्डवेयर पर 23 दिनों में ट्रेन हुए क्योंकि FP16 ने सब कुछ आधा कर दिया।