Gå til indhold
atlas

Kvantisering

Også kendt som: modelkvantisering

At gemme en models tal med færre cifre, så den fylder mindre og kører hurtigere, mod at kvaliteten falder en smule.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

At lave modelvægte, og nogle gange arbejdsværdierne under inferens, om fra meget detaljerede tal (ofte 16 bit hver) til grovere tal (8, 4 eller færre bit) ved at lægge dem over på et mindre sæt tilladte værdier; det mindsker hukommelsesforbruget og gør regningen hurtigere, men tilføjer små fejl, fordi tallene bliver grovere.

Forklaret enkelt

Som at gemme et foto som en mindre fil - det mister lidt fine detaljer, man sjældent bemærker, og til gengæld kan det ligge på telefonen og åbner med det samme.

I praksis

En udvikler i en kommune tester en 8-bit- og en 4-bit-udgave af den samme åbne model på 200 rigtige spørgsmål fra sagsbehandlere; 8-bit-udgaven klarer sig som originalen, 4-bit-udgaven fejler på regnestykker, så hun vælger 8-bit.

Hvorfor det betyder noget

Hukommelsen er som regel det, der begrænser, hvor en model kan køre, og halveres antallet af bit, halveres den omtrent - ofte forskellen på at bruge egen hardware og at leje kapacitet i en andens cloud.

Teknisk uddybning

Grundskemaet er affin (uniform) kvantisering: en reel værdi x afbildes på et heltal q = clamp(round(x / s) + z, q_min, q_max) og genskabes tilnærmelsesvis som x̂ = s · (q − z), hvor s er skalaen og z nulpunktet. Symmetrisk kvantisering fastlåser z = 0 og passer til vægte, der ligger nogenlunde omkring nul; asymmetrisk kvantisering bruger den ekstra parameter på skæve intervaller som aktiveringer efter ReLU. Granulariteten betyder lige så meget som antallet af bit: én skala pr. tensor er billig, men grov, skalaer pr. kanal er standard for vægte, og 4-bit-kvantisering af LLM-vægte bruger normalt skalaer pr. gruppe (fx én skala pr. 128 på hinanden følgende vægte), hvilket koster lidt ekstra lagerplads, men mindsker fejlen markant.

Der findes to familier af metoder. Post-training quantization (PTQ) konverterer en allerede trænet model, nogle gange med et lille kalibreringsdatasæt til at vælge intervaller. Quantization-aware training (QAT) simulerer afrundingen under træning eller finjustering med en straight-through estimator til gradienterne og genvinder mere nøjagtighed ved lave bitbredder, mod at det kræver en træningskørsel. Store sprogmodeller gav særlige problemer: LLM.int8() (Dettmers m.fl., 2022) viste, at nogle få feature-dimensioner i aktiveringerne har store outliers, der ødelægger naive 8-bit-skemaer, og håndterede dem i 16 bit; SmoothQuant flytter outliers fra aktiveringerne over i vægtene med en omskalering pr. kanal; GPTQ kvantiserer vægtene lag for lag ved hjælp af tilnærmet andenordensinformation; AWQ beskytter de vægtkanaler, der betyder mest for aktiveringerne. QLoRA introducerede datatypen 4-bit NormalFloat (NF4) til finjustering oven på kvantiserede basismodeller.

Det er vigtigt at være klar over, hvad der kvantiseres. Skemaer, der kun kvantiserer vægte (W4A16, W8A16), gemmer vægtene kompakt, men dekvantiserer dem til 16-bit-regning; de hjælper især den memory-bound decode-fase, hvor hastigheden følger antallet af bytes, der læses pr. token. Skemaer for både vægte og aktiveringer (W8A8 i INT8 eller FP8) bruger også tensor core-regning med lav præcision og hjælper den compute-bound prefill-fase. FP8 findes i to varianter, E4M3 og E5M2, der bytter præcision i mantissen mod talområde, og nyere hardware tilføjer floating point-formater på 4 bit. KV-cachen kan kvantiseres for sig. I llama.cpp-økosystemet indeholder GGUF-filer blokvise formater som Q4_K_M og Q8_0.

Hukommelsesregnestykket er enkelt: 70 milliarder parametre fylder omkring 140 GB ved 16 bit, 70 GB ved 8 bit og cirka 35-40 GB ved 4 bit inklusive skalaer, hvilket kan afgøre, om en model kan ligge på én accelerator. Fejlmønstrene er mindre åbenlyse. Forringelsen er ujævn: perplexity og generelle benchmarks rykker sig måske knap, mens regning, kode, genfinding i lange kontekster eller andre sprog end engelsk kan blive mærkbart dårligere, så evalueringen bør bruge opgavespecifikke data. Meget lave bitbredder (3 bit og derunder) kræver som regel QAT eller omhyggelige metoder. Kvantisering adskiller sig fra destillation, der træner en ny, mindre model, og fra pruning, der fjerner parametre; de tre kombineres ofte.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Træningsdata
  2. →Modeltræning
  3. →Modelvægte (weights)
  4. →Kvantisering

Relationer

Kilder og videre læsning

Opslagsværker

  • Jacob et al. (2018), Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference
  • Dettmers et al. (2023), QLoRA - Efficient Finetuning of Quantized LLMs

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Test dig selv

Indlæser…

Atlas er i beta.