← all posts
AI 2026.05.03 · 11 min read Advanced

LLM Quantization은 왜 scale 결정의 문제인가

INT8부터 BitNet 1.58-bit까지, scale·granularity·calibration의 세 가지 선택이 어떻게 quantization accuracy의 Pareto frontier를 결정하는지 추적한다.


Quantization을 배울 때 가장 먼저 만나는 수식은

xq=clip(round(x/s)+z,qmin,qmax)x_q = \mathrm{clip}(\mathrm{round}(x/s) + z,\, q_{\min},\, q_{\max})

이다. 그런데 이 수식에서 실제로 모든 결정을 내리는 것은 ss 하나다 — scale을 어떻게 정하느냐가 정확도의 전부를 결정한다. PTQ, QAT, GPTQ, AWQ, NF4까지, 챕터마다 다른 이름으로 등장하는 기법들은 결국 ss를 어떤 기준으로 구할 것인가” 라는 하나의 질문에 대한 다른 답이다.

scale 결정의 세 가지 축

quantization에서 내려야 하는 결정은 세 가지 축으로 정리된다.

calibration 방법: absolute-max는 s=maxx/qmaxs = \max|x|/q_{\max}로 단순하지만 outlier 하나가 scale 전체를 지배한다. percentile은 tail을 잘라 main mass의 정밀도를 보호한다. KL divergence minimization은

s=argminsDKL(PorigPquant(s))s^* = \arg\min_s D_{\mathrm{KL}}(P_{\text{orig}} \| P_{\text{quant}}(s))

으로 원 분포와 quantized 분포의 정보 손실을 최소화한다. TensorRT의 calibration 표준이 여기서 나왔다.

granularity: per-tensor는 matrix 전체에 하나의 (s,z)(s, z)를 쓴다. per-channel은 output dimension마다 독립적인 scale을 두어 채널 간 magnitude 차이를 보정한다. per-group은 128개 elements 단위로 scale을 잡는다 — GPTQ의 표준. granularity가 세밀해질수록 정확도는 오르지만 metadata overhead도 따라붙는다.

bit-width: INT-bb2b2^b levels를 제공한다. INT8은 256 levels로 사실상 lossless baseline, INT4는 16 levels로 GPTQ/AWQ를 요구하고, BitNet의 1.58-bit는 {1,0,+1}\{-1, 0, +1\} 3 levels다.

rounding error의 분산

xUniform([s/2,s/2])x \sim \mathrm{Uniform}([-s/2, s/2]) 가정 시 rounding error의 분산은

Var(x^x)=s212\mathrm{Var}(\hat{x} - x) = \frac{s^2}{12}

이다. rounding error는 scale에 선형하다 — scale을 키우면 정밀도가 그대로 떨어진다.

PTQ: fine-tune 없이 얼마나 갈 수 있나

Post-Training Quantization은 calibration set(수백~수천 sample)으로 scale을 결정하고 가중치를 교체한다. 학습이 없다는 것이 PTQ의 최대 장점이다.

그런데 여기서 layer-wise error 누적이 문제가 된다. 각 layer \ell의 quantization error ϵ\epsilon_\ell는 forward pass에서

Δyk>Wkopϵ\|\Delta y\| \leq \sum_\ell \prod_{k > \ell} \|W_k\|_{\text{op}} \cdot \|\epsilon_\ell\|

로 쌓인다. network가 깊을수록, 압축률이 같아도 누적 error는 늘어난다.

Cross-Layer Equalization(CLE)은 이 문제를 연속 layer의 channel magnitude를 geometric mean으로 균형 맞춰 완화한다. 연속 layer W1,W2W_1, W_2에 대해 si=r1(i)r2(i)s_i = \sqrt{r_1^{(i)} \cdot r_2^{(i)}}로 변환하면 출력은 동일하지만 per-tensor scale의 dynamic range 활용도가 오른다.

INT8까지는 PTQ가 safe baseline이다. INT4 아래부터는 다른 무언가가 필요하다.

QAT와 STE: 미분 불가능한 함수를 학습시키는 트릭

round 함수의 derivative는 거의 모든 점에서 0이다. QAT는 이 문제를 Straight-Through Estimator(STE)로 우회한다.

y=stop-grad(q(x))+xstop-grad(x)y = \mathrm{stop\text{-}grad}(q(x)) + x - \mathrm{stop\text{-}grad}(x)

forward에서는 y=q(x)y = q(x), backward에서는 xy=1\nabla_x y = 1. round를 identity처럼 취급하는 “거짓 gradient”다.

명제 1 · STE in expectation

x[s/2,s/2]x \in [-s/2, s/2] uniform noise 가정 시, E[xround(x/s)s]=1\mathbb{E}[\nabla_x \mathrm{round}(x/s) \cdot s] = 1. STE는 stochastic rounding 하에서 정확하다.

▷ 증명

uniform noise에서 round의 기대 gradient는 identity다. STE는 이 기대값을 결정론적 근사로 쓴다. \square

이 트릭이 QAT, LSQ(learnable scale), BitNet 1.58-bit까지 모든 학습형 quantization의 토대다. 4-bit 이하에서 PTQ의 accuracy가 급락하는 이유는 PTQ가 이 적응 과정 없이 고정된 grid에 가중치를 욱여넣기 때문이다. QAT는 학습이 가중치 분포를 quantization grid에 맞춰 수렴시킨다.

GPTQ와 AWQ: LLM에서 INT4를 가능하게 한 두 아이디어

GPTQ(Frantar 2023)는 Optimal Brain Surgeon의 30년 만의 부활이다. layer-wise objective

minW^WXW^XF2\min_{\hat{W}} \|WX - \hat{W}X\|_F^2

를 column 단위로 순차 풀면서, column qq를 quantize할 때 발생하는 error를 나머지 column들이 즉시 흡수하도록 Hessian H=XXH = XX^\top으로 보정한다.

W[:,q+1:]W[:,q+1:]wqw^qHqq1Hq,q+1:1W[:, q+1:] \leftarrow W[:, q+1:] - \frac{w_q - \hat{w}_q}{H^{-1}_{qq}} \cdot H^{-1}_{q, q+1:}

LLaMA-7B INT4 naive PTQ의 perplexity drop이 5 이상인 반면, GPTQ는 0.5 미만이다. column-wise error compensation이 그 차이를 만든다.

AWQ(Lin 2023)와 SmoothQuant(Xiao 2023)는 LLM 특유의 문제를 겨냥한다 — 일부 hidden dimension의 activation magnitude가 다른 채널의 100~1000배인 “outlier feature”. per-tensor scale이 이 outlier 하나에 지배되면 나머지 99% 채널의 effective bits는 1에 가까워진다.

두 기법 모두 동일한 equivalent transform Y=WX=(WS1)(SX)Y = W X = (WS^{-1})(SX)를 쓰지만 목적이 다르다.

트레이드오프: AWQ vs SmoothQuant

AWQ: SS를 activation outlier channel의 magnitude에 맞춰 weight를 줄여 weight-only(W4A16) quantization을 안전하게 만든다. activation은 FP16 유지. INT4 LLM serving(vLLM, TensorRT-LLM)의 표준.

SmoothQuant: si=max(Xi)α/max(Wi)1αs_i = \max(|X_i|)^\alpha / \max(|W_i|)^{1-\alpha}로 outlier를 weight 쪽으로 transfer해 W8A8을 가능하게 한다. weight와 activation 모두 INT8 — throughput 최적화.

같은 수식, 반대 방향의 SS 선택.

4-bit 이하: distribution-aware codebook의 시대

INT4의 16 levels는 Gaussian 분포에 sub-optimal이다. weight의 대부분이 0 근처에 몰려 있는데 uniform spacing은 outlier를 위해 grid를 낭비한다.

NF4(Dettmers 2023)는 정규분포의 quantile로 codebook을 구성한다. codebook entries qiΦ1(i/17)q_i \approx \Phi^{-1}(i/17) — Lloyd algorithm의 Gaussian 최적해다. LLaMA-7B에서 INT4 GPTQ의 perplexity drop이 0.5일 때 NF4는 0.2다.

BitNet b1.58(Ma 2024)은 이 논리를 극단까지 밀어붙인다. weight를 {1,0,+1}\{-1, 0, +1\}로 제한하면 log231.585\log_2 3 \approx 1.585 bit/weight이고,

yj=i:Wji=1xii:Wji=1xiy_j = \sum_{i: W_{ji}=1} x_i - \sum_{i: W_{ji}=-1} x_i

MatMul이 sign-flip과 add만으로 환원된다. 곱셈이 사라진다.

정리

  • quantization의 accuracy는 scale 결정의 함수다 — calibration 방법, granularity, bit-width의 세 축이 Pareto를 결정한다.
  • PTQ는 INT8까지 safe. INT4부터는 GPTQ(column-wise error compensation) 또는 QAT(STE 기반 분포 수렴)가 필요하다.
  • LLM의 activation outlier는 equivalent transform(Y=(WS1)(SX)Y = (WS^{-1})(SX))으로 처리한다 — AWQ는 W4A16, SmoothQuant는 W8A8을 타깃으로 SS의 방향이 반대다.
  • 4-bit 이하에서는 distribution-aware codebook(NF4)이나 ternary(BitNet)처럼 weight 분포의 모양 자체를 설계에 반영해야 한다.

scale 하나를 어떻게 정하느냐 — 이 질문이 INT8에서 1.58-bit까지의 스펙트럼 전체를 관통한다.

REF
Dettmers et al. · 2023 · QLoRA: Efficient Finetuning of Quantized LLMs · NeurIPS