Strona główna / Rozdział 7 · Model na produkcji
Ostatnia zmiana · 5 min czytania
Kwantyzacja
Kwantyzacja zapisuje wagi, a czasem też aktywacje i KV cache, mniejszą liczbą bitów, zaokrąglając je do rzadszej siatki wartości. Model zajmuje 2–4 razy mniej pamięci, a generowanie przyspiesza, bo decode czyta z pamięci mniej bajtów.
Po ludzkuZdjęcie zapisane jako JPEG zamiast w pełnej jakości: waży kilka razy mniej i na ekranie telefonu wygląda tak samo. Artefakty widać dopiero przy mocnej kompresji i najpierw w drobnych detalach. U modelu tymi detalami są długie rozumowanie, kod i rzadsze języki.
Zmniejszaj liczbę bitów, dodaj wartość odstającą, a potem włącz osobną skalę dla bloków. Patrz na błąd zaokrągleń
40 wag z rozkładu normalnego, siatka symetryczna wokół zera, blok to 8 wag. Błąd liczony bez samej wartości odstającej, żeby było widać, co dzieje się z resztą.
Wybierz rozmiar modelu i zobacz, na czym zmieszczą się same wagi. Liczbę bitów zmieniasz w widżecie powyżej
Liczone jako wagi plus 15% zapasu, co wystarcza na krótki kontekst jednej osoby. Obsługa wielu rozmów wymaga dużo więcej pamięci na KV cache. Skale bloków dokładają kilka procent.
Jak działa kwantyzacja
- Każdą wagę dzieli się przez skalę, zaokrągla do liczby z małego zakresu (w INT4 od −8 do 7; siatka symetryczna, jak w widżecie, używa wartości od −7 do 7, czyli 15 poziomów) i tak zapisuje. Przy liczeniu mnoży się ją z powrotem przez skalę. Błąd to szum zaokrągleń, a sieć jest na drobny szum odporna.
- Problemem są wartości odstające. Jedna duża liczba rozciąga siatkę i reszta wag ląduje w kilku punktach wokół zera. Dlatego skalę liczy się osobno dla małych grup, zwykle 16–128 wag. W aktywacjach modeli od ok. 6,7 mld parametrów pojawiają się systematyczne wartości odstające w kilku kanałach (Dettmers i in., LLM.int8(), 2022).
- Kwantyzacja po treningu (PTQ) działa na gotowym modelu w minuty lub godziny. GPTQ i AWQ używają małej próbki danych kalibracyjnych, żeby zaokrąglać tak, by jak najmniej zaszkodzić wyjściu warstwy. Trening z symulowaną kwantyzacją (QAT) daje model, który lepiej znosi 4 bity i mniej, ale to dodatkowy trening, więc robi go zwykle autor modelu.
Formaty kwantyzacji i co przyspieszają
- Kwantyzacja samych wag, np. W4A16 (wagi w 4 bitach, aktywacje w 16), zmniejsza liczbę bajtów czytanych w decode, więc przyspiesza generowanie przy małym batchu. Mnożenie i tak idzie w 16 bitach, więc prefill i duże batche prawie nie zyskują.
- FP8 dla wag i aktywacji (W8A8) pozwala liczyć na rdzeniach tensorowych w FP8: H100 osiąga w nim ok. 1979 TFLOPS dense wobec 989 w BF16. Przyspiesza więc też prefill i duże batche. W pomiarach Kurtica i in. (2024) FP8 W8A8 jest praktycznie bezstratne, INT8 W8A8 traci 1–3% dokładności, a W4A16 wypada bliżej 8 bitów, niż się spodziewano.
- Nowe formaty 4-bitowe to liczby zmiennoprzecinkowe ze skalą na blok. MXFP4 ma bloki po 32 wagi i skalę będącą potęgą dwójki, ok. 4,25 bita na wagę; w nim OpenAI wydało wagi ekspertów gpt-oss. NVFP4 ma bloki po 16 ze skalą w FP8 i dodatkową skalą na tensor, ok. 4,5 bita, i jest obsługiwany sprzętowo przez karty Blackwell.
- KV cache też się kwantyzuje. Cache w FP8 zajmuje o połowę mniej pamięci na token, więc przy długich kontekstach daje więcej miejsca na batch niż dalsze ściskanie wag (zobacz „Pętla generowania i KV cache”).
Co się traci i jak wybrać format
- Reguła kciuka, zależna od modelu i metody: 8 bitów praktycznie bez straty, 4 bity z dobrą metodą to niewielka strata, 3 bity i mniej to szybki spadek. Straty pojawiają się najpierw w długim rozumowaniu, kodzie, matematyce i rzadszych językach, a średnia z benchmarków potrafi je ukryć.
- Przy tej samej pamięci większy model w 4 bitach zwykle wypada lepiej niż mniejszy w 16. Dettmers i Zettlemoyer (2022) po ponad 35 tys. eksperymentów uznali 4 bity za prawie zawsze optymalne przy stałej łącznej liczbie bitów modelu.
- Wybór zależy od ruchu i sprzętu. Na Hopperze, np. H100, Kurtic i in. zalecają W4A16 przy pojedynczych żądaniach i małym batchu, a W8A8 w FP8 przy dużym ruchu z continuous batchingiem. Na Blackwellu NVFP4 dla wag i aktywacji (W4A4) liczy się na rdzeniach FP4 2–3 razy szybciej niż FP8, więc 4 bity mogą wygrać także przy dużym ruchu, kosztem nieco większej straty niż w FP8: Red Hat mierzy ok. 99% dokładności BF16 dla modeli od 70B i 95–98% dla modeli 7–14B. Jakość sprawdzasz na własnym zestawie ewaluacyjnym, bo ten sam model u różnych hostów bywa różnie skwantyzowany (zobacz „Modele open-weight” i „Ewaluacje”).
Sprawdź się
Co daje kwantyzacja, co się traci i jaki format wybierzesz?
Wagi zapisuje się mniejszą liczbą bitów, z 16 do 8 albo 4, ze skalą liczoną dla małych bloków, bo pojedyncze wartości odstające rozciągają siatkę. Model zajmuje 2–4 razy mniej pamięci, a decode przyspiesza, bo czyta mniej bajtów. Kwantyzacja samych wag, jak W4A16, pomaga przy małym batchu. FP8 dla wag i aktywacji przyspiesza też liczenie, więc na Hopperze wygrywa przy dużym ruchu; na Blackwellu jeszcze szybsze jest NVFP4 dla wag i aktywacji. 8 bitów to praktycznie brak straty, 4 bity to niewielka strata, niżej jakość szybko spada, najpierw w rozumowaniu i kodzie. Rozstrzygają własne ewaluacje.
In English
The weights are stored in fewer bits, from 16 down to 8 or 4, with a scale computed per small block, because a single outlier stretches the grid. The model needs 2–4 times less memory, and decode gets faster because it reads fewer bytes. Weight-only quantisation such as W4A16 helps at small batch sizes. FP8 for weights and activations also speeds up the maths, so on Hopper it wins under heavy traffic; on Blackwell, NVFP4 for weights and activations is faster still. 8 bits is practically lossless, 4 bits costs a little, and below that quality drops fast, first in reasoning and code. Your own evals decide.
Pytania pogłębiające (4)
- PTQ a QAT?
- PTQ kwantyzuje gotowy model w minuty lub godziny, na małej próbce danych kalibracyjnych (GPTQ, AWQ). QAT symuluje kwantyzację w treningu, więc model uczy się ją znosić i lepiej trzyma jakość w 4 bitach i niżej. Kosztem jest trening, więc QAT robi zwykle autor modelu.
- Czemu aktywacje kwantyzuje się trudniej niż wagi?
- Wagi są znane z góry i można je starannie przeskalować offline. Aktywacje zależą od wejścia i mają duże wartości odstające w kilku kanałach. Pomagają metody przenoszące trudność na wagi (SmoothQuant) i FP8, które ma większy zakres niż INT8.
- Po kwantyzacji do 4 bitów benchmarki są w normie, a użytkownicy skarżą się na kod. Co robisz?
- Średnia z benchmarków ukrywa straty w długich łańcuchach rozumowania i kodzie. Porównaj obie wersje na własnym zestawie z tego obszaru. Jeśli strata jest realna, wróć do 8 bitów albo zostaw wrażliwe warstwy w wyższej precyzji.
- Kiedy kwantyzacja KV cache’u daje więcej niż kwantyzacja wag?
- Przy długich kontekstach i dużym batchu, gdy cache wszystkich rozmów zajmuje więcej pamięci niż wagi. Cache w FP8 mieści dwa razy więcej tokenów, czyli dwa razy więcej rozmów albo dwa razy dłuższy kontekst.
Źródła
- Maarten Grootendorst: A Visual Guide to Quantization
- Kurtic i in.: „Give Me BF16 or Give Me Death”? Accuracy-Performance Trade-Offs in LLM Quantization
- Dettmers i Zettlemoyer: The case for 4-bit precision (2022)
- NVIDIA: Introducing NVFP4
- Red Hat: Accelerating large language models with NVFP4 quantization (2026)