TakéKvantizace neuronové sítě, Quantization, INT8 kvantizace, Post-training quantizationPokročilý

Definice

Kvantizace modelu je převod vah a někdy i aktivací neuronové sítě z přesnějšího číselného formátu, typicky 32bitového float, do formátu s menším počtem bitů, například INT8 nebo 4bitového celého čísla. Model tím zabere méně paměti a počítá rychleji, výměnou za malou a měřitelnou ztrátu přesnosti výstupů.

Kategorie: Strojové učeníAktualizováno

Nezaměňujte: Ve zpracování signálu a v grafice znamená kvantizace obecné zaokrouhlení spojité veličiny na diskrétní úrovně (například barevná hloubka), zatímco kvantizace modelu se týká výhradně parametrů neuronové sítě.

Než se na to spolehnete: Uvedené velikosti (7B ve FP16 ≈ 14 GB, 4bit ≈ 4 GB, 70B ve FP16 ≈ 140 GB) jsou zaokrouhlené odhady odvozené z počtu parametrů, ne měřená čísla konkrétní implementace. Oblast se rychle vyvíjí, konkrétní metody (GPTQ, AWQ, FP8) a jejich hardwarová podpora se mohou měnit.

Co se s čísly v modelu vlastně stane

Váhy natrénované neuronové sítě jsou obyčejná desetinná čísla, standardně uložená ve 32 bitech (FP32). Kvantizace modelu tato čísla nahradí hrubší mřížkou hodnot. U INT8 existuje jen 256 úrovní, u 4bitových formátů dokonce 16. Aby to fungovalo, ke každé skupině vah se dopočítá měřítko (scale) a případně posun (zero point), které mřížku roztáhnou na skutečný rozsah hodnot: real ≈ scale * (q - zero_point).

Klíčové je, jak jemně se měřítko počítá. Jedno měřítko na celý tenzor je nejlevnější, ale jediná odlehlá váha roztáhne rozsah a zbytek hodnot se slepí dohromady. Proto se v praxi měřítko počítá per kanál nebo po blocích několika desítek hodnot, což u velkých jazykových modelů dělá rozdíl mezi použitelným a rozbitým výstupem.

Proč to zrychluje, i když jde jen o paměť

Inference velkého modelu bývá omezená propustností paměti, ne výpočtem. Načíst 70 miliard vah ve FP16 znamená přesunout zhruba 140 GB dat na každý průchod; ve 4 bitech je to řádově kolem 35 GB. Menší objem dat znamená kratší čekání a také to, že se model vejde do VRAM jedné karty místo několika. Navíc moderní GPU a NPU mají dedikované jednotky pro celočíselné násobení, takže při plné INT8 cestě roste i surový výpočetní výkon.

Po trénování, nebo během něj

Post-training quantization

Post-training quantization (PTQ) vezme hotový model a převede ho bez dalšího učení. Kalibrace na několika stovkách reprezentativních vzorků zjistí typické rozsahy aktivací. PTQ je rychlá záležitost v řádu minut až hodin a u INT8 obvykle stačí.

Quantization-aware training

Quantization-aware training (QAT) simuluje zaokrouhlování už během trénování nebo dolaďování, takže se model naučí být vůči hrubší mřížce odolný. QAT stojí výpočetní čas navíc, ale u agresivních režimů (4 bity a méně) nebo u malých modelů pro mobil vrací většinu ztracené přesnosti.

Kde kvantizace bolí

Ztráta přesnosti není rovnoměrná. Průměrná metrika může klesnout zanedbatelně, zatímco konkrétní schopnost, typicky práce s čísly, dlouhý kontext nebo méně zastoupený jazyk, se rozpadne. U jazykových modelů se také po tvrdé kvantizaci častěji objevují halucinace u okrajových dotazů. Proto se kvantizovaný model vždy vyhodnocuje na stejné testovací sadě jako originál, ne jen "od oka" podle několika promptů.

Druhý problém je podpora hardwaru a runtime. Formát, který na serverové GPU běží nativně, může na mobilním čipu spadnout do emulace a být pomalejší než původní model. Zisk je proto vždy nutné změřit na cílovém zařízení.

Formáty, které se dnes potkávají v praxi

  • INT8: nejrozšířenější kompromis, dobře podporovaný napříč hardwarem.
  • FP16 a BF16: poloviční přesnost, technicky spíš snížení přesnosti než klasická kvantizace.
  • GPTQ, AWQ: 4bitové metody pro jazykové modely, které váhy kvantizují s ohledem na chybu na reálných datech.
  • GGUF: kontejner s několika úrovněmi kvantizace používaný pro běh modelů na CPU i běžných GPU.

Příklady z praxe

  1. Model 7B na notebooku bez dedikované grafiky

    Jazykový model se 7 miliardami parametrů zabírá ve FP16 zhruba 14 GB, což se do běžného notebooku nevejde. Po 4bitové kvantizaci do formátu GGUF klesne velikost souboru přibližně na 4 GB a model se rozběhne na CPU s 8 GB volné RAM. Odezva je v jednotkách tokenů za sekundu a kvalita odpovědí u běžných úloh zůstává blízko originálu.

  2. INT8 kvantizace klasifikátoru v PyTorch

    U menší konvoluční sítě pro klasifikaci obrázků stačí dynamická post-training kvantizace lineárních vrstev. Model se zmenší přibližně čtyřnásobně a inference na CPU zrychlí, aniž by se sahalo na trénovací pipeline. Přesnost se pak porovná na stejné validační sadě jako u FP32 verze.

    import torch
    
    model_fp32 = MyClassifier()
    model_fp32.load_state_dict(torch.load("model.pt"))
    model_fp32.eval()
    
    model_int8 = torch.quantization.quantize_dynamic(
        model_fp32,
        {torch.nn.Linear},
        dtype=torch.qint8,
    )
    
    torch.save(model_int8.state_dict(), "model_int8.pt")

Časté omyly

MýtusKvantizace model zrychlí vždy, je to přece méně bitů.
Ve skutečnostiZrychlení nastane jen tehdy, když cílový hardware a runtime umí daný formát počítat nativně. Pokud se kvantizované váhy musí za běhu rozbalovat zpět do float, výsledek může být pomalejší než původní model.
MýtusČtyřbitová kvantizace model prakticky nezhorší, testy to ukazují.
Ve skutečnostiPrůměrné skóre na běžných benchmarcích opravdu klesá málo, ale ztráta se koncentruje do konkrétních schopností: aritmetika, dlouhý kontext, méně zastoupené jazyky nebo přesné dodržení formátu výstupu. Bez vlastního vyhodnocení na cílové úloze je číslo z benchmarku málo vypovídající.
MýtusKvantizovaný model se nedá dál dolaďovat.
Ve skutečnostiDoladění kvantizovaného modelu je běžná praxe, typicky pomocí adaptérů LoRA nad zmrazenými kvantizovanými vahami. Alternativou je quantization-aware training, kdy se zaokrouhlování simuluje přímo během učení.

Časté dotazy

Kolik paměti kvantizace modelu reálně ušetří?
Kvantizace modelu zmenšuje váhy zhruba podle poměru bitových šířek. Přechod z 32 bitů na 8 bitů znamená přibližně čtyřnásobnou úsporu, z 16 bitů na 4 bity zhruba čtyřnásobnou také. Úspora se ale netýká celé paměťové stopy: při inferenci zabírá místo i cache klíčů a hodnot, aktivace a režie runtime, které kvantizované být nemusí. U dlouhého kontextu může KV cache dokonce převážit velikost samotných vah, takže reálná úspora bývá menší, než napovídá poměr bitů.
Jak poznám, že kvantizace poškodila model příliš?
Poškození se pozná srovnávacím měřením proti původnímu modelu na stejné testovací sadě, ideálně složené z úloh, které aplikace skutečně řeší. U jazykových modelů se sleduje perplexita jako rychlý indikátor a vedle toho konkrétní metriky úlohy: přesnost odpovědí, dodržení JSON formátu, kvalita ve výstupním jazyce. Varovné signály jsou opakování textu, rozpad na delších vstupech a chyby v jednoduchých výpočtech. Pokud pokles překročí předem stanovenou hranici, je namístě mírnější formát nebo quantization-aware training.
Který kvantizační formát zvolit pro nasazení na server s GPU?
Pro serverové GPU je rozumným výchozím bodem INT8 nebo FP8 tam, kde ho čip podporuje, protože obojí běží nativně na tensor jednotkách a nabízí předvídatelnou kvalitu. Pokud je limitem VRAM, sahá se u jazykových modelů po 4bitových metodách typu GPTQ nebo AWQ, které kvantizují váhy s ohledem na chybu měřenou na kalibračních datech. Volbu vždy rozhoduje kombinace hardwaru a inference runtime, ne samotný formát: stejná váhová reprezentace může mít na dvou serverech výrazně odlišnou propustnost.
Vyplatí se kvantizace i u malých modelů na mobilu?
Kvantizace modelu má na mobilních zařízeních obvykle větší přínos než na serveru, protože šetří baterii, paměť i čas startu aplikace. Mobilní NPU a DSP navíc často počítají výhradně celočíselně, takže INT8 je zde spíš podmínkou nasazení než optimalizací. U malých sítí ale bývá citlivost na kvantizaci vyšší, protože chyba se rozloží mezi méně parametrů. Proto se u nich častěji sahá po quantization-aware training, které ztrátu přesnosti z velké části vrátí zpět.

Zdroje

  1. Quantization(otevře se v novém okně)PyTorch
  2. Post-training quantization(otevře se v novém okně)TensorFlow
  3. Quantization(otevře se v novém okně)Hugging Face
  4. Quantization (signal processing)(otevře se v novém okně)Wikipedia

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.