Wartości tensorów (wagi, aktywacje, gradienty) są konwertowane z FP32/FP16 do jednego z formatów FP8: E4M3 dla przebiegu w przód, E5M2 dla gradientów w przebiegu wstecznym. Ponieważ 8 bitów daje bardzo wąski zakres reprezentowalnych wartości, przed konwersją stosuje się współczynniki skalowania (scaling), które przesuwają rozkład wartości tensora w zakres reprezentowalny przez FP8. Biblioteka NVIDIA Transformer Engine wykorzystuje „delayed scaling" — wyznacza współczynnik na podstawie historycznych maksimów wartości bezwzględnych (amax) z poprzednich iteracji. Skalowanie może być per-tensor lub drobnoziarniste (per-blok/per-kafelek). Właściwe mnożenie macierzy wykonują rdzenie Tensor w FP8, a akumulacja odbywa się w wyższej precyzji (FP32), po czym wynik jest ponownie skalowany. Master weights i akumulatory zwykle pozostają w wyższej precyzji dla stabilności.
Trening i inferencja dużych modeli językowych są ograniczone przez pojemność pamięci GPU i przepustowość obliczeń. Formaty 16-bitowe (FP16/BF16) były dotąd standardem, ale zajmują dwa razy więcej pamięci i przepustowości niż formaty 8-bitowe. Kwantyzacja całkowitoliczbowa INT8 redukuje rozmiar, ale jej wąski, jednorodny zakres utrudnia stabilny trening. FP8 rozwiązuje ten kompromis, dając 8-bitowy rozmiar przy zachowaniu zakresu dynamicznego formatu zmiennoprzecinkowego.
8-bitowy format zmiennoprzecinkowy: 1 bit znaku, 4 bity wykładnika, 3 bity mantysy. Maksymalna wartość ±448, brak reprezentacji nieskończoności. Wyższa precyzja, węższy zakres — używany w przebiegu w przód.
8-bitowy format zmiennoprzecinkowy: 1 bit znaku, 5 bitów wykładnika, 2 bity mantysy. Maksymalna wartość ±57344, zgodny z IEEE-754 dla wartości specjalnych (NaN, nieskończoność). Szerszy zakres dynamiczny, niższa precyzja — używany dla gradientów.
Mnożnik przesuwający rozkład wartości tensora do zakresu reprezentowalnego przez FP8. Może być per-tensor lub drobnoziarnisty (per-blok/per-kafelek); Transformer Engine stosuje delayed scaling oparty na historii amax.
Wąski zakres 8 bitów powoduje, że bez właściwego skalowania wartości wykraczają poza zakres (overflow do nieskończoności/NaN) lub zapadają do zera (underflow).
Niektóre warstwy (np. normalizacja, softmax, akumulatory) są wrażliwe na niską precyzję i wymagają pozostawienia w FP16/FP32.
NVIDIA, Arm i Intel proponują wspólny standard dwóch formatów FP8 dla deep learningu.
H100 wprowadza rdzenie Tensor obsługujące FP8 (2000 TFLOPS, 4000 z sparsity) oraz Transformer Engine automatyzujący przełączanie FP8/16-bit.
Formaty FP8 zostają przyjęte jako otwarty standard branżowy OCP.
DeepSeek-V3 (671B parametrów) wykorzystuje drobnoziarnisty framework treningu mixed-precision FP8, demonstrując FP8 przy treningu modelu frontier.
Wybór formatu: E4M3 (więcej precyzji) lub E5M2 (szerszy zakres).
Poziom, na jakim wyznaczany jest współczynnik skalowania.
Sposób wyznaczania współczynnika skalowania w czasie.
FP8 to format numeryczny stosowany w gęstych mnożeniach macierzy na rdzeniach Tensor; akumulacja odbywa się w wyższej precyzji.
Kwantyzacja i mnożenia FP8 są w pełni równoległe na rdzeniach Tensor GPU, zarówno w treningu, jak i inferencji.
FP8 jest natywnie wspierany przez rdzenie Tensor w architekturach NVIDIA Hopper, Ada Lovelace i Blackwell, dając 2x przepustowość względem FP16/BF16.
Formaty 8-bitowe są przedmiotem prac na akceleratorach innych niż NVIDIA, lecz FP8 nie jest tam podstawowym, natywnym trybem tensor.