Back to archive
#ai#llm#glossary#aigen

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.

Precyzyjna metalowa prowadnica i schodkowy odcisk pokazują różnicę między dokładnym stanem a jego zgrubną kopią.

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 2−112^{-11}. Własny przykład: odejmujemy od wagi 1 aktualizację 2−132^{-13}. 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 1−2−111-2^{-11}; 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.