Robocikowo>ROBOCIKOWO
Trening

BF16

2017AktywnyOpublikowano: 2 września 2026Aktualizacja: 2 września 2026Opublikowany
16-bitowy format zmiennoprzecinkowy (1 bit znaku, 8 bitów wykładnika, 7 bitów mantysy) o zakresie dynamicznym FP32; standard w treningu i inferencji modeli AI.
Kluczowa innowacja
Skrócenie mantysy FP32 do 7 bitów przy zachowaniu pełnego 8-bitowego wykładnika, co daje 16-bitowy format o zakresie dynamicznym FP32 — bez potrzeby skalowania strat (loss scaling) wymaganego przez FP16.
Kategoria
Trening
Poziom abstrakcji
Primitive
Poziom operacji
TreningInferencja
Zastosowania
Trening mixed-precision dużych modeli językowychInferencja modeli głębokich o obniżonej precyzjiTrening na układach Google TPUTrening na GPU NVIDIA z Tensor Core (Ampere i nowsze)Redukcja zużycia pamięci i przepustowości pamięci

Jak działa

Liczba BF16 koduje wartość jako znak × 1,mantysa × 2^(wykładnik − 127), identycznie jak FP32, ale z mantysą skróconą do 7 bitów. W treningu mixed-precision wagi, aktywacje i gradienty przechowuje się i mnoży w BF16, natomiast akumulację iloczynów (np. w mnożeniu macierzy na Tensor Core / MXU) wykonuje się w FP32, a często utrzymuje się też „master copy" wag w FP32 do aktualizacji. Redukcja precyzji mantysy zwiększa błąd zaokrągleń, ale szeroki zakres wykładnika zapobiega przepełnieniom, dzięki czemu sieci osiągają dokładność zbliżoną do FP32 w tej samej liczbie iteracji.

Rozwiązany problem

FP16 (half precision) ma tylko 5 bitów wykładnika, przez co jego wąski zakres dynamiczny powoduje przepełnienia i zaniki gradientów podczas treningu, wymuszając techniki takie jak loss scaling. BF16 rozwiązuje ten problem, zachowując zakres dynamiczny FP32 i pozwalając trenować w obniżonej precyzji bez zmian hiperparametrów, przy jednoczesnym zmniejszeniu zużycia pamięci i przepustowości o połowę względem FP32.

Komponenty

Bit znakuZnak liczby

1 bit określający znak liczby: 0 = wartość dodatnia, 1 = ujemna.

Pole wykładnikaKoduje rząd wielkości (skalę) liczby

8 bitów z biasem 127 (zakres Emin = −126, Emax = 127) — identyczne jak w FP32, co daje BF16 zakres dynamiczny FP32.

MantysaKoduje cyfry znaczące (precyzję)

7 bitów jawnie przechowywanych plus 1 bit ukryty (razem 8 bitów precyzji), wobec 23+1 w FP32 — źródło obniżonej precyzji BF16.

Implementacja

Pułapki implementacyjne
Obniżona precyzja mantysyŚrednia

Tylko 7 bitów mantysy (2–3 cyfry dziesiętne) zwiększa błędy zaokrągleń; sumowanie wielu małych wartości może tracić dokładność.

Rozwiązanie:Akumuluj iloczyny i redukcje w FP32; utrzymuj master copy wag w FP32.
Mylenie BF16 z FP16Niska

BF16 i FP16 mają ten sam rozmiar (16 bitów), ale inny rozkład bitów; kod zakładający zakres/precyzję FP16 (np. loss scaling) może być zbędny lub błędny dla BF16.

Rozwiązanie:Traktuj formaty osobno; dla BF16 zwykle nie jest potrzebny loss scaling.
Brak natywnego wsparcia sprzętowegoŚrednia

Starsze GPU (przed Ampere) i CPU bez AVX-512 BF16 emulują BF16 programowo, tracąc przewagę wydajnościową.

Rozwiązanie:Sprawdź natywne wsparcie BF16 na docelowym sprzęcie przed wyborem formatu.

Ewolucja

Oryginalny paper · 2019 · arXiv (preprint), 2019 · Dhiraj Kalamkar
A Study of BFLOAT16 for Deep Learning Training
Dhiraj Kalamkar, Dheevatsa Mudigere, Naveen Mellempudi, Dipankar Das, Kunal Banerjee, Sasikanth Avancha, Dharma Teja Vooturi, Nataraj Jammalamadaka, Jianyu Huang, Hector Yuen, Jiyan Yang, Jongsoo Park, Alexander Heinecke, Evangelos Georganas, Sudarshan Srinivasan, Abhisek Kundu, Misha Smelyanskiy, Bharat Kaul, Pradeep Dubey
2017
Google Brain wprowadza bfloat16 w układach TPU v2
Punkt przełomowy

Format „Brain Floating Point" powstaje jako 16-bitowa reprezentacja o zakresie FP32 dla akceleratorów TPU.

2019
Publikacja „A Study of BFLOAT16 for Deep Learning Training"

Kompleksowe badanie (Intel) potwierdzające, że trening w BF16 osiąga wyniki na poziomie FP32 bez zmian hiperparametrów, w wielu domenach.

2020
NVIDIA dodaje sprzętowe wsparcie BF16 w Tensor Core (Ampere, A100)
Punkt przełomowy

Trzecia generacja Tensor Core w A100 wykonuje operacje mixed-precision BF16/FP32 z tą samą przepustowością co FP16, upowszechniając BF16 poza TPU.

Złożoność obliczeniowa

Złożoność przestrzenna: 2 bajty / wartość.

Wymagania sprzętowe

Podstawowe

Format zaprojektowany przez Google Brain dla jednostek MXU w TPU; natywnie wspierany od TPU v2.

Podstawowe

Wspierany przez rdzenie Tensor Core NVIDIA od architektury Ampere (A100); operacje mixed-precision BF16/FP32 osiągają tę samą przepustowość co FP16 (312 TFLOPS na A100).

Dobry fit

Wspierany przez rozszerzenia AVX-512 BF16 w procesorach Intel Xeon.