चिह्न, घातांक, मंटिसा
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 की लगातार घातों के बीच अधिक बारीक अनुदेशन प्रतिनिधित्व।
तीन प्रारूप
| प्रारूप | कुल बिट्स | चिह्न | घातांक | मैन्ट | गतिशील सीमा | सटीकता |
|---|---|---|---|---|---|---|
| FP32 | 32 | 1 | 8 | 23 | ~10^-38 से ~10^38 | ~7 अंक |
| FP16 | 16 | 1 | 5 | 10 | ~10^-5 से ~10^5 | ~3 अंक |
| FP8 E4M3 | 8 | 1 | 4 | 3 | ~2^-9 से ~448 | ~2 अंक |
FP8 E4M3 का मतलब है "4 एक्सपोनेंट बिट्स, 3 मैंटिसा बिट्स"। एक वैकल्पिक FP8 E5M2 रेंज के लिए सटीकता का व्यापार करता है; ANDREA प्रयोग E4M3 का उपयोग करते हैं क्योंकि ट्रांसफॉर्मर एक्टिवेशन्स संकीर्ण परिमाण बैंड्स में रहते हैं जहाँ अतिरिक्त सटीकता अतिरिक्त रेंज पर विजय प्राप्त करती है।
प्रति पैरामीटर बाइट्स
कम प्रेसिजन क्यों तेजी से चलता है
मेमोरी बैंडविड्थ ट्रेनिंग स्पीड को नियंत्रित करती है
आधुनिक GPUs कम्प्यूटिंग से ज्यादा समय मेमोरी का इंतजार करते हुए बिताते हैं। RTX 4090 में 1008 GB/s मेमोरी बैंडविड्थ और 165 TFLOPS FP16 कम्प्यूट है। एक सामान्य लेयर VRAM से वेट्स पढ़ती है, एक्टिवेशन्स से गुणा करती है, रिजल्ट्स वापस लिखती है। बैंडविड्थ, न कि कम्प्यूट, थ्रूपुट तय करती है।
प्रेसिजन को आधा करने से पैरामीटर प्रति बाइट्स आधी हो जाती है, इसलिए वही वेट्स पढ़ने में आधी मेमोरी बैंडविड्थ लगती है। थ्रूपुट लगभग दोगुना हो जाता है।
टेंसर कोर: हार्डवेयर-त्वरित मैट्रिक्स मल्टीप्लाई
RTX 4090 में समर्पित टेंसर कोर इकाइयाँ होती हैं जो FP16 या FP8 पर मैट्रिक्स मल्टीप्लाई को सीधे गणना करती हैं। एक टेंसर कोर ऑपरेशन एक छोटे ब्लॉक (उदाहरण के लिए 16x16) को एक चक्र में गुणा करता है, जो स्केलर FP32 मल्टीप्लाई से नाटकीय रूप से तेज़ है।
ANDREA-120M से अनुभवजन्य संख्याएँ:
| सटीकता | स्टेप्स/मिनट | टिप्पणियाँ |
|---|---|---|
| FP32 | ~3 | बेसलाइन; कोई टेंसर कोर त्वरण नहीं |
| FP16 | ~6 | cuBLAS tensor cores; 2x speedup |
| FP8 E4M3 | ~6 | tensor 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 घटनाएं जटिल स्केलिंग ट्रिक्स के बिना भी दुर्लभ रहती हैं।
नए रन के लिए प्रिसिजन चुनना
एक सिंगल 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 के लिए बजट का आकार निर्धारण
प्रैक्टिस में सटीकता
संबंधित गतिविधियाँ
तीन भाई-बहन प्रेसिजन से जुड़े हैं:
- गतिविधि 1: परिचय / VRAM बजट। प्रेसिजन मेमोरी बजट अंकगणित के हर पद को गुणा करती है। 6-8x गुणक का अंगूठे का नियम इकाई-रहित है; bytes-per-param इसे इकाइयाँ देता है।
- गतिविधि 10: AdamW. ऑप्टिमाइज़र स्टेट (m और v) सामान्यतः FP32 पर ही रहता है भले ही फॉरवर्ड/बैकवर्ड कम्प्यूट FP16 पर चले। कारण: लॉन्ग-टेल एक्यूमुलेटर की प्रेसिजन रनटाइम स्पीड से अधिक महत्वपूर्ण है ऑप्टिमाइज़र के लिए।
- गतिविधि 12: ग्रेडिएंट क्लिपिंग। क्लिपिंग ग्रेडिएंट मैग्निट्यूड्स को कैप करती है ऑप्टिमाइज़र स्टेट अपडेट्स से पहले। FP16 फॉरवर्ड/बैकवर्ड और FP32 ऑप्टिमाइज़र के साथ, क्लिपिंग उस बाउंड्री पर होती है जहाँ प्रेसिजन बदलती है और ओवरफ्लो रिस्क केंद्रित होता है।
प्रेसिजन एक मुफ्त नॉब है: इसे बदलें, मॉडल तेज़ी से ट्रेन होता है और कम मेमोरी इस्तेमाल करता है। लागत है न्यूमेरिकल सावधानी: NaN हैंडलिंग, लॉस स्केलिंग, मिक्स्ड-प्रेसिजन डिसिप्लिन। ANDREA-120M v3 पेऑफ़ दिखाता है: 120M पैरामीटर्स कंज्यूमर हार्डवेयर पर 23 दिनों में ट्रेन हुए क्योंकि FP16 ने सब कुछ आधा कर दिया।