INT4 붕괴 해결
I found why KV cache INT4 breaks on some models (Qwen2-7B: ΔPPL +238) and built a 4-line fix no training, no calibration, 12 models tested up to 40B
·2026.04.16 05:23
핵심 내용
KV cache INT4가 일부 모델에서 무너지는 원인을 찾고 4줄짜리 보정으로 개선했다.
자세히 보기
KV cache INT4 quantization이 모델마다 성능 차이가 극단적으로 나는 문제를 분석했다.
- Falcon-40B: ΔPPL +0.08로 거의 손실이 없었지만
- Qwen2-7B: ΔPPL +238로 출력이 사실상 붕괴했고
- Pythia-6.9B: ΔPPL +22, Pythia-410M: ΔPPL +77처럼 모델별 편차가 컸다.
원인은 두 가지로 정리된다.
- token-wise norm variation: Pre-LN 모델에서 토큰마다 KV 벡터 norm이 2~5배 흔들려 row 단위 absmax 양자화가 불안정해짐
- activation outlier channels: 일부 채널이 평균보다 8~100배 커서 스케일을 독점하고 나머지 채널 정밀도를 망가뜨림
한쪽만 고치면 효과가 부족했다.
- norm 분리만 적용: +57.5
- per-channel만 적용: +97.8
- 둘을 함께 적용: +0.32로 개선, 약 744배 향상
핵심 아이디어는 KV 벡터를 norm(16-bit scalar) 과 direction(unit vector) 으로 분해한 뒤, direction에 per-channel scaling을 적용하는 방식이다. 제시된 PyTorch 코드는 4줄 수준이며, 학습 없음, calibration 없음, 모델별 튜닝 없음으로 기존 양자화 앞단에 넣는 드롭인 전처리로 동작한다.
12개 모델(124M~40B) 테스트에서 대부분의 경우 손실을 크게 줄였고, 이미 잘 동작하던 모델은 거의 그대로 유지했다. 최악의 경우도 OPT-125m에서 ΔPPL +0.24 수준의 악화에 그쳤다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.