KV cache 양자화, Gemma 4가 먼저 흔들린 이유

“q8_0이면 거의 손실 없다”는 말부터 깨졌다

r/LocalLLaMA가 이 글에 몰린 이유는 단순 benchmark 표가 아니었다. 많은 로컬 추론 사용자들이 사실상 상식처럼 받아들이던 “q8_0 KV cache는 거의 무손실”이라는 문장을 정면으로 흔들었기 때문이다. 링크된 LocalBench 글은 Gemma 4와 Qwen 3.6을 같은 환경에서 비교했고, 결론은 모델마다 민감도가 전혀 다르다는 것이었다.

실험 설정은 비교적 깔끔하다. 동일한 BF16 GGUF를 같은 머신에서 세 번 로드해 f16, q8_0, q4_0 KV cache만 바꿨고, 약 250,000 tokens 규모 데이터셋에서 top-40 log-probability 분포의 KL divergence를 계산했다. 글에 따르면 q8_0는 cache 메모리를 절반으로, q4_0는 4분의 1로 줄인다. 그런데 결과는 균일하지 않았다. Gemma 31B는 q8_0에서 KL 0.108, Gemma 4 26B A4B는 q8_0에서 0.377, q4_0에서 1.088까지 치솟았다. 반면 Qwen 3.6 계열은 q8_0에서 둘 다 0.04 이하, q4_0도 0.087~0.117 범위로 상대적으로 버텼다.

커뮤니티가 바로 물은 것

상위 댓글은 숫자를 그대로 믿고 끝내지 않았다. 가장 점수가 높았던 반응은 Gemma 쪽 열화가 SWA cache를 계속 양자화한 결정과 연결될 수 있다고 추정하며, 실제 downstream task에서 영향이 얼마나 커지는지 궁금하다고 적었다. 다른 댓글들은 이 측정이 30k 안팎 context에서 나왔는데 100k, 200k에서는 어떻게 달라지는지 물었다. 또 몇몇 사용자는 Gemma의 분포가 assistant turn 바깥에서 유독 더 혼란스럽게 보인다고 말하며, 측정 구간과 methodology 세부를 캐물었다. 커뮤니티가 이 글을 반긴 이유는 바로 이런 운영적 가치 때문이다. ‘무슨 모델이 더 좋나’보다 ‘어느 모델이 cache precision에 얼마나 취약한가’가 로컬 배치에는 더 직접적이다.

왜 중요한가

로컬 LLM 운용에서는 cache precision과 context length를 종종 모델과 무관한 범용 손잡이처럼 다룬다. 이 글은 그 습관을 깨뜨린다. 같은 q8_0라도 Gemma 4와 Qwen 3.6의 손실 구조가 전혀 다르고, long document나 tool calling 같은 범주별 손상도 다르게 나타난다. 결국 로컬 추론 최적화는 “무조건 더 낮은 정밀도”가 아니라, 모델별 민감도와 실제 workload를 같이 봐야 한다. LocalLLaMA가 이 포스트를 빠르게 끌어올린 것도 그 현실감 때문이다. 메모리를 아끼는 선택이 언제는 거의 공짜지만, 언제는 품질을 먼저 무너뜨린다는 사실이 숫자로 드러났다.

출처: LocalBench 원문 · r/LocalLLaMA 스레드