I-quants
Jak działa
1) Wagi tensora dzielone są na super-bloki po 256 wag ze wspólną skalą (super_block_scale). 2) Zamiast kwantyzacji round-to-nearest, grupy wag są kodowane za pomocą książki kodów (codebook) opartej na kratownicy E8 — z góry ustalonego zbioru punktów, do których dopasowuje się wagi; np. IQ2_XXS używa 256-punktowego codebooka wybranego na podstawie częstości występowania. 3) Znaki są kodowane osobno (strategia sign-flipping utrzymująca parzystą liczbę ujemnych znaków w grupie), co oszczędza bity. 4) Wybór kwantów jest sterowany macierzą ważności (imatrix) zebraną na tekście kalibracyjnym — wagi ważniejsze dla wyjścia modelu są odwzorowywane dokładniej. 5) Efektywna liczba bitów na wagę zależy od wariantu: ~1,56 (IQ1_S), 1,75 (IQ1_M), 2,06 (IQ2_XXS), 2,31 (IQ2_XS), 2,5 (IQ2_S), 3,06 (IQ3_XXS), 3,44 (IQ3_S), 4,25 (IQ4_XS); IQ4_NL to 4-bitowy wariant nieliniowy (non-linear). 6) Podczas inferencji wagi są odtwarzane z indeksów codebooka i skali; odczyty z tablicy kodów są droższe niż proste mnożenie w K-quants, stąd wolniejsza inferencja na części sprzętu.
Rozwiązany problem
K-quants tracą jakość przy najniższych ustawieniach (zwłaszcza 2–3 bity na wagę), a uruchomienie bardzo dużych modeli na sprzęcie konsumenckim wymaga jeszcze silniejszej kompresji. I-quants pozwalają zejść do ~1,5–2 bitów na wagę przy mniejszej utracie jakości niż K-quants o tym samym rozmiarze, umożliwiając mieszczenie większych modeli w ograniczonej pamięci.
Komponenty
Z góry ustalony zbiór punktów oparty na wysoko symetrycznej kratownicy E8 (np. 256-punktowy codebook dla IQ2_XXS), do którego dopasowywane są grupy wag. Idea zapożyczona z QuIP#.
Statystyki aktywacji zebrane na tekście kalibracyjnym, wskazujące które wagi najsilniej wpływają na wyjście modelu; sterują doborem kwantów, minimalizując utratę jakości. Dla najniższych typów IQ praktycznie wymagana.
Oficjalna
Podstawowa jednostka kwantyzacji obejmująca 256 wag ze wspólną skalą (super_block_scale). Wymaga, aby rozmiar wiersza tensora był podzielny przez 256.
Strategia kodowania znaków utrzymująca parzystą liczbę ujemnych elementów w grupie, dzięki czemu jeden znak jest wyprowadzany z pozostałych i oszczędza się bity. Element zapożyczony z QuIP#.
Oficjalna
Implementacja
Odczyty z książki kodów zwiększają narzut obliczeniowy; na CPU i słabszych GPU I-quants bywają wolniejsze niż K-quants o podobnym rozmiarze.
Najniższe typy (IQ1/IQ2) bez dobrej macierzy ważności mocno tracą jakość; wynik zależy od reprezentatywności danych kalibracyjnych.
Rozmiar wiersza tensora musi być podzielny przez 256; tensory, które tego nie spełniają, są kwantyzowane innym typem (fallback).
Ewolucja
Praca QuIP# (Tseng i in., ICML 2024) formalizuje kwantyzację LLM z użyciem kratownicy E8 i niespójności Hadamarda; jej idee zainspirowały I-quants.
Iwan Kawrakow dodaje IQ2_XXS i IQ2_XS („SOTA 2-bit quants") z kodowaniem w stylu QuIP# i macierzą ważności.
Rozszerzenie rodziny o 4-bitowe typy nieliniowe (IQ4_NL, później IQ4_XS ~4,25 bpw).
Dodanie skrajnie niskobitowych typów IQ1_S (~1,56 bpw) i IQ1_M (~1,75 bpw).
Hiperparametry (konfigurowalne osie)
Wybór wariantu (IQ1_S … IQ4_XS) wyznaczający efektywną liczbę bitów na wagę i kompromis jakość/rozmiar.
Obecność i jakość macierzy ważności oraz reprezentatywność tekstu kalibracyjnego; dla najniższych typów IQ praktycznie wymagana.
Złożoność obliczeniowa
Złożoność przestrzenna: ~1.56–4.25 bit/wagę.
Równoległość
Dekodowanie super-bloków jest niezależne, więc łatwo się zrównolegla; wąskim gardłem bywają odczyty z książki kodów, nie zależności między blokami.
Wymagania sprzętowe
Istnieją kernele CUDA/Metal do dekodowania I-quants; np. IQ2_XXS osiąga ok. 155 t/s na RTX-4080 (CUDA) i 54 t/s na M2 Max (Metal) dla Mistral-7B.
Odczyty z książki kodów są kosztowniejsze niż proste mnożenie w K-quants, przez co inferencja I-quants bywa wolniejsza na CPU.