मुख्य अंतर्दृष्टि: अधिकांश न्यूरल नेटवर्क गणनाओं को 32 बिट सटीकता की आवश्यकता नहीं है। भार, एक्टिवेशन, और ग्रेडिएंट को 16 बिट में बिना सार्थक गुणवत्ता हानि के प्रदर्शित किया जा सकता है। लेकिन कुछ ऑपरेशनों (loss गणना, भार अपडेट) को सांख्यिकीय अस्थिरता से बचने के लिए उच्च सटीकता की आवश्यकता होती है। मिश्रित सटीकता अपडेट के लिए FP32 में भारों की एक मास्टर कॉपी रखती है, जबकि forward और backward पास के लिए FP16/BF16 का उपयोग करती है।
FP16 (IEEE आधी-सटीकता) में 5 exponent बिट और 10 mantissa बिट हैं। BF16 (Brain Float 16) में 8 exponent बिट और 7 mantissa बिट हैं। BF16 की व्यापक exponent श्रेणी का अर्थ है कि यह FP32 के समान मूल्यों की श्रेणी का प्रतिनिधित्व कर सकता है (overflow/underflow से बचते हुए), जबकि FP16 की संकीर्ण श्रेणी को ग्रेडिएंट को शून्य तक underflow होने से रोकने के लिए loss scaling की आवश्यकता होती है। प्रशिक्षण के लिए, BF16 सरल और अधिक स्थिर है। Inference के लिए, FP16 कभी-कभी समान मेमोरी लागत पर थोड़ी बेहतर सटीकता प्रदान करता है।
नवीनतम GPUs (NVIDIA H100, H200) और भी तेज़ गणना के लिए FP8 (8-बिट floating point) का समर्थन करते हैं। FP8 FP16 की तुलना में मेमोरी को आधा करता है और थ्रूपुट को दोगुना करता है, लेकिन गुणवत्ता क्षरण से बचने के लिए सावधानीपूर्वक संभालना ज़रूरी है। वर्तमान अभ्यास: BF16 में प्रशिक्षण, FP16 या FP8 में सर्व, और एज डिप्लॉयमेंट के लिए INT4/INT8 में quantize। सटीकता में प्रत्येक कदम नीचे गुणवत्ता की थोड़ी मात्रा को गति और मेमोरी लाभ के लिए ट्रेड करता है।