English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gość
1 / ?
powrót do lekcji

Znak, Wykładnik, Mantysa

Format IEEE 754 zmiennoprzecinkowy

Każda liczba zmiennoprzecinkowa przechowuje trzy pola:


- Bit znaku (1 bit): dodatni lub ujemny

- Wykładnik (E bity): skala magnitudy, całkowita potęga 2

- Mantysa (M bitów): precyzja ułamkowa, liczba między 1.0 a ~2.0


Całkowita liczba bitów = 1 + E + M. Wartość wynosi w przybliżeniu (-1)^sign (1 + mantissa) 2^(exponent - bias).


Dwie właściwości są ważne dla treningu:


Zakres dynamiczny = 2^(2^E) (w przybliżeniu). Więcej bitów wykładnika oznacza reprezentowanie mniejszych i większych liczb bez przepełnienia.


Precyzja = 2^M różnych wartości na każdą potęgę 2. Więcej bitów mantysy oznacza drobniejsze rozróżnienie między kolejnymi potęgami 2.


Trzy formaty


FormatCałkowita liczba bitówZnakWykłMantZakres dynamicznyPrecyzja
FP32321823~10^-38 do ~10^38~7 cyfr
FP16161510~10^-5 do ~10^5~3 cyfry
FP8 E4M38143~2^-9 do ~448~2 cyfry

FP8 E4M3 oznacza „4 bity wykładnika, 3 bity mantysy”. Alternatywny FP8 E5M2 wymienia precyzję na zakres; eksperymenty ANDREA używają E4M3, ponieważ aktywacje transformera mieszczą się w wąskich pasmach wielkości, gdzie dodatkowa precyzja przewyższa dodatkowy zakres.

Bajty na parametr

ANDREA-120M zawiera około 120 000 000 parametrów. Oblicz zapotrzebowanie na pamięć tylko macierzy wag w (a) FP32, (b) FP16, (c) FP8. Pokaż obliczenia w MB. Następnie oblicz (d) zapotrzebowanie na pamięć z wagami + pierwsza chwila Adama + druga chwila Adama (3x liczba wag) w FP16.

Dlaczego Niższa Precyzja Działa Szybciej

Przepustowość Pamięci Dominuje nad Szybkością Treningu

Nowoczesne GPU spędzają więcej czasu na oczekiwaniu na pamięć niż na obliczeniach. RTX 4090 ma przepustowość pamięci 1008 GB/s i 165 TFLOPS obliczeń FP16. Typowa warstwa odczytuje wagi z VRAM, mnoży aktywacje, zapisuje wyniki z powrotem. To przepustowość, a nie obliczenia, decyduje o przepływie.


Zmniejszenie precyzji o połowę zmniejsza bajty na parametr o połowę, więc odczyt tych samych wag zużywa połowę przepustowości pamięci. Przepływ wzrasta mniej więcej dwukrotnie.


Tensor Cores: Sprzętowo Przyspieszane Mnożenie Macierzy

RTX 4090 zawiera dedykowane jednostki tensor core, które obliczają mnożenie macierzy w FP16 lub FP8 bezpośrednio. Pojedyncza operacja tensor core mnoży mały blok (np. 16x16) w jednym cyklu, dramatycznie szybciej niż skalarne mnożenia FP32.


Empiryczne dane z ANDREA-120M:


PrecyzjaKroki/minUwagi
FP32~3bazowa; brak przyspieszenia tensor core
FP16~6rdzenie tensorowe cuBLAS; 2x przyspieszenie
FP8 E4M3~6rdzenie tensorowe; porównywalne z FP16

FP8 nie pokonało FP16 pod względem przepustowości w tym obciążeniu, ponieważ przepustowość obliczeniowa przestała być wąskim gardłem; przepustowość pamięci i narzut uruchamiania stały się ograniczające. ANDREA-120M v3 jest dostarczany w FP16 cuBLAS przy 6 krokach/min dla komfortowego marginesu bezpieczeństwa bez utraty przepustowości.


Ryzyko NaN w FP8

FP8 E4M3 reprezentuje liczby od ~2^-9 do ~448. Aktywacje lub gradienty poza tym zakresem przepełniają się do NaN (not a number) lub spadają do zera. Pojedyncze NaN zatruwa każde downstream obliczenie: mnożenia macierzowe z NaN zwracają wszystkie-NaN; gradienty wszystkie-NaN psują stan AdamW; AdamW z NaN m & v generuje aktualizacje NaN; wagi stają się NaN; całe uruchomienie treningu umiera.


Eksperymenty FP8 ANDREI powodowały okazjonalne klify NaN wymagające skalowania strat, zaplanowanego przełączania precyzji lub ścieżek zapasowych. Zakres dynamiczny FP16 (~10^-5 do ~10^5) jest wystarczająco szeroki, że zdarzenia NaN pozostają rzadkie bez skomplikowanych sztuczek skalowania.


Porównanie precyzji: FP32 vs FP16 vs FP8

Wybór precyzji dla nowego uruchomienia

Rozpoczynasz nowe uruchomienie treningu w stylu ANDREI na RTX 4090. Masz dwa konflikujące priorytety: (1) maksymalizacja kroków/min, (2) unikanie debugowania awarii NaN w środku treningu. ANDREA-120M v3 wybrał FP16 cuBLAS zamiast FP8 E4M3, mimo że oba działają z ~6 krokami/min. Rozważ, dlaczego FP16 wygrał tę decyzję. Odnieś się do zakresu dynamicznego I wsparcia tensor core w swojej odpowiedzi.

Zmieszczenie 120M na jednej 4090

Mnożnik 6-8x z lekcji wprowadzającej

Przypomnij sobie z grow_a_language_model_intro, że pamięć treningowa wynosi mniej więcej 6-8x surowej liczby wag, uwzględniając:


- Wagi (1x)

- Adam pierwszy moment m (1x)

- Adam drugi moment v (1x)

- Bufor gradientu (1x)

- Aktywacje & tymczasowe (~2-4x, zależy od batch & kontekstu)


ANDREA-120M w FP16 z batch_size=8, context=1024:


KomponentRozmiar FP16
Wagi240 MB
m (pierwsza chwila)240 MB
v (druga chwila)240 MB
Gradienty240 MB
Aktywacje~2-4 GB (batch, ctx)
Razem~3.5 GB

RTX 4090 ma 24 GB VRAM. ANDREA-120M zużywa ~14% przy FP16. Wystarczy miejsca na większe rozmiary batcha lub dłuższe okna kontekstowe. ANDREA-12M zużyła tylko 1.4 GB łącznie.


Gdzie żyje mieszana precyzja

ANDREA NIE przechowuje wszystkiego w jednej precyzji. Trening o mieszanej precyzji przechowuje:


- Wagi główne: FP32 (zachowuje stabilność treningu)

- Obliczenia forward & backward: FP16 (używa tensor cores)

- Stan optymalizatora AdamW: FP32 (m & v potrzebują precyzji dla aktualizacji long-tail)

- Bufor gradientów: FP16 (strona obliczeniowa)


Ostateczny budżet pamięci łączy oba. Rzeczywisty ślad pamięciowy ANDREA mieści się pomiędzy czystym FP16 (720 MB stan optymalizatora) a czystym FP32 (1.44 GB stan optymalizatora), bliżej FP32, ponieważ m i v pozostają w FP32.

Dobór rozmiaru budżetu dla ANDREA-480M

ANDREA-480M (planowany trzeci członek rodziny) ma ~480 milionów parametrów. Szacuj (a) tylko wagi FP16 w MB, (b) wagi FP16 + m + v w MB (załóż, że m i v również FP16 dla uproszczenia), oraz (c) biorąc pod uwagę regułę kciuka 6-8x, całkowity ślad pamięciowy podczas treningu w FP16. Czy ANDREA-480M zmieści się na pojedynczym RTX 4090 (24 GB)?

Precyzja w praktyce

Załóż, że w trakcie treningu odkryłeś, że ANDREA-120M produkuje okazjonalne straty NaN co ~5000 kroków przy FP16, & każde NaN wymaga restartu z checkpointu. Jaki **JEDEN** zmiana wypróbowałbyś jako pierwszą, aby zmniejszyć częstotliwość NaN bez porzucania FP16? Uzasadnij jednowyrazowym mechanizmem.

Pokrewne Aktywności

Trzy powiązane aktywności odnoszą się do precyzji:


- Aktywność 1: Wstęp / budżet VRAM. Precyzja mnoży każdy składnik w arytmetyce budżetu pamięci. Reguła kciuka 6-8x jest bezwymiarowa; bajty-na-param daje jej jednostki.

- Aktywność 10: AdamW. Stan optymalizatora (m & v) zazwyczaj pozostaje w FP32, nawet gdy obliczenia forward/backward działają w FP16. Powód: precyzja akumulatora long-tail ma większe znaczenie niż szybkość obliczeń dla optymalizatora.

- Aktywność 12: Klipowanie gradientów. Klipowanie ogranicza amplitudy gradientów przed aktualizacją stanu optymalizatora. Przy FP16 forward/backward & FP32 optymalizator, klipowanie następuje na granicy zmiany precyzji & tam, gdzie koncentruje się ryzyko przepełnienia.


Precyzja to darmowa pokrętło: zmień ją, model trenuje szybciej & zużywa mniej pamięci. Koszt to dbałość numeryczna: obsługa NaN, skalowanie strat, dyscyplina mieszanej precyzji. ANDREA-120M v3 demonstruje zysk: 120M parametrów wytrenowanych na konsumenckim sprzęcie w 23 dni, ponieważ FP16 zmniejszyło wszystko o połowę.