Robocikowo>ROBOCIKOWO
Wnioskowanie

K-quants

2023AktywnyOpublikowano: 29 września 2026Aktualizacja: 29 września 2026Opublikowany
Rodzina schematów kwantyzacji z llama.cpp/GGML (Q2_K–Q6_K, warianty _S/_M/_L) używająca super-bloków 256 wag i osobno kwantyzowanych skal i minimów.
Kluczowa innowacja
Kwantyzacja blokowa z super-blokami po 256 wag i osobno kwantyzowanymi skalami oraz minimami, dająca lepszy kompromis jakość/rozmiar niż wcześniejsze formaty Q4_0/Q4_1 dla lokalnej inferencji LLM.
Kategoria
Wnioskowanie
Poziom abstrakcji
Wzorzec
Poziom operacji
InferencjaUdostępnianieWdrożenie
Zastosowania
Lokalna inferencja LLM na CPUUruchamianie dużych modeli na GPU z ograniczoną pamięcią VRAMDystrybucja skwantyzowanych modeli w formacie GGUFInferencja na urządzeniach brzegowych i laptopachKompresja modeli open-weight (Llama, Mistral, Qwen itp.)

Jak działa

1) Wagi tensora dzielone są na super-bloki po 256 wag. 2) Super-blok dzieli się na mniejsze bloki: 16 bloków po 16 wag (Q2_K, Q3_K, Q6_K) albo 8 bloków po 32 wagi (Q4_K, Q5_K). 3) Każdy blok ma własną skalę; typy „type-1" (Q2_K, Q4_K, Q5_K) mają też własne minimum (wzór w = q · block_scale + block_min), a typy „type-0" (Q3_K, Q6_K) używają tylko skali (w = q · block_scale). 4) Same skale i minima są kwantyzowane osobno przy niskiej precyzji (np. 4-bit dla Q2_K, 6-bit dla Q3_K/Q4_K/Q5_K, 8-bit dla Q6_K), co daje efektywne bity na wagę: ok. 2,6 (Q2_K), 3,4375 (Q3_K), 4,5 (Q4_K), 5,5 (Q5_K), 6,5625 (Q6_K). 5) Warianty _S/_M/_L przypisują różne typy K-quant różnym tensorom modelu, balansując rozmiar i jakość. 6) Podczas inferencji bloki są dekwantyzowane w locie do mnożeń macierzowych; Q8_K służy do kwantyzacji wyników pośrednich w produktach skalarnych.

Rozwiązany problem

Wcześniejsze formaty round-to-nearest (Q4_0, Q4_1) z pojedynczą skalą na 32-wagowy blok traciły dużo jakości przy niskich bitach na wagę. K-quants ograniczają ten spadek jakości przy zbliżonym lub mniejszym rozmiarze, umożliwiając uruchamianie dużych modeli LLM na sprzęcie konsumenckim (CPU, ograniczona pamięć GPU).

Komponenty

Super-blok (256 wag)Grupowanie wag i wspólna kwantyzacja skal/minimów

Podstawowa jednostka kwantyzacji K-quant obejmująca 256 wag, dzielona dalej na mniejsze bloki. Wymaga, aby rozmiar wiersza tensora był podzielny przez 256.

Blok wewnętrzny (16 lub 32 wagi)Lokalna skala i minimum dla podzbioru wag

Mniejszy blok wewnątrz super-bloku: 16 wag (Q2_K, Q3_K, Q6_K) lub 32 wagi (Q4_K, Q5_K). Każdy blok ma własną skalę (i minimum w type-1).

Kwantyzowane skale i minimaOdtworzenie wartości wag: w = q · scale (+ min)

Skale (oraz minima w typach type-1) są kwantyzowane osobno przy niskiej precyzji: 4-bit (Q2_K), 6-bit (Q3_K/Q4_K/Q5_K), 8-bit (Q6_K). To one dają narzut ponad nominalną liczbę bitów kwantyzacji.

Mieszanki _S/_M/_LDobór precyzji per tensor

Predefiniowane mieszanki (small/medium/large) przypisujące różne typy K-quant do różnych tensorów (attention, feed-forward, wyjście), np. Q4_K_M, Q5_K_M, Q3_K_L, aby optymalizować kompromis perplexity/rozmiar.

Oficjalna

Implementacja

Pułapki implementacyjne
Wymóg podzielności przez 256Średnia

Rozmiar wiersza tensora musi być podzielny przez 256 (rozmiar super-bloku). Tensory, które tego nie spełniają, są kwantyzowane innym typem (np. fallback do Q8_0).

Silny spadek jakości przy Q2_KWysoka

Najniższe typy (zwł. Q2_K) mocno podnoszą perplexity; bez macierzy ważności (imatrix) jakość małych modeli potrafi znacząco spaść.

Mylące oznaczenia _S/_M/_LNiska

Warianty _S/_M/_L to mieszanki wielu typów per tensor, a nie pojedynczy bit-width; realny rozmiar i jakość zależą od konkretnej mieszanki, nie tylko od głównej liczby (np. Q4_K_M vs Q4_K_S).

Ewolucja

2023
Wprowadzenie K-quants w llama.cpp (PR #1684)
Punkt przełomowy

Iwan Kawrakow dodaje typy Q2_K–Q6_K oraz Q8_K wraz z mieszankami _S/_M/_L.

2024
Integracja macierzy ważności (imatrix)

Kwantyzacja z użyciem macierzy ważności poprawia jakość K-quant (i I-quant) przy niskich bitach na wagę.

2024
Pojawienie się I-quants jako uzupełnienia

Nowa rodzina IQ (IQ2_XXS, IQ3_S, IQ4_NL itd.) oparta na importance matrix osiąga niższe bity na wagę niż K-quants.

Złożoność obliczeniowa

Złożoność przestrzenna: ~2.6–6.6 bit/wagę.

Równoległość

Poziom równoległości
W pełni równoległy

Dekwantyzacja bloków jest niezależna między blokami/super-blokami, więc łatwo się zrównolegla na CPU (SIMD) i GPU.

Zakres
Inferencja

Wymagania sprzętowe

Podstawowe

K-quants zaprojektowano głównie pod wydajną inferencję na CPU (AVX2/AVX-512, ARM NEON) w llama.cpp/GGML.

Dobry fit

Istnieją zoptymalizowane kernele CUDA/Metal do dekwantyzacji K-quant, umożliwiające inferencję i offloading na GPU.