Het numerieke formaat dat wordt gebruikt om de parameters van een model op te slaan en te berekenen, beïnvloedt het geheugen dat het gebruikt, de snelheid waarmee de hardware deze getallen verplaatst en de rekenkernen die ze kunnen verwerken. Het veranderen van de precisie kan dus de inferentie versnellen, dat wil zeggen het gebruik van het model om antwoorden te produceren, zonder de architectuur ervan aan te passen. Een lagere precisie is echter niet automatisch te verkiezen.
- Het gekozen getalformaat bepaalt geheugen, snelheid en rekenkernen van een model.
- Lagere precisie versnelt inferentie, maar is niet automatisch beter.
- BF16 biedt een groter bereik, FP16 meer precisie; de keuze hangt af van model en hardware.
- Gemengde precisie combineert snelheid en stabiliteit door kritieke berekeningen in FP32 te houden.
Een afweging tussen bereik, precisie en geheugen
Een drijvendekommagetal bestaat uit een teken, een exponent en een mantisse. De exponent bepaalt het bereik van representeerbare grootheden, terwijl de mantisse de fijnheid bepaalt waarmee twee naburige waarden kunnen worden onderscheiden. Het verkleinen van een van deze velden creëert een afweging.
Tijdens de inferentie zijn vier effecten bijzonder belangrijk: de afronding, wanneer een waarde wordt vervangen door een naburig representeerbaar getal; het onderschrijding, wanneer een zeer kleine waarde nul wordt; het overschrijding, wanneer een waarde te groot is voor het formaat en oneindig wordt; en de accumulatie van fouten, wanneer veel afgeronde producten bij elkaar worden opgeteld.
FP16 heeft meer mantissebits dan BF16, waardoor het naburige waarden fijner kan onderscheiden. BF16 heeft daarentegen evenveel exponentbits als FP32, en zijn dynamisch bereik is dus veel groter dan dat van FP16. Voor de activaties van transformers voorkomt dit grotere bereik vaak overschrijdingen die FP16 zou ondervinden. De beste keuze hangt echter af van het model, de rekenkernen (kernels) en de hardware.
FP32 dient als numerieke referentie en gebruikt twee keer zoveel geheugen voor de parameters als een 16-bits formaat. FP8 bestaat in twee varianten: E4M3, dat meer precisie biedt, en E5M2, dat een groter bereik biedt. Het formaat wordt beschreven in een artikel van Paulius Micikevicius et al. (2022), FP8 Formats for Deep Learning. FP4 vereist zorgvuldig gekozen coderingen, schaalfactoren per blok of een kalibratie. Voor een model van 7B parameters schat de bron ongeveer 28 GB aan gewichten in FP32, 14 GB in FP16 of BF16 en 7 GB in acht bits, vóór metadata en uitvoerbuffers.
Een model laden en de effecten meten
Met de transformers-bibliotheek van Hugging Face kan een model rechtstreeks worden geladen in een bepaald gegevenstype, een zogenaamde dtype. Het gepresenteerde voorbeeld gebruikt het model sshleifer/tiny-gpt2, in FP16 als CUDA beschikbaar is en anders in FP32. Rechtstreeks laden in de gewenste dtype voorkomt dat tijdelijk een volledig model in FP32 wordt bewaard voordat het wordt geconverteerd, wat belangrijk is voor grote gewichtsbestanden.
Niet alle apparaten ondersteunen alle dtypes. Een niet-ondersteunde bewerking kan mislukken, via een langzamere implementatie verlopen of conversies invoegen die het verwachte voordeel tenietdoen. De auteur raadt daarom aan een representatieve voorbeeldrun te testen en de profiler te inspecteren.
Een model hoeft ook niet overal één enkele dtype te gebruiken. Matrixvermenigvuldigingen kunnen in FP16 of BF16 blijven, terwijl normalisatie, reducties of logits in FP32 blijven: dit is gemengde precisie. Voor softmax kunnen het aftrekken van de maximale logit vóór de exponentiële functie en accumuleren in een groter type overschrijdingen voorkomen.
Een volledige evaluatie richt zich op drie assen: geheugen, prestaties en kwaliteit. De kwaliteit wordt gemeten aan de hand van perplexiteit, taakmetrieken en vergelijking van gegenereerde teksten. Het vergelijken van logits naast gedecodeerde tekst helpt bij debuggen, omdat gulzige uitvoer identiek kan blijven terwijl veel logits zijn veranderd. Bij voorvulling met grote batches kan de rekenkracht al de beperkende factor zijn.
