Robocikowo>ROBOCIKOWO
Wnioskowanie

FP16

2008AktywnyOpublikowano: 29 września 2026Aktualizacja: 29 września 2026Opublikowany
16-bitowy format zmiennoprzecinkowy half precision (5 bitów wykładnika, 10 bitów mantysy) — standard obniżonej precyzji w treningu i inferencji AI, oferujący większą precyzję mantysy niż BF16 kosztem węższego zakresu dynamicznego.
Kluczowa innowacja
16-bitowy format zmiennoprzecinkowy IEEE 754 half precision (1 bit znaku, 5 bitów wykładnika, 10 bitów mantysy), który o połowę zmniejsza pamięć i przepustowość względem FP32, umożliwiając trening i inferencję mixed-precision na rdzeniach Tensor Core.
Kategoria
Wnioskowanie
Poziom abstrakcji
Wzorzec
Poziom operacji
ModelElement architekturyTreningInferencja
Zastosowania
Trening mixed-precision sieci głębokich na GPU NVIDIA (od Volta)Inferencja modeli w obniżonej precyzji dla mniejszego zużycia VRAMPrzyspieszenie mnożenia macierzy na rdzeniach Tensor CoreFormat pośredni w potokach kwantyzacji (dekwantyzacja do FP16 przed obliczeniami)Grafika i obliczenia GPU wymagające półprecyzji

Jak działa

FP16 koduje wartość jako znak x 1,mantysa x 2^(wykładnik − 15), z 5-bitowym wykładnikiem (bias 15) i 10-bitową mantysą plus bitem ukrytym (11 bitów precyzji). W treningu mixed-precision wagi, aktywacje i gradienty przechowuje się w FP16, mnożenie macierzy wykonują rdzenie Tensor Core, a akumulacja iloczynów odbywa się w FP32; utrzymuje się też master copy wag w FP32. Aby małe gradienty nie zanikały w wąskim zakresie FP16, funkcję straty mnoży się przez współczynnik skalujący przed backpropagacją i dzieli po niej (loss scaling). W inferencji FP16 służy jako lekki format wag i aktywacji redukujący zużycie pamięci VRAM.

Rozwiązany problem

Trening i inferencja w FP32 zużywają dużo pamięci i przepustowości, a rdzenie Tensor Core osiągają najwyższą przepustowość dopiero w obniżonej precyzji. FP16 zmniejsza rozmiar tensorów o połowę i przyspiesza mnożenie macierzy, ale jego wąski 5-bitowy wykładnik (maks. ~65504) powoduje przepełnienia i zaniki gradientów, dlatego trening w FP16 wymaga skalowania strat (loss scaling) i akumulacji w FP32.

Kluczowe mechanizmy

Reprezentacja zmiennoprzecinkowa: znak x 1,mantysa x 2^(wykładnik − 15)
Trening mixed-precision z master copy wag w FP32
Akumulacja iloczynów macierzowych w FP32 na Tensor Core
Loss scaling przeciw zanikowi gradientów
Dekwantyzacja/rzutowanie między FP16 a FP32 w potokach obliczeń

Mocne strony i ograniczenia

Mocne strony
✓Wyższa precyzja względna (10 bitów mantysy) niż BF16 przy tym samym rozmiarze 16 bitów
✓Połowa zużycia pamięci i przepustowości pamięci względem FP32
✓Natywne, szerokie wsparcie sprzętowe (Tensor Core od Volta, AMD, Apple, mobile)
✓Wielokrotne przyspieszenie mnożenia macierzy na jednostkach mixed-precision
✓Dojrzałe wsparcie w bibliotekach (cuDNN, PyTorch AMP, TensorRT)
Ograniczenia
✗Wąski 5-bitowy wykładnik (maks. ~65504) sprzyja przepełnieniom i zanikom gradientów
✗Trening zwykle wymaga skalowania strat (loss scaling), statycznego lub dynamicznego
✗Niższa precyzja niż FP32 psuje sumowanie wielu małych wartości bez akumulacji FP32
✗Łatwo pomylić z BF16 mimo identycznego rozmiaru (inny układ bitów)
✗Starsze CPU/GPU bez natywnego FP16 emulują go programowo, tracąc przewagę

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

5 bitów z biasem 15 (zakres wykładnika -14 do +15), co daje maksymalną wartość ~65504 i wąski zakres dynamiczny względem FP32 i BF16.

MantysaKoduje cyfry znaczące (precyzję)

10 bitów jawnie przechowywanych plus 1 bit ukryty (11 bitów precyzji) — więcej niż 8 bitów w BF16, więc FP16 ma wyższą precyzję względną przy porównywalnym rozmiarze.

Implementacja

Pułapki implementacyjne
Przepełnienie i zanik gradientówWysoka

Wąski 5-bitowy wykładnik (maks. ~65504, min. normalny ~6e-5) powoduje, że duże aktywacje przepełniają się do inf, a małe gradienty zanikają do zera.

Rozwiązanie:Stosuj loss scaling (statyczny lub dynamiczny) i akumuluj w FP32; rozważ BF16 gdy zakres jest krytyczny.
Mylenie FP16 z BF16Średnia

Oba formaty mają 16 bitów, ale FP16 ma więcej mantysy i mniej wykładnika niż BF16; kod zakładający zakres BF16 zawiedzie w FP16 i odwrotnie.

Rozwiązanie:Wybieraj format świadomie: FP16 dla precyzji przy loss scalingu, BF16 dla zakresu bez loss scalingu.

Ewolucja

Oryginalny paper · 2008 · IEEE · IEEE Microprocessor Standards Committee
IEEE Standard for Floating-Point Arithmetic (IEEE 754-2008)
IEEE Microprocessor Standards Committee
2008
IEEE 754-2008 standaryzuje binary16 (half precision)
Punkt przełomowy

Format półprecyzji zostaje sformalizowany w standardzie IEEE 754 jako typ przechowywania.

2017
NVIDIA Volta (V100) wprowadza Tensor Core dla FP16
Punkt przełomowy

Pierwsza generacja Tensor Core wykonuje mnożenie macierzy FP16 z akumulacją FP32, dramatycznie przyspieszając trening.

2018
Publikacja Mixed Precision Training

Praca NVIDIA i Baidu formalizuje trening mixed-precision z FP16, master copy wag w FP32 i loss scaling.

Hiperparametry (konfigurowalne osie)

Skalowanie stratWysoka

Współczynnik mnożący stratę przed backpropagacją, chroniący małe gradienty przed zanikiem.

static (np. 1024)Stały współczynnik.
dynamicAutomatycznie dostrajany w trakcie treningu.
Precyzja akumulacjiWysoka

Precyzja sum częściowych w mnożeniu macierzy; zwykle FP32 dla stabilności.

FP32Domyślna, chroni dokładność.
FP16Szybsza, ale ryzykowna numerycznie.

Złożoność obliczeniowa

Charakterystyki obliczeniowe
→2 bajty na wartość (połowa FP32)
→Zakres znormalizowany ~6e-5 do 65504
→11 bitów precyzji efektywnej (10 + bit ukryty)
→Przepustowość Tensor Core zwykle 2x względem FP32 (akumulacja FP32)
→Redukcja ruchu pamięci o ~50% względem FP32

Złożoność czasowa: O(1) na operację elementarną (stały koszt na wartość). Złożoność przestrzenna: 2 bajty / wartość.

Uwagi do benchmarku

Na GPU NVIDIA A100 mnożenie macierzy FP16 z akumulacją FP32 osiąga 312 TFLOPS (tyle samo co BF16), wobec 19,5 TFLOPS w FP32 bez Tensor Core. Trening mixed-precision FP16 zwykle utrzymuje dokładność na poziomie FP32 przy zastosowaniu loss scalingu i skraca czas oraz zużycie pamięci o około połowę.

Wąskie gardło obliczeniowe

Przepustowość Tensor Core i pamięci

Wydajność FP16 zależy od przepustowości jednostek mixed-precision oraz pamięci; sam format nie narzuca kosztu obliczeń poza rzutowaniami i akumulacją FP32.

Zależy od
Wsparcie sprzętowe FP16 (Tensor Core)Precyzja akumulacji

Paradygmat wykonania

Tryb główny
Gęsty

Wszystkie ścieżki obliczeń są aktywne; FP16 zmienia jedynie precyzję reprezentacji.

Wzorzec aktywacji
Wszystkie ścieżki aktywne
Mechanizm routingu

FP16 nie wprowadza routingu ani warunkowego wykonania; to format gęstych obliczeń.

Równoległość

Poziom równoległości
W pełni równoległy

FP16 to format danych; operacje elementarne i mnożenia macierzy są w pełni równoległe na jednostkach SIMD/Tensor Core.

Zakres
TreningInferencja

Wymagania sprzętowe

Podstawowe

Natywnie wspierany przez rdzenie Tensor Core NVIDIA od architektury Volta (V100, 2017); mnożenie macierzy FP16 z akumulacją FP32 osiąga wielokrotnie wyższą przepustowość niż FP32.

Dobry fit

Wspierany również przez GPU AMD (RDNA/CDNA) oraz Apple Metal (half); szeroko dostępny w konsumenckich i serwerowych akceleratorach.