Format de coma flotant Bfloat16
format de nombre de coma flotant optimitzat per a l'aprenentatge automàtic From Wikipedia, the free encyclopedia
Remove ads
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.
Remove ads
Format de coma flotant bfloat16
bfloat16 té el format següent:
- Bit de signe: 1 bit
- Amplada de l'exponent: 8 bits
- Precisió significativa: 8 bits (7 emmagatzemats explícitament, amb un bit inicial implícit), en contraposició als 24 bits d'un format clàssic de coma flotant de precisió simple
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
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.
Remove ads
Exemples
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ó.
Remove ads
Referències
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads