Bfloat16 फ़्लोटिंग-पॉइंट प्रारूप

From Vigyanwiki
Revision as of 09:55, 28 July 2023 by Manidh (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Bfloat16 (मस्तिष्क फ़्लोटिंग पॉइंट)[1][2] फ़्लोटिंग-पॉइंट प्रारूप कंप्यूटर नंबर प्रारूप होता है जो कंप्यूटर मेमोरी में 16-बिट रखता है, यह फ़्लोटिंग मूलांक बिंदु का उपयोग करके संख्यात्मक मानों की विस्तृत गतिशील श्रृंखला का प्रतिनिधित्व करता है। यह प्रारूप मशीन लर्निंग और निकट-सेंसर कंप्यूटिंग में तेजी लाने के इरादे से 32-बिट आईईईई 754 एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप (बाइनरी 32) का छोटा (16-बिट) संस्करण है। इस प्रकार[3] यह 8 एक्सपोनेंट बिट्स को बनाए रखते हुए 32-बिट फ्लोटिंग-पॉइंट नंबरों की अनुमानित गतिशील सीमा को संरक्षित करता है, किन्तु बाइनरी32 प्रारूप के 24-बिट महत्व के अतिरिक्त केवल 8-बिट परिशुद्धता का समर्थन करता है। अतः एकल-परिशुद्धता 32-बिट फ़्लोटिंग-पॉइंट संख्याओं से अधिक, bfloat16 संख्याएँ पूर्णांक गणना के लिए अनुपयुक्त हैं, किन्तु यह उनका इच्छित उपयोग नहीं होता है। इस प्रकार Bfloat16 का उपयोग भंडारण आवश्यकताओं को कम करने और मशीन लर्निंग एल्गोरिदम की गणना गति को बढ़ाने के लिए किया जाता है।[4]

Bfloat16 प्रारूप गूगल ब्रेन द्वारा विकसित किया गया था, जो गूगल का कृत्रिम बुद्धिमत्ता अनुसंधान समूह होता है। इसका उपयोग इंटेल एआई प्रोसेसर में किया जाता है, जैसे नर्वाना एनएनपेन-एल1000, जिऑन प्रोसेसर (एवीएक्स-512 बीएफ16 एक्सटेंशन), ​​और इंटेल एफपीजीएएस,[5][6][7] गूगल क्लाउड टेन्सर प्रोसेसिंग इकाइयाँ (टीपीयू),[8][9][10] और टेन्सरफ्लो[10][11] एआरएमवी8.6-ए, एएमडी आरओसीएम, सीयूडीए, एप्पल एम2 और इसलिए एप्पल ए15 चिप्स और पश्चात् में, bfloat16 प्रारूप का भी समर्थन करते हैं। इस प्रकार इन प्लेटफार्मों पर, bfloat16 का उपयोग मिश्रित-त्रुटिहीन अंकगणित में भी किया जा सकता है, जहां bfloat16 संख्याओं को संचालित किया जा सकता है और व्यापक डेटा प्रकारों तक विस्तारित किया जा सकता है।

bfloat16 फ़्लोटिंग-पॉइंट प्रारूप

bfloat16 में निम्नलिखित प्रारूप है:

Bfloat16 प्रारूप, छोटा आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट होने के कारण, आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट से तेज़ प्रकार के रूपांतरण की अनुमति देता है। इस प्रकार Bfloat16 प्रारूप में रूपांतरण में, घातांक बिट्स को संरक्षित किया जाता है, जबकि एनएएन विशेष स्थितियों को अनदेखा करते हुए महत्व क्षेत्र को काट-छाँट (इस प्रकार 0 की ओर गोल करने के लिए ) द्वारा कम किया जा सकता है। अतः प्रतिपादक बिट्स को संरक्षित करने से 32-बिट फ्लोट की सीमा ≈ 10−38 से ≈ 3 × 1038 तक बनी रहती है।[12]

बिट्स को इस प्रकार रखा गया है:

आईईईई अर्ध परिशुद्धता 16-बिट फ्लोट
संकेत प्रतिपादक (5 बिट) फलन (10 बिट)
  ┃ ┌───────┐ ┌─────────────────┐
 0   0   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
15 14 10 9 0
आईईईई 754 एकल परिशुद्धता 32-बिट फ्लोट
संकेत प्रतिपादक (8 बिट) फलन (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
bfloat16
संकेत प्रतिपादक (8 बिट) फलन (7 बिट)
  ┃ ┌─────────────┐ ┌───────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0 
15 14 7 6 0
एनवीडिया का टेन्सरफ्लोट
संकेत प्रतिपादक (8 बिट) फलन (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
एएमडी का एफपी24 प्रारूप
संकेत प्रतिपादक (7 बिट) फलन (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
पिक्सर का पीएक्सआर24 प्रारूप
संकेत प्रतिपादक (8 बिट) फलन (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

आदर्श लेख

  •   एस: संकेत
  •   एफ: अंश (दोनों प्रारूपों में महत्वपूर्ण से पीछे)।
  •   एफ: 32-बिट में अंश (अनुगामी महत्व) एकल परिशुद्धता (तुलनात्मक)

घातांक एन्कोडिंग

Bfloat16 बाइनरी फ्लोटिंग-पॉइंट एक्सपोनेंट को ऑफसेट-बाइनरी प्रतिनिधित्व का उपयोग करके एन्कोड किया गया है, जिसमें शून्य ऑफसेट 127 है, अतः आईईईई 754 मानक में प्रतिपादक पूर्वाग्रह के रूप में भी जाना जाता है।

  • मिन = 01एच−7एफएच = −126
  • मैक्स = एफईएच−7एफएच = 127
  • घातांक पूर्वाग्रह = 7एफएच = 127

इस प्रकार, ऑफसेट-बाइनरी प्रतिनिधित्व द्वारा परिभाषित वास्तविक प्रतिपादक प्राप्त करने के लिए, 127 के ऑफसेट को प्रतिपादक क्षेत्र के मूल्य से घटाना होता है।

घातांक क्षेत्र का न्यूनतम और अधिकतम मान (ओओ)एच और (एफएफ)एच की विशेष रूप से व्याख्या की जाती है, जैसे आईईईई 754 मानक प्रारूपों में।

प्रतिपादक महत्व शून्य सार्थकतथा गैर-शून्य समीकरण
ओओएच शुन्य, −0 असामान्य संख्याएँ (−1)signbit×2−126× 0.significandbits
01एच, ..., एफईएच सामान्यीकृत मूल्य (−1)signbit×2exponentbits−127× 1.significandbits
एफएफएच ±अनंतता एनएएन (शांत, संकेत)

न्यूनतम धनात्मक सामान्य मान 2−126 ≈ 1.18 × 10−38 है और न्यूनतम धनात्मक (असामान्य) मान 2−126−7 = 2−133 ≈9.2 × 10−41 है।

विशेष मानों का एन्कोडिंग

धनात्मक और ऋणात्मक अनंत

जैसे कि आईईईई 754 में, धनात्मक और ऋणात्मक अनंत को उनके संबंधित साइन बिट्स, सभी 8 एक्सपोनेंट बिट्स समूह (एफएफहेक्स) और सभी महत्वपूर्ण बिट्स शून्य के साथ दर्शाया जाता है। स्पष्ट रूप से,

val    s_exponent_signcnd
+inf = 0_11111111_0000000
-inf = 1_11111111_0000000

कोई संख्या नहीं

जैसे आईईईई 754 में, एनएएन मानों को या तो साइन बिट, सभी 8 एक्सपोनेंट बिट्स समूह (एफएफहेक्स) के साथ दर्शाया जाता है, और सभी महत्वपूर्ण बिट्स शून्य नहीं होता हैं। स्पष्ट रूप से,

val    s_exponent_signcnd
+NaN = 0_11111111_klmnopq
-NaN = 1_11111111_klmnopq

जहां के, आई, एम, एन, ओ, पी, या क्यू में से कम से कम 1 होता है। इस प्रकार आईईईई 754 की भांति, एनएएन मान शांत या सिग्नलिंग हो सकते हैं, चूंकि सितंबर, सन्न 2018 तक bfloat16 एनएएनएस सिग्नलिंग का कोई ज्ञात उपयोग नहीं होता है।

सीमा और परिशुद्धता

Bfloat16 को 32-बिट आईईईई 754 सिंगल-प्रिसिजन फ़्लोटिंग-पॉइंट प्रारूप (बाइनरी 32) से संख्या सीमा बनाए रखने के लिए डिज़ाइन किया गया है, जबकि परिशुद्धता को 24 बिट्स से घटाकर 8 बिट्स किया गया है। इसका तात्पर्य यह है कि परिशुद्धता दो और तीन दशमलव अंकों के मध्य होती है, और bfloat16 लगभग 3.4 × 1038 तक परिमित मानों का प्रतिनिधित्व कर सकता है।

उदाहरण

यह उदाहरण फ्लोटिंग-पॉइंट मान के हेक्साडेसिमल और बाइनरी संख्या में बिट प्रतिनिधित्व में दिए गए हैं। इसमें संकेत, (पक्षपातपूर्ण) प्रतिपादक और महत्व सम्मिलित होता हैं।

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 × 1038 है, जो (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

एनएएनएस

ffc1 = x 11111111 1000001 => qएनएएन
ff81 = x 11111111 0000001 => sएनएएन

यह भी देखें

संदर्भ

  1. 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).
  2. 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.
  3. 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.
  4. 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).
  5. Khari Johnson (2018-05-23). "इंटेल ने त्वरित एआई प्रशिक्षण के लिए नर्वाना न्यूरल नेट एल-1000 का अनावरण किया". VentureBeat. Retrieved 2018-05-23. ...इंटेल हमारे AI उत्पाद श्रृंखलाओं में bfloat16 समर्थन का विस्तार करेगा, जिसमें Intel Xeon प्रोसेसर और Intel FPGAs शामिल हैं।
  6. Michael Feldman (2018-05-23). "इंटेल ने एआई पोर्टफोलियो के लिए नया रोडमैप पेश किया". TOP500 Supercomputer Sites. Retrieved 2018-05-23. इंटेल ने Xeon और FPGA लाइनों सहित अपने सभी AI उत्पादों में इस प्रारूप का समर्थन करने की योजना बनाई है
  7. Lucian Armasu (2018-05-23). "इंटेल 2019 में अपना पहला न्यूरल नेटवर्क प्रोसेसर स्प्रिंग क्रेस्ट लॉन्च करेगा". Tom's Hardware. Retrieved 2018-05-23. इंटेल ने कहा कि एनएनपी-एल1000 बीफ्लोट16 को भी सपोर्ट करेगा, जो एक संख्यात्मक प्रारूप है जिसे तंत्रिका नेटवर्क के लिए सभी एमएल उद्योग खिलाड़ियों द्वारा अपनाया जा रहा है। कंपनी अपने FPGAs, Xeons और अन्य ML उत्पादों में bfloat16 का भी समर्थन करेगी। नर्वाना एनएनपी-एल1000 2019 में रिलीज के लिए निर्धारित है।
  8. "उपलब्ध TensorFlow ऑप्स | क्लाउड TPU | Google क्लाउड". Google Cloud. Retrieved 2018-05-23. यह पृष्ठ क्लाउड टीपीयू पर उपलब्ध टेन्सरफ्लो पायथन एपीआई और ग्राफ़ ऑपरेटरों को सूचीबद्ध करता है।
  9. 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. 10.0 10.1 Tensorflow Authors (2018-07-23). "ResNet-50 TPU पर BFloat16 का उपयोग कर रहा है". Google. Retrieved 2018-11-06.
  11. 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)
  12. "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