Mixed Precision Training
Mixed Precision Training to trening wykorzystujący różne formaty liczb w różnych częściach obliczenia. Tańsza reprezentacja może obsługiwać dużą część pracy, a większa precyzja chronić operacje wrażliwe na zaokrąglenia. Samo przekonwertowanie wszystkich tensorów na FP16 nie wystarcza.

Micikevicius et al., Mixed Precision Training, §3.1–3.3 opisują wariant z FP16, kopią wag aktualizowaną w FP32, sumowaniem iloczynów w FP32 oraz Loss Scaling. To konkretna receptura z pracy z 2017 roku, a nie obowiązkowy układ każdego współczesnego treningu.
Mała zmiana może nie ruszyć dużej liczby
W FP16 liczby nie są rozmieszczone równomiernie. Tuż poniżej 1 sąsiednie wartości dzieli . Własny przykład: odejmujemy od wagi 1 aktualizację . Aktualizacja sama mieści się w FP16, lecz wynik odejmowania, zapisany w FP16, zaokrągla się z powrotem do 1. Powtarzanie operacji niczego nie zbiera.
Kopia w FP32 zachowuje kolejne drobne zmiany. Po czterech takich aktualizacjach wynosi ; robocza kopia FP16 również pokazuje już tę zmianę. To inny problem niż gradient zbyt mały, żeby w ogóle dało się go zapisać.
W PyTorch 2.11 autocast dobiera format według operacji. Przykładowo kwalifikujące się mnożenia macierzy na CUDA mogą używać FP16, a Cross-entropy i Layer Normalization są na liście operacji wykonywanych w FP32. Oficjalna dokumentacja AMP, Autocasting i CUDA Op-Specific Behavior odradza ręczne wywoływanie half() na modelu przy użyciu autocast.
Oszczędność zależy od sprzętu, operacji i przechowywanych tensorów; nie wynika z tego automatycznie dwukrotnie szybszy cały trening. Activation Checkpointing ogranicza pamięć inną metodą: odtwarza aktywacje zamiast zmniejszać liczbę bitów ich reprezentacji.
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.