Vés al contingut

Format de coma flotant Bfloat16

De la Viquipèdia, l'enciclopèdia lliure
Format de dades bfloat 16

El format de coma flotant bfloat16 (brain floating point)[1][2] és un format de nombres informàtics que ocupa 16 bits a la memòria de l'ordinador; representa un ampli rang dinàmic de valors numèrics mitjançant un punt de base flotant. Aquest format és una versió escurçada (16 bits) del format de coma flotant de simple precisió IEEE 754 de 32 bits (binary32) amb la intenció d'accelerar l'aprenentatge automàtic i la computació de sensors propers.[3] Preserva el rang dinàmic aproximat dels nombres de coma flotant de 32 bits mantenint 8 bits d'exponent, però només admet una precisió de 8 bits en lloc del significand de 24 bits del format binary32. Més que els nombres de coma flotant de 32 bits de precisió simple, els nombres bfloat16 no són adequats per a càlculs d'enters, però aquest no és el seu ús previst. Bfloat16 s'utilitza per reduir els requisits d'emmagatzematge i augmentar la velocitat de càlcul dels algoritmes d'aprenentatge automàtic.[4]

El format bfloat16 va ser desenvolupat per Google Brain, un grup de recerca en intel·ligència artificial de Google. S'utilitza en moltes CPU, GPU i processadors d'IA, com ara els processadors Intel Xeon (extensions AVX-512 BF16), la GPU Intel Data Center, l'Intel Nervana NNP-L1000, les FPGA d'Intel,[5][6][7] AMD Zen, AMD Instinct, les GPU NVIDIA, les TPU de Google Cloud,[8][9][10] AWS Inferentia, AWS Trainium, ARMv8.6-A,[11] i els xips M2[12] i, per tant, A15 d'Apple i posteriors. Moltes biblioteques admeten bfloat16, com ara CUDA,[13] Intel oneAPI Math Kernel Library, AMD ROCM,[14] AMD Optimizing CPU Libraries, PyTorch i TensorFlow.[10] En aquestes plataformes, bfloat16 també es pot utilitzar en aritmètica de precisió mixta, on es pot operar amb els nombres bfloat16 i expandir-los a tipus de dades més amplis.

Format de coma flotant bfloat16

[modifica]

bfloat16 té el format següent:

El format bfloat16, que és un nombre float de 32 bits de precisió simple IEEE 754 abreujat, permet una conversió ràpida des de i cap a un nombre float de 32 bits de precisió simple IEEE 754; en la conversió al format bfloat16, els bits d'exponent es conserven mentre que el camp significand es pot reduir mitjançant truncament (corresponent així a l'arrodoniment cap a 0) o altres mecanismes d'arrodoniment, ignorant el cas especial de NaN. Preservar els bits d'exponent manté el rang del nombre flotant de 32 bits de ≈ 10−38 a ≈ 3 × 1038.[15]

Els bits estan disposats de la següent manera:

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
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-32 (19 bits)
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
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

Codificació d'exponents

[modifica]

L'exponent de coma flotant binari bfloat16 es codifica mitjançant una representació offset-binary, amb el offset zero de 127; també conegut com a biaix d'exponent a l'estàndard IEEE 754.

  • E mín = 01 H −7F H = −126
  • E màx = FE H −7F H = 127
  • Biaix d'exponent = 7F H = 127

Per tant, per obtenir l'exponent real tal com es defineix per la representació offset-binary, cal restar el desplaçament de 127 del valor del camp d'exponent.

Els valors mínim i màxim del camp d'exponent (00 H i FF H) s'interpreten de manera especial, com en els formats estàndard IEEE 754.

El valor normal positiu mínim és 2−126 ≈ 1,18 × 10−38 i el valor positiu mínim (subnormal) és 2−126−7 = 2−133 ≈ 9,2 × 10−41.

Exponent Significant zero Significant diferent de zero Equació
00 H zero, −0 nombres subnormals (−1) bit de signe ×2 −126 × 0 bits de significació
01 H,... , FE H valor normalitzat (−1) bit de signe ×2 bits d'exponent−127 × 1 bits de significació
FF H ± infinit NaN (silenciós, senyalització)

Exemples

[modifica]

Aquests exemples es donen en representació de bits, en hexadecimal i binari, del valor de coma flotant. Això inclou el signe, l'exponent (biaixat) i el significand.

3f80 = 0 01111111 0000000 = 1

c000 = 1 10000000 0000000 = −2

7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3,38953139 × 1038 (valor positiu finit màxim en precisió bfloat16) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (valor positiu mínim normalitzat en bfloat16 de precisió i coma flotant de precisió simple)

El valor finit positiu màxim d'un nombre bfloat16 normal és 3,38953139 × 10^38, lleugerament per sota de (2^24 − 1) × 2−23 × 2^127 = 3,402823466 × 10^38, el valor finit positiu màxim representable en simple precisió.

Referències

[modifica]
  1. Teich, Paul. «Tearing Apart Google's TPU 3.0 AI Coprocessor» (en anglès). The Next Platform, 10-05-2018. [Consulta: 11 agost 2020].
  2. Wang, Shibo. «BFloat16: The secret to high performance on Cloud TPUs» (en anglès). Google Cloud, 23-08-2019. [Consulta: 11 agost 2020].
  3. Tagliavini, Giuseppe. «A transprecision floating-point platform for ultra-low power computing». A: 2018 Design, Automation & Test in Europe Conference & Exhibition (DATE) (en anglès), 2018, p. 1051–1056. DOI 10.23919/DATE.2018.8342167. ISBN 978-3-9819263-0-9. 
  4. Dr. Ian Cutress. «Intel': Cooper lake Plans: Why is BF16 Important?» (en anglès), 17-03-2020. [Consulta: 12 maig 2020].
  5. Khari Johnson. «Intel unveils Nervana Neural Net L-1000 for accelerated AI training» (en anglès). VentureBeat, 23-05-2018. [Consulta: 23 maig 2018].
  6. Michael Feldman. «Intel Lays Out New Roadmap for AI Portfolio» (en anglès). TOP500 Supercomputer Sites, 23-05-2018. [Consulta: 23 maig 2018].
  7. Lucian Armasu. «Intel To Launch Spring Crest, Its First Neural Network Processor, In 2019» (en anglès). Tom's Hardware, 23-05-2018. [Consulta: 23 maig 2018].
  8. «Available TensorFlow Ops | Cloud TPU | Google Cloud» (en anglès). Google Cloud. [Consulta: 23 maig 2018].
  9. Elmar Haußmann. «Comparing Google's TPUv2 against Nvidia's V100 on ResNet-50» (en anglès). RiseML Blog, 26-04-2018. Arxivat de l'original el 2018-04-26. [Consulta: 23 maig 2018].
  10. 10,0 10,1 Tensorflow Authors. «ResNet-50 using BFloat16 on TPU» (en anglès). Google, 23-07-2018. [Consulta: 6 novembre 2018].
  11. «BFloat16 extensions for Armv8-A» (en anglès). community.arm.com, 29-08-2019. [Consulta: 30 agost 2019].
  12. «AArch64: add support for newer Apple CPUs · llvm/llvm-project@677da09» (en anglès). GitHub. [Consulta: 8 maig 2023].
  13. «CUDA Library bloat16 Intrinsics» (en anglès).
  14. «ROCm version history» (en anglès). github.com. [Consulta: 23 octubre 2019].
  15. «Livestream Day 1: Stage 8 (Google I/O '18) - YouTube». Google, 08-05-2018. [Consulta: 23 maig 2018].