KLQ: 학습이 필요 없는 측정 기반 회전 양자화. W4A4KV4 비트 환경에서 모든 학습 불필요 회전 기반 양자화 기법을 능가함.
KLQ: Training-free measured rotation quantization. Beats all training-free rotation-based quantization methods on W4A4KV4-bits. Llama 3.2 1B KLQ-quantized beats SpinQuant and gets close to ReSpinQuant without GPTQ/LDLQ rounding.
핵심 요약
학습 없이 KL 발산을 측정해 양자화 중요도를 결정하는 KLQ 기법을 소개하며, 기존 기법 대비 우수한 성능을 입증함.
- KLQ 기법 — KL 발산을 측정해 중요도에 따라 비트 폭을 할당하는 학습 불필요 양자화 방식임.
- 성능 우위 — Llama 3.2 1B 모델에서 SpinQuant를 능가하고 ReSpinQuant에 근접한 성능을 보임.
- 측정 방식 — 분산 대신 실제 KL 발산을 사용하여 양자화로 인한 손실 비용을 정밀하게 계산함.
- 기술적 한계 — 레이어별 전방향 패스 과정이 많아 계산 자원 소모가 크고 프로덕션용은 아님.
github.com
원문 사이트로 이동
일단 말해두는데, 난 연구소 같은 거 아니고 그냥 여름방학 때 혼자 연구해서 깃허브 레포랑 정리 글까지 올린 거야. 레포에는 양자화랑 기하학에 대한 분석, 한계점, 앞으로 해볼 만한 실험 같은 것들을 훨씬 깊게 다뤄놨어. 그리고 이거 실무용으로 쓸 수준은 절대 아니니까 참고해. 실제 커널이 없어서 '가짜' 양자화 데모 수준인 이론적 프레임워크에 가깝거든.
LLM 임베딩 공간의 기하학적 구조는 특정 피처들이 압도적인 크기를 가지는 등 엄청나게 불균형해. 이건 이미 몇 년 전부터 알려진 사실이고, 그래서 회전 기반 양자화 기법들이 균등 양자화보다 훨씬 잘 먹히는 거야. 균등 양자화는 원래 불균형한 공간에 비트를 똑같이 배분하려고 애쓰지만, 회전 기법은 그 공간을 강제로 균등하게 만들어서 비트를 똑같이 배분하는 게 최선의 전략이 되게끔 하거든(DuQuant, ResQ 후반부, QuaRot 등). 일반적인 회전(Hadamard)은 평균적으로 공간을 균등하게 만들긴 하지만, 특정 모델의 기하학적 구조까지 완벽하게 맞추지는 못해서 잔여 손실이 생겨. 이걸 학습 가능한 회전(SpinQuant, ReSpinQuant)으로 해결할 수 있긴 한데, 이건 사후 학습(post-training) 과정에서 경사 하강법을 엄청 돌려야 해서 계산 비용이 너무 많이 들어.
KLQ는 양자화 방식이 좀 달라. 공간을 억지로 균등하게 만들어서 균등 양자화를 하는 게 아니라, 공간이 얼마나 불균형한지 먼저 측정해. 그다음 고유 기저(eigenbasis)의 방향들을 중요도 순으로 나열하고, 각 방향을 독립적인 정보 전송 채널로 취급하는 비용 함수를 써서 '워터필링(waterfilling)' 알고리즘을 돌리는 거지. 이게 (손실에 대한 몇 가지 이상적인 가정하에) 수학적으로 증명된 최적의 방식인데, 중요한 방향에는 비트를 많이 주고 덜 중요한 방향에는 비트를 적게 주는 방식이야.
KLQ가 다른 점은 인과적 KL 손실 측정 방식을 쓴다는 거야. 공간을 측정해서 불균형하게 양자화하려는 알고리즘이 몇 개 있긴 해. 예를 들어 CoQuant는 활성화 공간을 측정하긴 하는데, 방향을 크기나 분산(variance) 기준으로 순위를 매기고 상위 12.5%는 8비트, 하위 87.5%는 4비트로 나누는 단순한 방식을 써. 근데 KLQ는 분산을 안 써(테스트해보니까 분산은 지표로 별로더라고, 자세한 실험 내용은 깃허브 글에 있음). 대신 각 방향에 노이즈를 줘서 토큰 몇 천 개로 포워드 패스를 돌려봐. 원본 모델이랑 노이즈 준 모델 사이의 KL 발산(KL divergence)을 측정해서, 그 방향이 얼마나 중요한지, 그리고 그걸 양자화했을 때 실제로 얼마나 손실이 발생하는지 비용을 계산하는 거지.
물론 내 방식이랑 실험에도 한계는 확실해. 모든 레이어, 활성화 값, KV 캐시를 양자화하려면 행렬마다, 레이어마다 방향별로 포워드 패스를 한 번씩 다 돌려야 해서, 모델 하나 양자화하는 데 포워드 패스를 수십만 번 해야 할 수도 있어. 그래서 계산량이 엄청나게 많아(Qwen 2.5 0.5B는 3090에서 5시간, Llama 3.2 1B는 같은 하드웨어로 10시간 걸림). 그리고 모델을 실제로 양자화할 때는 그냥 단순한 가산 벡터 코드북이랑 RTN(round-to-nearest)을 썼는데, 이건 다른 방식으로 얼마든지 교체 가능해.
여기 올린 이유는 피드백도 좀 받고 이 결과들을 공유하고 싶어서야. 궁금한 거 있으면 편하게 물어보고, 깃허브 레포에 기여도 많이 해줘.
아래는 Llama 3.2 1B 모델을 4비트로 완전히 양자화했을 때의 결과 표 샘플이야.
| Method | W4A4KV4 Llama 3.2 1B Wikitext-2 PPL |
|---|---|
| FP16 | 9.75 |
| QuaRot (training free) | 14.59 |
| SpinQuant (trained + GPTQ) | 13.52 |
| KLQ (training-free, VQ) | 13.36 |

