BF16 versus FP16 versus FP8: in welk formaat moet ik trainen?

Automatische vertaling

Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.

Begin met BF16 als de GPU en de trainingssoftware dit ondersteunen. Gebruik FP16 met loss scaling als BF16 niet beschikbaar is of de gemeten werklast beter werkt met FP16. Test FP8 via een ondersteunde mixed-precision-implementatie als de throughput tijdens training de extra numerieke controles rechtvaardigt.

Mixed precision gebruikt verschillende formaten voor verschillende bewerkingen en toestanden. BF16 of FP8 kiezen betekent niet dat elke tensor dat formaat gebruikt.

Bereik en precisie lossen verschillende problemen op

De exponent bepaalt het bereik van waarden. De fractiebits bepalen hoe dicht opeenvolgende representabele waarden bij elkaar kunnen liggen. BF16 behoudt dezelfde exponentbreedte als FP32, maar heeft minder fractiebits. FP16 biedt binnen zijn kleinere bereik een fijnere precisie dan BF16.

FormaatExponentbits / fractiebitsPraktisch aandachtspunt
BF168 / 7Groot bereik; maakt loss scaling meestal overbodig
FP165 / 10Kleine gradiënten kunnen underflow veroorzaken; gebruik loss scaling
FP8 E4M34 / 3Meer precisie dan E5M2, minder bereik
FP8 E5M25 / 2Groter bereik voor tensoren zoals gradiënten

Bij FP16 vermenigvuldigt loss scaling de loss vóór de achterwaartse berekening en schaalt de gradiënten terug vóór de update van de optimizer. Zo blijven kleine gradiënten beter representabel. Overflow moet nog steeds worden afgehandeld.

De documentatie van NVIDIA Transformer Engine beschrijft een gebruikelijke hybride FP8-configuratie: E4M3 voor tensoren in de voorwaartse berekening en E5M2 voor tensoren in de achterwaartse berekening, met schaling die op de tensoren is afgestemd. De per blok geschaalde formaten van Blackwell voegen andere configuraties toe; hardwareondersteuning alleen kiest er geen voor je model.

Stel een numerieke referentie vast

Voer een representatief trainingsdeel uit met dezelfde datavolgorde en instellingen voor de optimizer. Vergelijk het maximale geheugengebruik, de tijd per stap, het verloop van de loss, niet-eindige waarden en de kwaliteit op apart gehouden evaluatiedata. Houd numeriek gevoelige bewerkingen en toestanden van de optimizer op de precisie die de implementatie vereist.

Een snellere run die divergeert of niet aan de kwaliteitseis voldoet, bespaart geen trainingskosten. Omgekeerd kan een stabiele BF16-referentie voldoende zijn zonder extra werk voor FP8.

De sectie over mixed-precision-training in de LLM Engineering Guide bevat de bereiken van de formaten en gepubliceerde trainingsresultaten.