Kvantizacija u praksi: GGUF, Q4_K_M i AWQ
Model od osam milijardi parametara u punoj preciznosti traži šesnaest gigabajta memorije. Isti taj model, kvantizovan, staje u pet i radi gotovo jednako dobro. Cela razlika između „ovo ne može na mom serveru" i „ovo radi bez problema" svodi se na jednu oznaku u imenu fajla.
Ovaj tekst objašnjava šta se tačno dešava kada se model kvantizuje, kako se čitaju oznake tipa Q4_K_M i koji format odgovara kom alatu za pokretanje.
Šta kvantizacija zapravo radi
Model je skup brojeva — težina. Posle treniranja svaka težina je zapisana u šesnaest bitova, kao decimalni broj. Kvantizacija te brojeve zapisuje u manje bitova: osam, pet, četiri, ponekad i manje.
Postupak nije obično zaokruživanje. Težine se dele u blokove, za svaki blok se izračuna faktor skaliranja, pa se pojedinačne vrednosti unutar bloka čuvaju kao mali celi brojevi u odnosu na taj faktor. Zato četvorobitna kvantizacija u praksi troši nešto više od četiri bita po težini — faktori skaliranja se takođe moraju negde zapisati.
Kao što je pokazano u tekstu o proceni VRAM-a, računica je jednostavna: broj parametara pomnožen brojem bajtova po parametru.
| Preciznost | Bajtova po težini | Model od 8B | Model od 70B |
|---|---|---|---|
| FP16 / BF16 | 2 | 16 GB | 140 GB |
| INT8 | 1 | 8 GB | 70 GB |
| INT4 | 0,5 | 4 GB | 35 GB |
Ove brojke su samo težine. Stvarno zauzeće je deset do dvadeset odsto veće zbog KV keša, aktivacija i režije samog alata — o čemu niže ima poseban odeljak.
Čitanje oznake Q4_K_M
Oznaka izgleda kao šifra, ali ima tri jasna dela.
| Deo | Značenje |
|---|---|
Q4 |
Nominalan broj bitova po težini |
_K |
K-kvantizacija: važniji slojevi dobijaju više bitova od ostalih |
_M |
Veličina varijante — S mala, M srednja, L velika |
Starije oznake bez slova K — Q4_0, Q4_1, Q8_0 — ravnomerno tretiraju sve slojeve. Zadržane su zbog kompatibilnosti, ali za četiri i pet bitova k-varijante su bolje pri istoj veličini.
Postoji i treća porodica, IQ — IQ2_XXS, IQ3_M i slično. Te koriste matricu važnosti dobijenu merenjem na uzorku teksta i drže kvalitet znatno bolje na vrlo niskim bitovima. Cena je sporije izvršavanje, naročito na procesoru.
Kako se veličine odnose
Za model od osam milijardi parametara, okvirno:
| Varijanta | Veličina | Gubitak kvaliteta |
|---|---|---|
Q8_0 |
8,5 GB | Praktično nemerljiv |
Q6_K |
6,6 GB | Zanemarljiv |
Q5_K_M |
5,7 GB | Vrlo mali |
Q4_K_M |
4,9 GB | Mali, prihvatljiv za sve namene |
Q3_K_M |
4,0 GB | Primetan, greške u dužem tekstu |
Q2_K |
3,2 GB | Veliki, upotrebljivo samo u nuždi |
Krivulja nije ravnomerna. Između osam i pet bitova gubitak je jedva merljiv, između pet i četiri mali, a ispod četiri počinje naglo da raste. Zato je Q4_K_M podrazumevani izbor gotovo svuda — tu se seče tačka u kojoj se najviše memorije uštedi za najmanje kvaliteta.
Pravilo koje vredi zapamtiti
Kada biraš između većeg modela u nižoj i manjeg u višoj preciznosti pri istoj potrošnji memorije, veći model u Q4_K_M gotovo uvek pobeđuje manji u Q8_0. Broj parametara nosi više nego preciznost njihovog zapisa — sve dok se ne spusti ispod tri bita, gde pravilo prestaje da važi.
Praktično: na kartici od dvadeset četiri gigabajta model od trideset dve milijarde u Q4_K_M daje bolje rezultate od modela od četrnaest milijardi u Q8_0.
Formati i alati
Oznake tipa Q4_K_M pripadaju GGUF formatu. To nije jedini format, i izbor zavisi od toga čime pokrećeš model.
| Format | Alat | Kada ga biraš |
|---|---|---|
| GGUF | Ollama, llama.cpp, LM Studio | Jedan korisnik, mešano CPU i GPU, skromniji hardver |
| AWQ | vLLM, SGLang | Više paralelnih zahteva, sve na GPU-u |
| GPTQ | vLLM, TGI | Stariji, koristi se kad AWQ varijanta ne postoji |
| FP8 | vLLM | Novije kartice sa hardverskom podrškom, gotovo bez gubitka |
| bitsandbytes | Transformers | Dodatno treniranje, ne za produkciju |
Formati nisu međusobno zamenljivi. vLLM ne učitava GGUF na način na koji to radi llama.cpp, a Ollama ne prihvata AWQ. Format se bira zajedno sa alatom, ne posle njega.
GGUF i mešano izvršavanje
Glavna prednost GGUF-a je što deo slojeva može ostati na procesoru kada model ne stane ceo u karticu. To je razlog zašto se model od trideset milijardi uopšte može pokrenuti na kartici od dvanaest gigabajta.
Cena je drastična. Kao što pokazuje poređenje procesorske i grafičke inferencije, svaki sloj koji se prelije na procesor povlači brzinu naniže, i to nesrazmerno broju prelivenih slojeva.
Kvantizacija KV keša
Težine nisu jedino što troši memoriju. Kontekst se čuva u KV kešu, a on raste sa dužinom razgovora i može premašiti sam model.
Za dugačke kontekste keš se takođe može kvantizovati. U llama.cpp:
$ llama-server -m model.gguf \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
-c 32768
U Ollama, kroz varijablu okruženja:
$ OLLAMA_KV_CACHE_TYPE=q8_0 ollama serve
Osmobitni keš prepolovi njegovo zauzeće uz gubitak koji se u praksi ne primećuje. Četvorobitni ide dalje, ali tu kvalitet dugih razgovora počinje da trpi.
Izbor u praksi
Ollama
Varijanta se navodi u oznaci modela:
$ ollama pull qwen3:8b-q4_K_M $ ollama pull qwen3:8b-q8_0
Bez navedene varijante Ollama uzima podrazumevanu, po pravilu četvorobitnu:
$ ollama pull qwen3:8b
Šta je preuzeto i koliko zauzima:
$ ollama list NAME ID SIZE MODIFIED qwen3:8b-q4_K_M a1b2c3d4e5f6 4.9 GB 2 hours ago qwen3:8b-q8_0 f6e5d4c3b2a1 8.5 GB 5 days ago
Detalji o učitanom modelu:
$ ollama show qwen3:8b-q4_K_M
Hugging Face
Kvantizovane verzije stoje u zasebnim repozitorijumima, obično sa sufiksom -GGUF, -AWQ ili -GPTQ u imenu. Unutar GGUF repozitorijuma stoji više fajlova, po jedan za svaku varijantu. Preuzimanje i organizacija fajlova biće obrađeni u posebnom tekstu o Hugging Face CLI alatu (u pripremi).
Sopstvena kvantizacija
Ako varijanta koja ti treba ne postoji, pravi se iz llama.cpp:
$ ./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M
Spisak svih podržanih tipova:
$ ./llama-quantize --help
U najvećem broju slučajeva ovo nije potrebno — popularni modeli imaju sve varijante spremne.
Merenje gubitka
Standardna mera je perpleksnost, izračunata nad istim tekstom za obe verzije modela:
$ ./llama-perplexity -m model-q4_k_m.gguf -f test.txt
Niža vrednost je bolja, a poredi se isključivo isti model u različitim varijantama. Poređenje između različitih modela ovim putem ne znači ništa.
U svakodnevnom radu je korisnija jednostavna provera: pusti dvadesetak zadataka kakve stvarno radiš kroz obe varijante i uporedi odgovore. Ako razliku ne primećuješ, nema razloga da držiš veću.
Praktični scenariji
Scenario 1: model staje u memoriju ali je spor
Proveri koliko je slojeva stvarno na kartici. Ako je kontekst velik, KV keš je pojeo prostor i deo modela se prelio na procesor. Rešenje je manji kontekst, kvantizovan keš ili niža varijanta modela.
Scenario 2: model greši u kodu, a u razgovoru je uredan
Kod je osetljiviji na kvantizaciju od proznog teksta — jedan pogrešan znak kvari ceo ispis. Pređi sa Q4_K_M na Q5_K_M ili Q6_K i uporedi.
Scenario 3: mali model daje besmislice
Modeli ispod četiri milijarde parametara mnogo lošije podnose agresivnu kvantizaciju od velikih. Za takve drži bar Q5_K_M, a Q8_0 ionako zauzima malo.
Scenario 4: vLLM odbija da učita fajl
Verovatno je u pitanju GGUF. Nađi AWQ ili FP8 verziju istog modela, ili pređi na llama.cpp za taj fajl.
Scenario 5: biraš između dva modela za istu karticu
Uzmi veći model u nižoj varijanti, sve dok ne siđeš ispod tri bita. Proveri obavezno i koliko ostaje slobodno za kontekst — model koji taman stane nema gde da smesti razgovor.
Kratka referenca
Q4_K_M— podrazumevani izbor za većinu postavkiQ5_K_M,Q6_K— kada ima memorije na pretek ili kod mora da bude tačanQ8_0— za male modele i za poređenje kao referencaQ3i niže — samo kada drugačije ne ide_K— k-kvantizacija, bolja od starih_0i_1IQ— bolji kvalitet na niskim bitovima, sporije izvršavanje- GGUF — Ollama i llama.cpp, mešano CPU i GPU
- AWQ, GPTQ, FP8 — vLLM, sve na GPU-u
ollama pull model:8b-q4_K_M— izbor varijanteollama list— veličina preuzetih modelallama-quantize ulaz.gguf izlaz.gguf Q4_K_M— sopstvena kvantizacija--cache-type-k q8_0— kvantizovan KV keš- Veći model u Q4 nadmašuje manji u Q8 pri istoj potrošnji memorije
- Ispod četiri bita kvalitet pada naglo, ne postepeno
Vežba
- Izračunaj koliko memorije traži model od četrnaest milijardi parametara u
Q4_K_M, pa proveri rezultat stvarnom veličinom fajla. - Preuzmi isti model u dve varijante i uporedi ispis komande
ollama list. - Postavi istih pet pitanja obema varijantama i zapiši gde se odgovori razlikuju.
- Prati
nvidia-smitokom rada obe varijante i uporedi zauzeće memorije sa veličinom fajla. - Pokreni model sa kontekstom od trideset dve hiljade tokena, pa isto to sa kvantizovanim KV kešom, i uporedi razliku u zauzeću.
Sledeći tekst u serijalu: Ollama: instalacija na Linux serveru od nule (u pripremi)
Povezano:
- AI na Linux serveru — pregled celog serijala
- nvidia-smi i nvtop — prethodni tekst
- Koliko VRAM-a ti stvarno treba — računica na kojoj se ovaj tekst zasniva
- CPU inferencija naspram GPU inferencije — zašto prelivanje na procesor toliko košta
Comments
Post a Comment