Słownik

Hasło słownika · · 2 min czytania

bfloat16

Chcesz przechowywać liczby treningu w połowie miejsca zajmowanego przez format 32-bitowy. Potrzebujesz szerokiego zakresu bardzo małych i dużych wartości, ale możesz zaakceptować rzadszą siatkę dokładnych liczb między nimi.

bfloat16 (BF16) to format 16-bitowy z zakresem rzędów wielkości zbliżonym do FP32, typowego formatu 32-bitowego, ale mniejszą precyzją zapisu. W porównaniu z innym formatem 16-bitowym, FP16, więcej bitów przeznacza na wykładnik — określający skalę liczby — kosztem szczegółów jej części znaczącej.

Na przykład 1,001 i 1,002 po zaokrągleniu do najbliższej liczby BF16 obie stają się 1. Nie znaczy to, że format nie zapisze ogromnej wartości: zakres i dokładność są odrębnymi cechami.

BF16 różni się od FP16 mimo identycznej liczby bitów. Szerszy zakres bywa użyteczny w Mixed Precision Training, lecz nie usuwa błędów zaokrągleń ani potrzeby dokładniejszych operacji w niektórych miejscach.

Mechanizm i szczegóły

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.