Qwen3.6-27B - KV 양자화가 KLD에 미치는 영향 - Q8, Q6, Q5 (bartowski)
Qwen3.6-27B - Effect of KV quantization on KLD - Q8, Q6, Q5 (bartowski)
핵심 요약
KV 캐시 양자화가 모델 성능(KLD)에 미치는 영향을 테스트한 결과, VRAM에 맞춰 (q8_0, q8_0) 설정을 사용하는 것이 가장 효율적임을 확인했습니다.
- 테스트 목적 — KV 캐시 양자화가 모델 성능에 미치는 영향을 KLD 지표로 검증함
- 주요 발견 — Q8과 Q6 모델은 v를 q4_0으로 양자화할 때 성능이 급격히 저하됨
- 성능 최적화 — VRAM 용량 내에서 (q8_0, q8_0) 설정을 사용하는 것이 성능 손실이 거의 없음
- 한계점 — KLD 지표가 실제 긴 문맥에서의 에이전트 성능이나 도구 호출 능력을 완벽히 대변하지는 않음
얼마 전에 bartowski의 Qwen3.6-27B Q8 모델에서 컨텍스트를 어떻게 쥐어짜 냈는지에 대한 글을 여기 올렸었음. 내 경험상(뇌피셜 주의) Q8이 Q6나 Q5보다 성능이 훨씬 잘 나왔거든.
댓글 보니까 더 높은 모델의 KV를 양자화하라는 의견도 있고, 그냥 Q6 같은 낮은 양자화 모델을 쓰되 KV는 양자화하지 말고 풀로 쓰라는 사람들도 있더라고. 그래서 KLD로 그 가설을 직접 테스트해 봤음.
기준점은 KV 양자화 안 한 Q8임. 내 5090에는 Q8까지만 들어가거든.
결과부터 말함. 자세한 테스트 환경이랑 방식은 아래에 적어둠.
- Q8이 Q6나 Q5보다 성능 좋은 건 당연한 결과임.
- Q8이랑 Q6 차이보다 Q6랑 Q5 차이가 훨씬 큼.
- Q8이랑 Q6는 v를 q4_0으로 넣는 순간 성능이 급락함. k를 뭘로 양자화하든 상관없음.
- v에 q4_0을 써야만 하는 상황이라면, 차라리 Q6 양자화 모델에 (q8_0, q8_0) 쓰는 게 나음(이건 진짜 의외였음).
- Q5는 Q8이나 Q6보다 v 양자화에 좀 더 관대함.
- (q4_0, q4_0) 조합에서는 Q8이랑 Q6 성능이 비슷해짐.
결론: VRAM에 들어가는 거 아무거나 쓰고, 그냥 (q8_0, q8_0) 써라. 공짜나 다름없음.
-------
테스트 환경:
llama-perplexity 써서 데이터 뽑았음. 난 이 모델을 주로 코딩, 특히 파이썬 용도로만 써서 파이썬 샘플 파일이 필요했음. 오픈소스 코딩 레포(transformers, torch, huggingface 등) 잔뜩 받아서 파이썬 소스 파일들 다 합치니까 230MB짜리 거대한 텍스트 파일 하나 나오더라.
내 시스템이 감당할 수 있는 최대 컨텍스트를 쓰고 싶었음. 5090에 64GB RAM 쓰는데, 시행착오 끝에 50K 컨텍스트까지 가능해서 모든 테스트에 이걸로 고정함.
청크(chunk) 수가 많을수록 KLD가 개선되고 수렴하는 것 같아서 청크 사이즈는 32로 잡았음.
Qwen-3.6-27B(당연하지!)를 써서 여러 조합을 돌릴 스크립트를 짰음. 베이스 로짓(logits) 생성할 때 쓴 명령어는 이거임:
build/bin/llama-perplexity \
-m ~/myp/models/bartowski_Qwen_Qwen3.6-27B-Q8_0.gguf \
--temp 0.6 \
--top_p 0.95 \
--top_k 20 \
--min_p 0.0 \
--repeat-penalty 1.0 \
--presence-penalty 0.0 \
-c 50000 \
-t 16 \
-ngl 99 \
--flash-attn on \
-kvo -b 1024 -ub 256 \
--kl-divergence-base ~/tmp/base_50k_coding.kld \
--chunks 32 \
-f python_corpus.txt

