Bfloat16 formát s plovoucí desetinnou čárkou - bfloat16 floating-point format - Wikipedia
Plovoucí bod formáty |
---|
IEEE 754 |
|
jiný |
The bfloat16 (Mozek Plovoucí bod)[1][2] formát s plovoucí desetinnou čárkou je formát čísla počítače obsazení 16 bitů v paměť počítače; představuje široký dynamický rozsah číselných hodnot pomocí a plovoucí radiální bod. Tento formát je zkrácená (16bitová) verze 32bitové Formát s plovoucí desetinnou čárkou s jednou přesností IEEE 754 (binary32) se záměrem zrychlování strojové učení a výpočet blízkého snímače.[3] Zachovává přibližný dynamický rozsah 32bitových čísel s plovoucí desetinnou čárkou zachováním 8 exponentové bity, ale podporuje pouze 8bitovou přesnost namísto 24bitové významně formátu binary32. Více než 32bitová čísla s plovoucí desetinnou čárkou s přesnou přesností jsou čísla bfloat16 nevhodná pro celočíselné výpočty, ale nejde o jejich zamýšlené použití. Bfloat16 se používá ke snížení požadavků na úložiště a zvýšení rychlosti výpočtu algoritmů strojového učení.[4]
Formát bfloat16 se používá v Intel Procesory AI, jako Nervana NNP-L1000, Xeon procesory (AVX-512 BF16) a Intel FPGA,[5][6][7] Google Cloud TPU,[8][9][10] a TensorFlow.[10][11] ARMv8.6-A podporuje také formát bfloat16.[12] Od října 2019 AMD přidal do svého formátu podporu ROCm knihovny.[13]
bfloat16 formát s plovoucí desetinnou čárkou
bfloat16 má následující formát:
- Podepsat bit: 1 bit
- Exponent šířka: 8 bitů
- Významné přesnost: 8 bitů (7 explicitně uloženo), na rozdíl od 24 bitů v klasickém formátu s plovoucí desetinnou čárkou s jednou přesností
Formát bfloat16 je zkrácen Jedna přesnost IEEE 754 32-bit float, umožňuje rychlé konverze do a z 32bitového plováku s jednou přesností IEEE 754; při převodu do formátu bfloat16 jsou exponentové bity zachovány, zatímco významové pole lze zmenšit zkrácením (což odpovídá zaokrouhlit na 0 ), ignoruje NaN speciální případ. Zachováním exponentových bitů se udrží rozsah 32bitového plováku ≈ 10−38 až ≈ 3 × 1038.[14]
Bity jsou rozloženy následovně:
podepsat | exponent (5 bitů) | zlomek (10 bitů) | ||||||||||||||
┃ | ┌────────────┐ | ┌─────────────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 10 | 9 | 0 |
podepsat | exponent (8 bitů) | zlomek (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 |
podepsat | exponent (8 bitů) | zlomek (7 bitů) | ||||||||||||||
┃ | ┌─────────────────────┐ | ┌────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 7 | 6 | 0 |
podepsat | exponent (8 bitů) | zlomek (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 |
podepsat | exponent (7 bitů) | zlomek (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 |
Kontrastujte s bfloat16 a jednoduchou přesností
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 |
Legenda
- S: podepsat
- E: exponent
- F: zlomek (na konci významně ) v obou formátech
- f: zlomek (koncový význam) v jediná přesnost pouze
Kódování komponent
Binární exponent s plovoucí desetinnou čárkou bfloat16 je kódován pomocí offset-binární reprezentace, přičemž nulový offset je 127; také známý jako zkreslení exponentů ve standardu IEEE 754.
- Emin = 01H-7FH = −126
- Emax = FEH-7FH = 127
- Vychýlení exponentů = 7FH = 127
Abychom tedy získali skutečný exponent, jak je definován offsetově-binární reprezentací, musí se offset 127 odečíst od hodnoty pole exponentu.
Minimální a maximální hodnoty pole exponentu (00H a FFH) jsou interpretovány speciálně, jako ve standardních formátech IEEE 754.
Exponent | Významná nula | Významná nenulová | Rovnice |
---|---|---|---|
00H | nula, −0 | podnormální čísla | (−1)signbit×2−126× 0.významnébity |
01H, ..., FEH | normalizovaná hodnota | (−1)signbit×2exponentbitů −127× 1.významnébity | |
FFH | ±nekonečno | NaN (tichý, signalizační) |
Minimální kladná normální hodnota je 2−126 ≈ 1.18 × 10−38 a minimální kladná (podnormální) hodnota je 2−126−7 = 2−133 ≈ 9.2 × 10−41.
Kódování speciálních hodnot
Pozitivní a negativní nekonečno
Stejně jako v IEEE 754, jsou kladná a záporná nekonečna reprezentována jejich odpovídajícími znaménkové bity, nastaveno všech 8 bitů exponentů (FFhex) a všechny významné bity nula. Výslovně,
val s_exponent_signcnd + inf = 0_11111111_0000000-inf = 1_11111111_0000000
Není to číslo
Stejně jako v IEEE 754, NaN hodnoty jsou reprezentovány buď znaménkovým bitem, nastaveno všech 8 bitů exponentů (FFhex) a ne všechny významové bity nula. Výslovně,
val s_exponent_signcnd + NaN = 0_11111111_klmnopq-NaN = 1_11111111_klmonpq
kde alespoň jeden z k, l, m, n, o, p, nebo q je 1. Stejně jako u IEEE 754 mohou být hodnoty NaN tiché nebo signalizační, ačkoli od září 2018 nejsou známa žádná použití signalizace bfloat16 NaN.
Rozsah a přesnost
Bfloat16 je navržen tak, aby udržoval rozsah čísel od 32 bitů Formát s plovoucí desetinnou čárkou s jednou přesností IEEE 754 (binary32), přičemž se snižuje přesnost z 24 bitů na 8 bitů. To znamená, že přesnost je mezi dvěma a třemi desetinnými číslicemi a bfloat16 může představovat konečné hodnoty až do přibližně 3,4 × 1038.
Příklady
Tyto příklady jsou uvedeny v bitech zastoupení, v hexadecimální a binární, hodnoty s plovoucí desetinnou čárkou. To zahrnuje znaménko, (zkreslený) exponent a význam.
3f80 = 0 01111111 0000000 = 1c000 = 1 10000000 0000000 = -2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (maximální konečná kladná hodnota v přesnosti bfloat16) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (min. normalizovaná kladná hodnota v přesnosti bfloat16 a plovoucí desetinnou čárkou s jednou přesností)
Maximální kladná konečná hodnota normálního čísla bfloat16 je 3,38953139 × 1038, mírně pod (224 − 1) × 2−23 × 2127 = 3.402823466 × 1038, maximální konečná kladná hodnota reprezentovatelná v jediné přesnosti.
Nuly a nekonečna
0000 = 0 00000000 0000000 = 08000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = nekonečnoff80 = 1 11111111 0000000 = − nekonečno
Speciální hodnoty
4049 = 0 10000000 1001001 = 3,140625 ≈ π (pi) 3eab = 0 01111101 0101011 = 0,333984375 ≈ 1/3
NaNs
ffc1 = x 11111111 1000001 => qNaNff81 = x 11111111 0000001 => sNaN
Viz také
- Formát s plovoucí desetinnou čárkou s poloviční přesností: 16bitový float s 1bitovým znaménkem, 5bitový exponent a 11bitový význam, jak je definováno IEEE 754
- ISO / IEC 10967 „Jazykově nezávislá aritmetika
- Primitivní datový typ
- Minifloat
Reference
- ^ Teich, Paul (10.05.2018). „Roztrhání koprocesoru AI TPU 3.0 od Googlu“. Další platforma. Citováno 2020-08-11.
Google vyvinul vlastní interní formát s plovoucí desetinnou čárkou zvaný „bfloat“ pro „brain floating point“ (po Google Brain).
- ^ Wang, Shibo; Kanwar, Pankaj (2019-08-23). „BFloat16: Tajemství vysokého výkonu na cloudových TPU“. Google Cloud. Citováno 2020-08-11.
Tento vlastní formát s plovoucí desetinnou čárkou se nazývá „Brain Floating Point Format“ nebo zkráceně „bfloat16“. Název vychází z „Google Brain“, což je výzkumná skupina pro umělou inteligenci ve společnosti Google, kde vznikla myšlenka tohoto formátu.
- ^ Tagliavini, Giuseppe; Mach, Stefan; Rossi, Davide; Marongiu, Andrea; Benin, Luca (2018). "Platforma s plovoucí desetinnou čárkou s přesností pro výpočet ultra-malého výkonu". Konference a výstava 2018 Design, Automation & Test in Europe (DATUM). 1051–1056. arXiv:1711.10374. doi:10.23919 / DATE.2018.8342167. ISBN 978-3-9819263-0-9.
- ^ Dr. Ian Cutress (2020-03-17). „Intel: Plány Cooper Lake: Proč je BF16 důležitý?“. Citováno 2020-05-12.
Standard bfloat16 je cílený způsob reprezentace čísel, která dávají rozsah plného 32bitového čísla, ale v datové velikosti 16bitového čísla udržuje přesnost blízkou nule, ale je o něco volnější s přesností blízkou meze normy. Standard bfloat16 má mnoho využití uvnitř algoritmů strojového učení, protože nabízí lepší přesnost hodnot uvnitř algoritmu a zároveň poskytuje dvojnásobek dat v jakékoli dané datové sadě (nebo zdvojnásobení rychlosti v těchto výpočtových sekcích).
- ^ Khari Johnson (2018-05-23). „Intel představuje Nervana Neural Net L-1000 pro zrychlené školení AI“. VentureBeat. Citováno 2018-05-23.
... Intel rozšíří podporu bfloat16 napříč našimi produktovými řadami AI, včetně procesorů Intel Xeon a Intel FPGA.
- ^ Michael Feldman (2018-05-23). „Intel uvádí nový plán pro portfolio AI“. TOP500 superpočítačových webů. Citováno 2018-05-23.
Intel plánuje podporovat tento formát u všech svých produktů AI, včetně linek Xeon a FPGA
- ^ Lucian Armasu (2018-05-23). „Společnost Intel zahájí Spring Crest, svůj první procesor neuronové sítě, v roce 2019“. Tomův hardware. Citováno 2018-05-23.
Intel uvedl, že NNP-L1000 bude také podporovat bfloat16, numerický formát, který je přijímán všemi hráči ML průmyslu pro neuronové sítě. Společnost bude také podporovat bfloat16 ve svých FPGA, Xeons a dalších produktech ML. Vydání Nervany NNP-L1000 je naplánováno na rok 2019.
- ^ „Dostupné TensorFlow Ops | Cloud TPU | Google Cloud“. Google Cloud. Citováno 2018-05-23.
Tato stránka obsahuje seznam API a grafických operátorů TensorFlow Pythonu dostupných na cloudovém TPU.
- ^ Elmar Haußmann (26.04.2018). „Srovnání TPUv2 společnosti Google s Nvidia V100 na ResNet-50“. Blog RiseML. Archivovány od originál dne 26.04.2018. Citováno 2018-05-23.
U cloudového TPU Google doporučil použít implementaci bfloat16 z oficiálního úložiště TPU s TensorFlow 1.7.0. Implementace TPU i GPU využívají výpočet smíšené přesnosti na příslušné architektuře a ukládají většinu tenzorů s poloviční přesností.
- ^ A b Autoři Tensorflow (2018-07-23). „ResNet-50 pomocí BFloat16 na TPU“. Google. Citováno 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). Distribuce TensorFlow (zpráva). arXiv:1711.10604. Bibcode:2017arXiv171110604D. Přístupné 23. 5. 2018.
Všechny operace v distribucích TensorFlow jsou numericky stabilní napříč přesností poloviny, jednoduché a dvojité plovoucí desetinné čárky (jako detypy TensorFlow: tf.bfloat16 (zkrácený plovoucí bod), tf.float16, tf.float32, tf.float64). Konstruktory třídy mají příznak validate_args pro numerická tvrzení
CS1 maint: více jmen: seznam autorů (odkaz) - ^ „Rozšíření BFloat16 pro Armv8-A“. community.arm.com. Citováno 2019-08-30.
- ^ "Historie verzí ROCm". github.com. Citováno 2019-10-23.
- ^ „Livestream Day 1: Stage 8 (Google I / O '18) - YouTube“. Google. 2018-05-08. Citováno 2018-05-23.
U mnoha modelů se jedná o náhradu za float-32