Back to archive
#ai#llm#glossary#aigen

bfloat16

bfloat16 (BF16, Brain Floating Point) to 16-bitowy format zmiennoprzecinkowy: jeden bit znaku, osiem bitów wykładnika i siedem bitów części ułamkowej. Wykładnik daje zakres rzędów wielkości zbliżony do FP32; krótka część ułamkowa oznacza rzadszą siatkę liczb.

Autorzy Cloud TPU opisują podział bitów w „Bfloat16 semantics”. Dla porównania:

FormatBity znakuBity wykładnikaBity części ułamkowej
FP161510
bfloat16187
FP321823

Dla liczb normalnych dochodzi wiodąca jedynka niewpisywana do tych pól. Siedem zapisanych bitów daje więc osiem bitów precyzji znaczącej.

Szeroki krajobraz z dużych pól mozaiki zestawiony z wąskim fragmentem o drobnym detalu.

Zasięg nie jest dokładnością

Własny eksperyment: liczba 1+2−10=1,00097656251+2^{-10}=1{,}0009765625 mieści się dokładnie w FP16, lecz w BF16 zaokrągla się do 1. Najbliższa większa od 1 liczba BF16 to 1+2−7=1,00781251+2^{-7}=1{,}0078125. Za to 216=655362^{16}=65536 przepełnia FP16, a BF16 zapisuje ją dokładnie. Mała 2−302^{-30} znika w FP16 do zera, lecz jest normalną liczbą BF16.

Dwie wartości mogą zatem zajmować po dwa bajty, a zachowywać się inaczej. BF16 nie jest „dokładniejszym FP16”. Oszczędność dotyczy reprezentowanych tensorów, nie automatycznie całej pamięci treningu.

W Mixed Precision Training różne operacje mogą korzystać z różnych formatów. Cloud TPU mnoży wartości BF16, lecz sumuje iloczyny w FP32. Dokumentacja opisuje również konwersję: zaokrąglanie do najbliższej wartości, przy remisie do parzystej; na TPU wartości subnormalne BF16 są zerowane. Tego zachowania sprzętu nie należy utożsamiać ze wszystkimi implementacjami formatu.

Szeroki zakres zmniejsza potrzebę Loss Scaling znanego z FP16. Nie odzyskuje jednak szczegółu utraconego przez zaokrąglenie przy liczbie 1. Wybór formatu nadal wymaga sprawdzenia zachowania konkretnego modelu i operacji.

Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.