FP32, FP16, BF16 en INT8: bitindeling, bereik, precisie en toepassingen
FP32 is een 32-bits floating-pointgetal met enkele precisie en dient als referentie voor berekeningen. FP16 en BF16 zijn allebei 16 bits, maar verdelen de bits anders. FP16 besteedt veel bits aan de mantisse voor precisie, waardoor het bereik smal is, met een maximum van 65504. BF16 geeft de exponent dezelfde 8 bits als FP32 en houdt het bereik zo op FP32-niveau, ten koste van precisie. INT8 is een 8-bits integer die wordt gebruikt voor kwantisatie, waarbij reële getallen met een schaalfactor worden benaderd; zo kunnen geheugen en vermogen bij AI-inferentie sterk worden verlaagd.
| Kenmerk | FP32 | FP16 | BF16 | INT8 |
|---|---|---|---|---|
| Aantal bits | 32 bits | 16 bits | 16 bits | 8 bits |
| Bits voor teken, exponent en mantisse | 1, 8, 23 | 1, 5, 10 | 1, 8, 7 | Geen exponent of mantisse. Integer in tweecomplement van −128 tot 127 |
| Grootste representeerbare waarde | Ongeveer 3,4 × 10³⁸ | 65504 | Ongeveer 3,4 × 10³⁸ (vrijwel gelijk aan FP32) | 127 (reële getallen worden met een schaalfactor weergegeven) |
| Kleinste genormaliseerde getal | Ongeveer 1,2 × 10⁻³⁸ | Ongeveer 6,1 × 10⁻⁵ (2⁻¹⁴) | Ongeveer 1,2 × 10⁻³⁸ | Niet van toepassing (de stapgrootte van de waarden wordt door de schaalfactor bepaald) |
| Indicatie van de precisie | Ongeveer 7 decimale cijfers (verschil tussen 1 en het volgende getal 2⁻²³ ≈ 1,2 × 10⁻⁷) | Ongeveer 3 decimale cijfers (2⁻¹⁰ ≈ 9,8 × 10⁻⁴) | 2 tot 3 decimale cijfers (2⁻⁷ ≈ 7,8 × 10⁻³) | Een schaal met 256 stappen |
| Conversie vanuit FP32 | Niet nodig (referentie) | Door het smalle bereik kunnen grote waarden overlopen en kleine waarden 0 worden | Alleen de bovenste 16 bits nemen en afronden; het bereik loopt niet over | Kwantiseren na het bepalen van schaal (en nulpunt). Kalibratie om het waardebereik te onderzoeken is nodig |
| Geheugen per waarde | 4 bytes | 2 bytes | 2 bytes | 1 byte |
| Efficiëntie van rekeneenheden | Grote vermenigvuldigers; weinig multiply-accumulates per oppervlak | Kleinere rekeneenheden dan FP32; er passen veel multiply-accumulates naast elkaar | Vergelijkbaar met FP16. Door de kortere mantisse is de vermenigvuldiger nog kleiner | Kleinste en zuinigste vermenigvuldigers. Producten worden vaak in 32-bits integers opgeteld |
| Gebruik bij training | Masterweights, optimizertoestand en accumulatie van producten | Training met gemengde precisie. Loss scaling voorkomt dat kleine gradiënten 0 worden | Veel gebruikt bij training met gemengde precisie. Loss scaling is meestal niet nodig | Normaal niet gebruikt (bij quantization-aware training wordt het effect van kwantisatie nagebootst) |
| Gebruik bij inferentie | Referentie voor nauwkeurigheid. Wanneer juistheid voorgaat op prestaties | Inferentie op onder meer GPU's | Inferentie op GPU's en AI-accelerators | Inferentie met gekwantiseerde modellen. Vooral op edge-NPU's en dergelijke |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.