## Kwantyzacja

*Model na produkcji*

*Ostatnia zmiana: 28 września 2026*

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 ludzku:** Zdję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.

*Interaktywny widżet na stronie: Zmniejszaj liczbę bitów, dodaj wartość odstającą, a potem włącz osobną skalę dla bloków. Patrz na błąd zaokrągleń.*

*Interaktywny widżet na stronie: Wybierz rozmiar modelu i zobacz, na czym zmieszczą się same wagi. Liczbę bitów zmieniasz w widżecie powyżej.*

### 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ę

**Pytanie:** Co daje kwantyzacja, co się traci i jaki format wybierzesz?

**Krótka odpowiedź:** 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.

### Pytania pogłębiające

- **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](https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization)
- [Kurtic i in.: „Give Me BF16 or Give Me Death”? Accuracy-Performance Trade-Offs in LLM Quantization](https://arxiv.org/abs/2411.02355)
- [Dettmers i Zettlemoyer: The case for 4-bit precision (2022)](https://arxiv.org/abs/2212.09720)
- [NVIDIA: Introducing NVFP4](https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/)
- [Red Hat: Accelerating large language models with NVFP4 quantization (2026)](https://developers.redhat.com/articles/2026/02/04/accelerating-large-language-models-nvfp4-quantization)

Strona interaktywna: https://howaiworks.dev/pl/kwantyzacja/
