Bfloat16 फ़्लोटिंग-पॉइंट प्रारूप
Floating-point formats |
---|
IEEE 754 |
|
Other |
Bfloat16 (मस्तिष्क फ़्लोटिंग पॉइंट)[1][2] फ़्लोटिंग-पॉइंट प्रारूप कंप्यूटर नंबर प्रारूप है जो स्मृति में 16-बिट रखता है; यह तैरनेवाला स्थल का उपयोग करके संख्यात्मक मानों की विस्तृत गतिशील श्रृंखला का प्रतिनिधित्व करता है। यह प्रारूप हार्डवेयर एक्सिलरेशन यंत्र अधिगम और बुद्धिमान सेंसर के इरादे से 32-बिट एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप Iआईईईई 754 सिंगल-प्रिसिजन फ्लोटिंग-पॉइंट फॉर्मेट (बाइनरी 32) का छोटा (16-बिट) संस्करण है। सेंसर कंप्यूटिंग.[3] यह 8 एक्सपोनेंट पूर्वाग्रह को बनाए रखते हुए 32-बिट फ्लोटिंग-पॉइंट नंबरों की अनुमानित गतिशील रेंज को संरक्षित करता है, लेकिन बाइनरी32 प्रारूप के 24-बिट महत्व के बजाय केवल 8-बिट परिशुद्धता का समर्थन करता है। एकल-परिशुद्धता 32-बिट फ़्लोटिंग-पॉइंट संख्याओं से अधिक, bfloat16 संख्याएँ पूर्णांक गणना के लिए अनुपयुक्त हैं, लेकिन यह उनका इच्छित उपयोग नहीं है। Bfloat16 का उपयोग भंडारण आवश्यकताओं को कम करने और मशीन लर्निंग एल्गोरिदम की गणना गति को बढ़ाने के लिए किया जाता है।[4]
Bfloat16 प्रारूप गूगल ब्रेन द्वारा विकसित किया गया था, जो गूगल का कृत्रिम बुद्धिमत्ता अनुसंधान समूह है। इसका उपयोग Intel AI त्वरक में किया जाता है, जैसे नर्वाना सिस्टम्स NNP-L1000, Xeon प्रोसेसर (AVX-512 BF16 एक्सटेंशन), और Intel FPGAs,[5][6][7] गूगल क्लाउड टेन्सर प्रोसेसिंग इकाइयाँ,[8][9][10] और TensorFlow।[10][11] ARM आर्किटेक्चर#ARMv8.6-A|ARMv8.6-A, रेफरी>"Armv8-A के लिए BFloat16 एक्सटेंशन". community.arm.com (in English). Retrieved 2019-08-30.</ref> AMD OpenCL#ओपन सोर्स कार्यान्वयन, रेफरी>"आरओसीएम संस्करण इतिहास". github.com (in English). Retrieved 2019-10-23.</ref> सीयूडीए, रेफरी>"CUDA लाइब्रेरी ब्लोट16 इंट्रिनिक्स".</ref> Apple का Apple M2 रेफरी>"AArch64: नए Apple CPUs के लिए समर्थन जोड़ें · llvm/llvm-project@677da09". GitHub (in English). Retrieved 2023-05-08.</ref> और इसलिए Apple A15 चिप्स और बाद में, bfloat16 प्रारूप का भी समर्थन करते हैं। इन प्लेटफार्मों पर, bfloat16 का उपयोग मिश्रित-सटीक अंकगणित में भी किया जा सकता है, जहां bfloat16 संख्याओं को संचालित किया जा सकता है और व्यापक डेटा प्रकारों तक विस्तारित किया जा सकता है।
bfloat16 फ़्लोटिंग-पॉइंट प्रारूप
bfloat16 में निम्नलिखित प्रारूप है:
- साइन बिट: 1 बिट
- घातांक चौड़ाई: 8 बिट्स
- महत्वपूर्ण परिशुद्धता (अंकगणित): 8 बिट्स (7 स्पष्ट रूप से संग्रहीत, अंतर्निहित अग्रणी बिट के साथ), शास्त्रीय एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप में 24 बिट्स के विपरीत
Bfloat16 प्रारूप, छोटा एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप है | आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट, आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट से तेज़ प्रकार के रूपांतरण की अनुमति देता है; Bfloat16 प्रारूप में रूपांतरण में, घातांक बिट्स को संरक्षित किया जाता है, जबकि NaN विशेष मामले को अनदेखा करते हुए महत्व क्षेत्र को काट-छाँट (इस प्रकार आईईईई 754 राउंडिंग नियमों के अनुरूप) द्वारा कम किया जा सकता है। प्रतिपादक बिट्स को संरक्षित करने से 32-बिट फ्लोट की रेंज ≈ 10 बनी रहती है−38 से ≈ 3 × 1038.[12]
बिट्स को इस प्रकार रखा गया है:
sign | exponent (5 बिट) | fraction (10 बिट) | ||||||||||||||
┃ | ┌───────┐ | ┌─────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 10 | 9 | 0 |
sign | exponent (8 बिट) | fraction (23 बिट) | ||||||||||||||||||||||||||||||
┃ | ┌─────────────┐ | ┌───────────────────────────────────────────┐ | ||||||||||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
31 | 30 | 23 | 22 | 0 |
sign | exponent (8 बिट) | fraction (7 बिट) | ||||||||||||||
┃ | ┌─────────────┐ | ┌───────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 7 | 6 | 0 |
sign | exponent (8 बिट) | fraction (10 बिट) | |||||||||||||||||
┃ | ┌─────────────┐ | ┌─────────────────┐ | |||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
18 | 17 | 10 | 9 | 0 |
sign | exponent (7 बिट) | fraction (16 बिट) | ||||||||||||||||||||||
┃ | ┌───────────┐ | ┌─────────────────────────────┐ | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
23 | 22 | 16 | 15 | 0 |
sign | exponent (8 बिट) | fraction (15 बिट) | ||||||||||||||||||||||
┃ | ┌─────────────┐ | ┌───────────────────────────┐ | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
23 | 22 | 15 | 14 | 0 |
bfloat16 और एकल परिशुद्धता के साथ तुलना करें
S | E | E | E | E | E | E | E | E | F | F | F | F | F | F | F | f | f | f | f | f | f | f | f | f | f | f | f | f | f | f | f |
किंवदंती
- S: sign
- E: exponent
- एफ: अंश (दोनों प्रारूपों में महत्वपूर्ण से पीछे)।
- एफ: 32-बिट में अंश (अनुगामी महत्व) एकल परिशुद्धता (तुलनात्मक)
घातांक एन्कोडिंग
Bfloat16 बाइनरी फ्लोटिंग-पॉइंट एक्सपोनेंट को ऑफसेट बाइनरी | ऑफसेट-बाइनरी प्रतिनिधित्व का उपयोग करके एन्कोड किया गया है, जिसमें शून्य ऑफसेट 127 है; आईईईई 754 मानक में प्रतिपादक पूर्वाग्रह के रूप में भी जाना जाता है।
- इmin = 01H−7FH = −126
- औरmax = एफईH−7FH = 127
- घातांक पूर्वाग्रह = 7FH = 127
इस प्रकार, ऑफसेट-बाइनरी प्रतिनिधित्व द्वारा परिभाषित वास्तविक प्रतिपादक प्राप्त करने के लिए, 127 के ऑफसेट को प्रतिपादक क्षेत्र के मूल्य से घटाना होगा।
घातांक फ़ील्ड का न्यूनतम और अधिकतम मान (00)H और एफएफH) की विशेष रूप से व्याख्या की जाती है, जैसे आईईईई 754 मानक प्रारूपों में।
प्रतिपादक | महत्व शून्य | सार्थकतथा गैर-शून्य | समीकरण |
---|---|---|---|
00H | zero, −0 | असामान्य संख्याएँ | (−1)signbit×2−126× 0.significandbits |
01H, ..., FEH | सामान्यीकृत मूल्य | (−1)signbit×2exponentbits−127× 1.significandbits | |
FFH | ±infinity | NaN (शांत, संकेत) |
न्यूनतम सकारात्मक सामान्य मान 2 है−126 ≈ 1.18 × 10−38 और न्यूनतम सकारात्मक (असामान्य) मान 2 है−126−7 = 2−133 ≈9.2 × 10−41.
विशेष मानों का एन्कोडिंग
सकारात्मक और नकारात्मक अनंत
जैसे आईईईई 754 में, सकारात्मक और नकारात्मक अनंत को उनके संबंधित साइन बिट्स के साथ दर्शाया जाता है, सभी 8 एक्सपोनेंट बिट्स सेट (एफएफ)hex) और सभी महत्वपूर्ण बिट्स शून्य। स्पष्ट रूप से,
val s_exponent_signcnd
+inf = 0_11111111_0000000
-inf = 1_11111111_0000000
कोई संख्या नहीं
जैसे आईईईई 754 में, NaN मानों को या तो साइन बिट के साथ दर्शाया जाता है, सभी 8 एक्सपोनेंट बिट्स सेट (एफएफ)hex) और सभी महत्वपूर्ण बिट्स शून्य नहीं हैं। स्पष्ट रूप से,
val s_exponent_signcnd
+NaN = 0_11111111_klmnopq
-NaN = 1_11111111_klmnopq
जहां k, l, m, n, o, p, या q में से कम से कम 1 है। आईईईई 754 की तरह, NaN मान शांत या सिग्नलिंग हो सकते हैं, हालांकि सितंबर 2018 तक bfloat16 NaNs सिग्नलिंग का कोई ज्ञात उपयोग नहीं है।
सीमा और परिशुद्धता
Bfloat16 को 32-बिट सिंगल-प्रिसिजन फ़्लोटिंग-पॉइंट फॉर्मेट | आईईईई 754 सिंगल-प्रिसिजन फ़्लोटिंग-पॉइंट फॉर्मेट (बाइनरी 32) से संख्या सीमा बनाए रखने के लिए डिज़ाइन किया गया है, जबकि परिशुद्धता को 24 बिट्स से घटाकर 8 बिट्स किया गया है। इसका मतलब है कि परिशुद्धता दो और तीन दशमलव अंकों के बीच है, और bfloat16 लगभग 3.4 × 10 तक परिमित मानों का प्रतिनिधित्व कर सकता है38.
उदाहरण
ये उदाहरण फ्लोटिंग-पॉइंट मान के हेक्साडेसिमल और बाइनरी संख्या में बिट प्रतिनिधित्व में दिए गए हैं। इसमें संकेत, (पक्षपातपूर्ण) प्रतिपादक और महत्व शामिल हैं।
3f80 = 0 01111111 0000000 = 1 c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (28 − 1)×2−7×2127 ≈ 3.38953139 × 1038 (bfloat16 परिशुद्धता में अधिकतम परिमित सकारात्मक मान) 0080 = 0 00000001 000000 = 2−126 ≈ 1.175494351 × 10−38 (bfloat16 परिशुद्धता और एकल-परिशुद्धता फ़्लोटिंग बिंदु में न्यूनतम सामान्यीकृत सकारात्मक मान)
एक सामान्य bfloat16 संख्या का अधिकतम सकारात्मक परिमित मान 3.38953139 × 10 है38, थोड़ा नीचे (224 − 1)×2−23×2127 = 3.402823466 × 1038, एकल परिशुद्धता में दर्शाने योग्य अधिकतम परिमित सकारात्मक मान।
शून्य और अनंत
0000 = 0 00000000 0000000 = 0 8000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = infinity ff80 = 1 11111111 0000000 = −infinity
विशेष मान
4049 = 0 10000000 1001001 = 3.140625 ≈ π ( pi ) 3eab = 0 01111101 0101011 = 0.333984375 ≈ 1/3
NaNs
ffc1 = x 11111111 1000001 => qNaN ff81 = x 11111111 0000001 => sNaN
यह भी देखें
- अर्ध-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप: 16-बिट फ़्लोट w/1-बिट साइन, 5-बिट एक्सपोनेंट, और 11-बिट महत्व, जैसा कि आईईईई 754 द्वारा परिभाषित किया गया है
- आईएसओ/आईईसी 10967, भाषा स्वतंत्र अंकगणित
- आदिम डेटा प्रकार
- मिनीफ्लोट
- गूगल ब्रेन
संदर्भ
- ↑ Teich, Paul (2018-05-10). "Tearing Apart Google's TPU 3.0 AI Coprocessor". The Next Platform. Retrieved 2020-08-11.
Google invented its own internal floating point format called "bfloat" for "brain floating point" (after Google Brain).
- ↑ Wang, Shibo; Kanwar, Pankaj (2019-08-23). "BFloat16: The secret to high performance on Cloud TPUs". Google Cloud. Retrieved 2020-08-11.
This custom floating point format is called "Brain Floating Point Format," or "bfloat16" for short. The name flows from "Google Brain", which is an artificial intelligence research group at Google where the idea for this format was conceived.
- ↑ Tagliavini, Giuseppe; Mach, Stefan; Rossi, Davide; Marongiu, Andrea; Benin, Luca (2018). "A transprecision floating-point platform for ultra-low power computing". 2018 Design, Automation & Test in Europe Conference & Exhibition (DATE). pp. 1051–1056. arXiv:1711.10374. doi:10.23919/DATE.2018.8342167. ISBN 978-3-9819263-0-9. S2CID 5067903.
- ↑ Dr. Ian Cutress (2020-03-17). "Intel': Cooper lake Plans: Why is BF16 Important?". Retrieved 2020-05-12.
The bfloat16 standard is a targeted way of representing numbers that give the range of a full 32-bit number, but in the data size of a 16-bit number, keeping the accuracy close to zero but being a bit more loose with the accuracy near the limits of the standard. The bfloat16 standard has a lot of uses inside machine learning algorithms, by offering better accuracy of values inside the algorithm while affording double the data in any given dataset (or doubling the speed in those calculation sections).
- ↑ Khari Johnson (2018-05-23). "इंटेल ने त्वरित एआई प्रशिक्षण के लिए नर्वाना न्यूरल नेट एल-1000 का अनावरण किया". VentureBeat. Retrieved 2018-05-23.
...इंटेल हमारे AI उत्पाद श्रृंखलाओं में bfloat16 समर्थन का विस्तार करेगा, जिसमें Intel Xeon प्रोसेसर और Intel FPGAs शामिल हैं।
- ↑ Michael Feldman (2018-05-23). "इंटेल ने एआई पोर्टफोलियो के लिए नया रोडमैप पेश किया". TOP500 Supercomputer Sites. Retrieved 2018-05-23.
इंटेल ने Xeon और FPGA लाइनों सहित अपने सभी AI उत्पादों में इस प्रारूप का समर्थन करने की योजना बनाई है
- ↑ Lucian Armasu (2018-05-23). "इंटेल 2019 में अपना पहला न्यूरल नेटवर्क प्रोसेसर स्प्रिंग क्रेस्ट लॉन्च करेगा". Tom's Hardware. Retrieved 2018-05-23.
इंटेल ने कहा कि एनएनपी-एल1000 बीफ्लोट16 को भी सपोर्ट करेगा, जो एक संख्यात्मक प्रारूप है जिसे तंत्रिका नेटवर्क के लिए सभी एमएल उद्योग खिलाड़ियों द्वारा अपनाया जा रहा है। कंपनी अपने FPGAs, Xeons और अन्य ML उत्पादों में bfloat16 का भी समर्थन करेगी। नर्वाना एनएनपी-एल1000 2019 में रिलीज के लिए निर्धारित है।
- ↑ "उपलब्ध TensorFlow ऑप्स | क्लाउड TPU | Google क्लाउड". Google Cloud. Retrieved 2018-05-23.
यह पृष्ठ क्लाउड टीपीयू पर उपलब्ध टेन्सरफ्लो पायथन एपीआई और ग्राफ़ ऑपरेटरों को सूचीबद्ध करता है।
- ↑ Elmar Haußmann (2018-04-26). "ResNet-50 पर Google के TPUv2 की Nvidia के V100 से तुलना करना". RiseML Blog. Archived from the original on 2018-04-26. Retrieved 2018-05-23.
क्लाउड टीपीयू के लिए, Google ने अनुशंसा की है कि हम TensorFlow 1.7.0 के साथ आधिकारिक TPU रिपॉजिटरी से bfloat16 कार्यान्वयन का उपयोग करें। टीपीयू और जीपीयू दोनों कार्यान्वयन संबंधित आर्किटेक्चर पर मिश्रित-सटीक गणना का उपयोग करते हैं और अधिकांश टेंसर को आधी-सटीकता के साथ संग्रहीत करते हैं।
- ↑ 10.0 10.1 Tensorflow Authors (2018-07-23). "ResNet-50 TPU पर BFloat16 का उपयोग कर रहा है". Google. Retrieved 2018-11-06.
- ↑ Joshua V. Dillon, Ian Langmore, Dustin Tran, Eugene Brevdo, Srinivas Vasudevan, Dave Moore, Brian Patton, Alex Alemi, Matt Hoffman, Rif A. Saurous (2017-11-28). टेंसरफ़्लो वितरण (Report). arXiv:1711.10604. Bibcode:2017arXiv171110604D. Accessed 2018-05-23.
All operations in टेंसरफ़्लो वितरणare numerically stable across half, single, and double floating-point precisions (as TensorFlow dtypes: tf.bfloat16 (truncated floating point), tf.float16, tf.float32, tf.float64). Class constructors have a validate_args flag for numerical asserts
{{cite report}}
: CS1 maint: multiple names: authors list (link) - ↑ "Livestream Day 1: Stage 8 (Google I/O '18) - YouTube". Google. 2018-05-08. Retrieved 2018-05-23.
In many models this is a drop-in replacement for float-32