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

From alpha
Jump to navigation Jump to search

Bfloat16 (ब्रेन फ़्लोटिंग पॉइंट)[1][2] फ़्लोटिंग-पॉइंट फ़ॉर्मेट स्मृति में 16-बिट पर कब्जा करने वाला कंप्यूटर संख्या प्रारूप है; यह तैरनेवाला स्थल का उपयोग करके संख्यात्मक मानों की एक विस्तृत गतिशील श्रेणी का प्रतिनिधित्व करता है। यह प्रारूप 32-बिट एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप का एक छोटा (16-बिट) संस्करण है। IEEE 754 सिंगल-प्रिसिजन फ्लोटिंग-पॉइंट फॉर्मेट (बाइनरी32) हार्डवेयर एक्सिलरेशन यंत्र अधिगम और बुद्धिमान सेंसर के इरादे से। सेंसर कंप्यूटिंग।[3] यह 8 एक्सपोनेंट पूर्वाग्रह को बनाए रखते हुए 32-बिट फ़्लोटिंग-पॉइंट नंबरों की अनुमानित गतिशील रेंज को संरक्षित करता है, लेकिन बाइनरी32 प्रारूप के 24-बिट महत्व के बजाय केवल 8-बिट परिशुद्धता का समर्थन करता है। एकल-सटीक 32-बिट फ्लोटिंग-पॉइंट नंबरों से अधिक, bfloat16 नंबर पूर्णांक गणनाओं के लिए अनुपयुक्त हैं, लेकिन यह उनका इच्छित उपयोग नहीं है। Bfloat16 का उपयोग भंडारण आवश्यकताओं को कम करने और मशीन लर्निंग एल्गोरिदम की गणना गति को बढ़ाने के लिए किया जाता है।[4] bfloat16 प्रारूप Google ब्रेन द्वारा विकसित किया गया था, जो कि Google का एक आर्टिफिशियल इंटेलिजेंस रिसर्च ग्रुप है।[5] Bfloat16 प्रारूप का उपयोग Intel AI त्वरक में किया जाता है, जैसे Nervana Systems NNP-L1000, Xeon प्रोसेसर (AVX-512 BF16 एक्सटेंशन), ​​और Intel FPGAs,[6][7][8] Google क्लाउड टेंसर प्रोसेसिंग यूनिट,[9][10][11] और टेंसरफ्लो[11][12] ARM आर्किटेक्चर#ARMv8.6-A|ARMv8.6-A, रेफरी>"Armv8-A के लिए BFloat16 एक्सटेंशन". community.arm.com. Retrieved 2019-08-30.</ref> AMD OpenCL#ओपन सोर्स कार्यान्वयन, रेफरी>"आरओसीएम संस्करण इतिहास". github.com. Retrieved 2019-10-23.</ref> और CUDA रेफरी>"CUDA लाइब्रेरी ब्लोट16 इंट्रिंसिक्स".</ref> भी bfloat16 प्रारूप का समर्थन करता है। इन प्लेटफार्मों पर, bfloat16 का उपयोग मिश्रित-परिशुद्धता अंकगणित में भी किया जा सकता है, जहाँ bfloat16 संख्याओं को संचालित किया जा सकता है और व्यापक डेटा प्रकारों में विस्तारित किया जा सकता है।

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

bfloat16 का निम्न प्रारूप है:

  • साइन बिट: 1 बिट
  • प्रतिपादक चौड़ाई: 8 बिट्स
  • महत्व सटीक (अंकगणित): 8 बिट्स (7 स्पष्ट रूप से संग्रहीत), शास्त्रीय एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप में 24 बिट्स के विपरीत

bfloat16 प्रारूप, एक छोटा एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप है। IEEE 754 एकल-परिशुद्धता 32-बिट फ़्लोट, IEEE 754 एकल-परिशुद्धता 32-बिट फ़्लोट से तेज़ प्रकार रूपांतरण की अनुमति देता है; bfloat16 प्रारूप में रूपांतरण में, एक्सपोनेंट बिट्स को संरक्षित किया जाता है, जबकि महत्व क्षेत्र को ट्रंकेशन द्वारा कम किया जा सकता है (इस प्रकार IEEE 754 # राउंडिंग नियमों के अनुरूप), NaN विशेष मामले की अनदेखी करते हुए। एक्सपोनेंट बिट्स को संरक्षित करना ≈ 10 की 32-बिट फ्लोट की रेंज को बनाए रखता है−38 से ≈ 3 × 1038.[13] बिट्स निम्नानुसार रखे गए हैं:

IEEE half-precision 16-bit float
sign exponent (5 bit) fraction (10 bit)
  ┃ ┌───────┐ ┌─────────────────┐
 0   0   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
15 14 10 9 0
IEEE 754 single-precision 32-bit float
sign exponent (8 bit) fraction (23 bit)
  ┃ ┌─────────────┐ ┌───────────────────────────────────────────┐
 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
sign exponent (8 bit) fraction (7 bit)
  ┃ ┌─────────────┐ ┌───────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0 
15 14 7 6 0
NVidia's TensorFloat
sign exponent (8 bit) fraction (10 bit)
  ┃ ┌─────────────┐ ┌─────────────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
18 17 10 9 0
AMD's fp24 format
sign exponent (7 bit) fraction (16 bit)
  ┃ ┌───────────┐ ┌─────────────────────────────┐
 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
Pixar's PXR24 format
sign exponent (8 bit) fraction (15 bit)
  ┃ ┌─────────────┐ ┌───────────────────────────┐
 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
  •   F: fraction (trailing significand) in both formats
  •   f: fraction (trailing significand) in 32-bit single precision (comparative)

एक्सपोनेंट एन्कोडिंग

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

  • min = 01H-7एफH = -126
  • औरmax = एफईH-7एफH = 127
  • प्रतिपादक पूर्वाग्रह = 7FH = 127

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

एक्सपोनेंट फ़ील्ड का न्यूनतम और अधिकतम मान (00H और एफएफH) की विशेष रूप से व्याख्या की जाती है, जैसे IEEE 754 मानक स्वरूपों में।

Exponent Significand zero Significand non-zero Equation
00H zero, −0 subnormal numbers (−1)signbit×2−126× 0.significandbits
01H, ..., FEH normalized value (−1)signbit×2exponentbits−127× 1.significandbits
FFH ±infinity NaN (quiet, signaling)

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

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

सकारात्मक और नकारात्मक अनंत

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

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


संख्या नहीं

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

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

जहां k, l, m, n, o, p, या q में से कम से कम एक 1 है। IEEE 754 के साथ, NaN मान शांत या सिग्नलिंग हो सकते हैं, हालांकि सितंबर 2018 तक bfloat16 NaNs सिग्नलिंग के कोई ज्ञात उपयोग नहीं हैं।

रेंज और सटीक

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

उदाहरण

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

3f80 = 0 01111111 0000000 = 1
सी000 = 1 10000000 0000000 = -2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (bfloat16 परिशुद्धता में अधिकतम परिमित धनात्मक मान)
0080 = 0 00000001 0000000 = 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 = अनंत
ff80 = 1 11111111 0000000 = - अनंत

विशेष मूल्य

4049 = 0 10000000 1001001 = 3.140625 ≈ π (पी)
3eab = 0 01111101 0101011 = 0.333984375 ≈ 1/3

नाएन

ffc1 = x 11111111 1000001 => qNaN
ff81 = x 11111111 0000001 => एसएनएएन

यह भी देखें

संदर्भ

  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. Abadi, Martín; Barham, Paul; Chen, Jianmin; Chen, Zhifeng; Davis, Andy; Dean, Jeffrey; Devin, Matthieu; Ghemawat, Sanjay; Irving, Geoffrey; Isard, Michael; Kudlur, Manjunath; Levenberg, Josh; Monga, Rajat; Moore, Sherry; Murray, Derek G.; Steiner, Benoit; Tucker, Paul; Vasudevan, Vijay; Warden, Pete; Wicke, Martin; Yu, Yuan; Zheng, Xiaoqiang (2016). "TensorFlow: A System for Large-Scale Machine Learning" (PDF). arXiv:1605.08695. {{cite journal}}: Cite journal requires |journal= (help)
  6. Khari Johnson (2018-05-23). "इंटेल ने त्वरित एआई प्रशिक्षण के लिए नर्वाना न्यूरल नेट एल-1000 का अनावरण किया". VentureBeat. Retrieved 2018-05-23. ...Intel, Intel Xeon प्रोसेसर और Intel FPGAs सहित हमारे AI उत्पाद लाइनों में bfloat16 समर्थन का विस्तार करेगा।
  7. Michael Feldman (2018-05-23). "इंटेल ने एआई पोर्टफोलियो के लिए नया रोडमैप पेश किया". TOP500 Supercomputer Sites. Retrieved 2018-05-23. इंटेल की योजना अपने सभी AI उत्पादों में इस प्रारूप का समर्थन करने की है, जिसमें Xeon और FPGA लाइनें शामिल हैं
  8. Lucian Armasu (2018-05-23). "इंटेल 2019 में अपना पहला न्यूरल नेटवर्क प्रोसेसर स्प्रिंग क्रेस्ट लॉन्च करेगा". Tom's Hardware. Retrieved 2018-05-23. Intel ने कहा कि NNP-L1000 bfloat16 को भी सपोर्ट करेगा, एक न्यूमेरिकल फॉर्मेट जिसे न्यूरल नेटवर्क के लिए सभी ML इंडस्ट्री प्लेयर्स द्वारा अपनाया जा रहा है। कंपनी अपने FPGAs, Xeons और अन्य ML उत्पादों में bfloat16 का भी समर्थन करेगी। Nervana NNP-L1000 2019 में रिलीज होने वाली है।
  9. "उपलब्ध TensorFlow ऑप्स | क्लाउड TPU | Google क्लाउड". Google Cloud. Retrieved 2018-05-23. यह पृष्ठ क्लाउड टीपीयू पर उपलब्ध TensorFlow Python APIs और ग्राफ़ ऑपरेटरों को सूचीबद्ध करता है।
  10. Elmar Haußmann (2018-04-26). "Google के TPUv2 की तुलना ResNet-50 पर Nvidia के V100 से करना". RiseML Blog. Archived from the original on 2018-04-26. Retrieved 2018-05-23. क्लाउड टीपीयू के लिए, Google ने सिफारिश की है कि हम TensorFlow 1.7.0 के साथ आधिकारिक टीपीयू रिपॉजिटरी से bfloat16 कार्यान्वयन का उपयोग करें। टीपीयू और जीपीयू दोनों कार्यान्वयन संबंधित वास्तुकला पर मिश्रित-सटीक संगणना का उपयोग करते हैं और अधिकांश टेंसरों को अर्ध-परिशुद्धता के साथ संग्रहीत करते हैं।
  11. 11.0 11.1 Tensorflow Authors (2018-07-23). "TPU पर BFloat16 का उपयोग करते हुए ResNet-50". Google. Retrieved 2018-11-06.
  12. 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)
  13. "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