Wat is Gemengde precisie (mixed precision)?

Het gebruik van getallen met verschillende precisie voor verschillende delen van een berekening. Vermenigvuldigen gebeurt in bijvoorbeeld FP16 en accumuleren in FP32, zodat snelheid en nauwkeurigheid samengaan.

Japanse benaming: 混合精度

“Gemengde precisie (mixed precision)” komt voor in 2 oefenvragen uit 2 onderwerpen, bijv. Computerarithmetiek, GPU-programmeren.

Vakgebied: GPU-programmeren

Nu oefenen: vragen over Gemengde precisie (mixed precision)

Wat is de belangrijkste reden dat bij AI-training met gemengde precisie het grootste deel van de berekeningen in FP16 of bfloat16 gebeurt, terwijl de oorspronkelijke waarde van de gewichten (master weights) in FP32 wordt bewaard?

  1. ABij het optellen van kleine bijwerkingen bij de gewichten verdwijnt de bijwerking door informatieverlies in een formaat met lage precisie
  2. BFP32 is sneller dan FP16, dus alle berekeningen met gewichten worden aan FP32 overgelaten
  3. CFP16 en bfloat16 mogen volgens de afspraak geen gewichtswaarden in het geheugen opslaan
Antwoord en toelichting tonen

Antwoord: A. Bij het optellen van kleine bijwerkingen bij de gewichten verdwijnt de bijwerking door informatieverlies in een formaat met lage precisie

Bij training wordt telkens een zeer kleine waarde, "leersnelheid × gradiënt", bij de gewichten opgeteld. FP16 en bfloat16 hebben een korte mantisse; als de bijwerking te klein is ten opzichte van het gewicht, blijft de som door afronding gelijk aan het oorspronkelijke gewicht en verdwijnt de bijwerking (informatieverlies). Daarom worden de gewichten in FP32 bewaard, zodat de bijwerkingen correct worden opgebouwd, en wordt voor de voorwaartse en achterwaartse berekeningen een kopie met lagere precisie gebruikt. Rekenen gaat sneller bij lagere precisie, en waarden met lage precisie kunnen wel worden opgeslagen.

Waarom wordt bij gemengde precisie op een GPU vaak de vermenigvuldiging in lage precisie zoals FP16 uitgevoerd en de sommatie (accumulatie) in FP32?

  1. AOmdat vermenigvuldiging in FP32 niet mogelijk is
  2. BOmdat bij het optellen van veel producten in lage precisie afrondingsfouten zich ophopen en kleine waarden verloren gaan, dus alleen de accumulatie in hoge precisie wordt uitgevoerd
  3. COmdat optellen in FP16 niet mogelijk is
Antwoord en toelichting tonen

Antwoord: B. Omdat bij het optellen van veel producten in lage precisie afrondingsfouten zich ophopen en kleine waarden verloren gaan, dus alleen de accumulatie in hoge precisie wordt uitgevoerd

De mantisse van FP16 heeft slechts 10 bits, dus als een klein product bij een grote geworden som wordt opgeteld, kan het product door afronding verdwijnen. Bij een matrixproduct worden duizenden producten opgeteld, en als deze fout zich ophoopt, wijkt het resultaat sterk af. Daarom wordt de vermenigvuldiging, die veel geheugen vraagt en de rekeneenheid zwaar belast, in lage precisie gedaan en alleen de accumulatie in FP32. De meeste tensor cores kunnen zo'n multiply-accumulate met één instructie uitvoeren.

Vragen met “Gemengde precisie (mixed precision)” (2)

  1. Wat is de belangrijkste reden dat bij AI-training met gemengde precisie het grootste deel van de berekeningen in FP16 of bfloat16 gebeurt, terwijl de oorspronkelijke waarde van de gewichten (master weights) in FP32 wordt bewaard?
  2. Waarom wordt bij gemengde precisie op een GPU vaak de vermenigvuldiging in lage precisie zoals FP16 uitgevoerd en de sommatie (accumulatie) in FP32?

Verwante termen

Mantisse (significand) bfloat16 Informatieverlies (absorptie) GPU Bankconflict Constant memory CUDA GPU-kernel Grid-stride loop Latentieverberging (latency hiding)

Naar de woordenlijst