Kwantyzacja modeli językowych: co naprawdę tracisz, schodząc do czterech bitów

Cztery bity zamiast szesnastu to model czterokrotnie mniejszy i szybszy w generowaniu. Sprawdzamy, gdzie kończy się oszczędność, a zaczyna realna utrata jakości.

Abstrakcyjna ilustracja gęstej siatki drobnych, świecących komórek po lewej stronie, przechodzącej w grube, segmentowane bloki po prawej, na ciemnym tle.

Ośmiomiliardowy model zapisany w połowie precyzji zajmuje około 16 GB pamięci. Ten sam model po kwantyzacji do czterech bitów mieści się w niecałych 5 GB. To różnica, która decyduje, czy uruchomisz go na karcie 8 GB, czy wcale. Kwantyzacja nie jest jednak darmowym skrótem, bo zmienia rozdzielczość zapisu wag i dokłada błąd, którego nie widać w jednej odpowiedzi, ale który potrafi ujawnić się w dłuższej pracy.

Co właściwie dzieje się z wagami

Sieć neuronowa przechowuje wagi jako liczby zmiennoprzecinkowe, zwykle 16-bitowe. Kwantyzacja zamienia je na liczby całkowite o małej rozdzielczości, na przykład 4-bitowe, i dokłada skalę, czyli mnożnik pozwalający odtworzyć przybliżoną wartość.[5] Wagi nie są przy tym kwantyzowane pojedynczo. Dzieli się je na bloki, typowo po 32 lub 128 liczb, i każdy blok dostaje własną skalę. Im mniejszy blok, tym mniejszy błąd, ale tym więcej miejsca zajmują same skale.

Liczba parametrów się nie zmienia, architektura też nie. Zmienia się zapis, a przy wnioskowaniu dochodzi dodatkowa praca: wagi trzeba w locie odtworzyć przed mnożeniem. Zysk jest podwójny. Model zajmuje mniej pamięci, a przy generowaniu tekstu, gdzie wąskim gardłem jest zwykle przepustowość pamięci, dane szybciej docierają do rdzeni.

Dlaczego cztery bity prawie zawsze wygrywają

Największe badanie tego kompromisu wykonali Tim Dettmers i Luke Zettlemoyer. Przeprowadzili ponad 35 tysięcy eksperymentów na modelach od 19 milionów do 176 miliardów parametrów i sprawdzali, jaka kombinacja rozmiaru modelu oraz precyzji daje najlepsze wyniki w testach zero-shot.[1] Wniosek jest dość jednoznaczny: czterobitowa precyzja jest niemal uniwersalnie optymalna, jeśli liczyć łącznie koszt pamięci i jakość. Istotne okazały się dwa czynniki: mały blok kwantyzacji oraz typ danych, na przykład liczby całkowite zamiast zmiennoprzecinkowych.

Osobno działa metoda GPTQ, która kwantyzuje już wytrenowany model, korygując błędy warstwa po warstwie. Autorzy pokazali, że 175-miliardowy model da się sprowadzić do trzech lub czterech bitów w około cztery godziny na jednej karcie GPU, z degradacją opisaną jako pomijalna.[2] Przy dwóch bitach metoda nadal daje wyniki określane jako rozsądne, ale to już inna klasa jakości i inny poziom ryzyka.

Perplexity nie mówi całej prawdy

Podstawową miarą strat jest perplexity oraz dywergencja KL, czyli porównanie rozkładu prawdopodobieństw modelu skwantyzowanego z modelem wyjściowym.[5] Obie metryki są przydatne, bo tanie i powtarzalne, ale mierzą średnią na korpusie testowym. Model może wypadać dobrze średnio, a jednocześnie psuć format JSON, gubić nawiasy w kodzie albo przestawać trzymać się długiej instrukcji. Do tego dochodzi efekt progu: przy czterech bitach różnice bywają niewielkie, przy trzech i dwóch rosną szybciej niż liniowo.

Q4_K_M, Q5_K_S i imatrix, czyli co znaczą nazwy plików

W formacie GGUF oznaczenia typu Q4_K_M opisują nie jedną precyzję, a mieszankę. Litera K oznacza rodzinę metod k-quants, liczba przybliżoną liczbę bitów na wagę, a końcówka wariant. Q4_K_M trzyma część warstw w wyższej precyzji niż cztery bity, dlatego w przykładzie z dokumentacji llama.cpp wychodzi 4,89 bita na wagę, podczas gdy prostszy Q4_K_S daje 4,67.[5] Opcja –pure wyłącza takie mieszanki i kwantyzuje wszystko jednakowo.

Drugi element to imatrix, czyli macierz ważności policzona na próbce tekstu. Zamiast traktować wszystkie wagi równo, kalibracja pokazuje, które połączenia mają większy wpływ na wynik, i im zostawia się więcej precyzji. Dokumentacja llama.cpp wprost mówi, że pozwala to zmniejszyć stratę jakości.[5] Podobny pomysł stoi za metodą AWQ: autorzy zauważyli, że nie wszystkie wagi są równie ważne, a ochrona około 1% najbardziej istotnych potrafi mocno zmniejszyć błąd kwantyzacji. Co ważne, te wagi trzeba wybierać na podstawie rozkładu aktywacji, a nie samych wartości wag.[4]

Jest też pułapka techniczna. Ponowna kwantyzacja już skwantyzowanego pliku jest w dokumentacji oznaczona ostrzeżeniem, że może poważnie obniżyć jakość w porównaniu z wyjściem z 16 lub 32 bitów.[5] Innymi słowy, Q4 zrobione z Q8 to nie to samo co Q4 zrobione z BF16.

Kiedy cztery bity wystarczą

Jeśli model ma pisać swobodny tekst, streszczać i odpowiadać na pytania, czterobitowa wersja zwykle wystarcza. Jeżeli ma generować kod, liczyć, wypełniać ścisłe schematy albo pracować na długim kontekście, warto zostać przy pięciu lub sześciu bitach. Wybór nie jest zero-jedynkowy, bo przy stałym budżecie pamięci większy model w czterech bitach często wypada lepiej niż mniejszy w ośmiu. Liczba parametrów waży więcej niż precyzja zapisu.[1]

Osobno trzeba policzyć pamięć na kontekst. Wagi to nie wszystko, bo cache kluczy i wartości rośnie z każdym tokenem i przy długich rozmowach potrafi przewyższyć oszczędność z kwantyzacji. Dlatego w praktyce liczy się nie samo „czy cztery bity”, tylko ile miejsca zostaje na obsługę kontekstu.

Kwantyzacja a trening i dostrajanie

Warto rozdzielić dwie rzeczy, które w dyskusjach często się zlepiają. Kwantyzacja wag przyspiesza wnioskowanie, ale nie zmniejsza liczby operacji zmiennoprzecinkowych potrzebnych do treningu. Trenowanie modelu w czterech bitach to osobny problem badawczy, a nie efekt uboczny kompresji pliku.

Inaczej wygląda dostrajanie. Metoda QLoRA zamraża czterobitowy model i uczy jedynie niewielkie adaptery LoRA, które dopisują się do wybranych warstw. Autorzy pokazali, że taki trening 65-miliardowego modelu mieści się na jednej karcie 48 GB i osiąga wyniki porównywalne z dostrajaniem w pełnej precyzji.[3] To ważny wyjątek od zasady „kwantyzacja tylko do wnioskowania”: przy dostrajaniu quantized base bywa nie stratą, a warunkiem, żeby zadanie w ogóle zmieściło się w pamięci.

Jak sprawdzić własny przypadek

Najprostszy test nie wymaga laboratorium. Weź kilkanaście zadań ze swojej pracy, uruchom je na wersji szesnastobitowej i na tej, którą chcesz wdrożyć, a potem porównaj nie tylko treść odpowiedzi, ale też stabilność formatu przy powtórzeniach. Jeśli model ma zwracać JSON, sprawdź, czy udaje mu się to przy dwudziestu próbach. Gdy różnice widać tylko w stylu, kwantyzacja spełniła zadanie. Gdy pojawiają się błędy w liczbach lub strukturach, oszczędność pamięci jest pozorna.

Kwantyzacja jest więc kompromisem inżynierskim, a nie trikiem marketingowym. Zmienia rozdzielczość wag, dodaje błąd zależny od rozmiaru bloku i kalibracji, a jej skutki zależą od zadania. Cztery bity to dziś rozsądny punkt startowy, ale nie uniwersalna odpowiedź na każde obciążenie.

Źródła

  1. Tim Dettmers, Luke Zettlemoyer, „The case for 4-bit precision: k-bit Inference Scaling Laws”, arXiv:2212.09720, 19 grudnia 2022, wersja 2 z 28 lutego 2023. https://arxiv.org/abs/2212.09720
  2. Elias Frantar, Saleh Ashkboos, Torsten Hoefler, Dan Alistarh, „GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers”, arXiv:2210.17323, 31 października 2022. https://arxiv.org/abs/2210.17323
  3. Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, Luke Zettlemoyer, „QLoRA: Efficient Finetuning of Quantized LLMs”, arXiv:2305.14314, 23 maja 2023. https://arxiv.org/abs/2305.14314
  4. Ji Lin i in., „AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration”, arXiv:2306.00978, 1 czerwca 2023. https://arxiv.org/abs/2306.00978
  5. ggml-org, dokumentacja narzędzia quantize w projekcie llama.cpp, odczyt 23 października 2026. https://github.com/ggml-org/llama.cpp/blob/master/tools/quantize/README.md

Kuba

Autor w Teknews

Pisze o sztucznej inteligencji i internecie. Najbardziej lubi rozbierać na części to, co inni nazywają magią: tokeny, okna kontekstu, algorytmy rekomendacji. Zanim napisze, że coś działa w określony sposób, szuka tego w dokumentacji albo w publikacji, a nie w wątku na X.

Jak powstają nasze teksty