llama.cpp 포크에 KVarN을 구현하고 KLD 벤치마크를 돌려봤습니다. 꽤 유망하네요!
I implemented KVarN in my llama.cpp fork and ran KLD benchmarks. It's promising!
핵심 요약
llama.cpp 포크에 화웨이의 KVarN KV 캐시 양자화를 구현하여 벤치마크한 결과, 기존 방식보다 우수한 성능을 확인했습니다.
- KVarN 구현 — llama.cpp 포크인 BeeLlama.cpp에 KVarN을 적용하여 공개함
- 성능 벤치마크 — KLD 지표를 통해 TurboQuant 대비 우수한 정밀도와 효율성 입증
- 하드웨어 최적화 — RTX 3090 환경에서 KV 캐시 압축을 통한 VRAM 절약 및 성능 향상
- 향후 개선 가능성 — 현재 초기 구현 단계이며 추가적인 속도 최적화 및 비트 수 확장 가능성 있음
어제 이곳에서 이 게시물을 봤습니다: KVarN: 화웨이의 새로운 KV 캐시 양자화. 느려지는 대신 실제 속도 향상을 제공하는 3~5배 KV 캐시 압축, TurboQuant와 달리 추론 성능 유지(Apache 2.0, vLLM 단일 플래그)
저렴하면서 정밀도도 좋은 KV 캐시라고요? 당장 해야죠! 아, vLLM 전용이네...
잠깐, 저에겐 제 llama.cpp 포크가 있고, KLD 벤치마킹을 위한 광범위한 레퍼런스도 가지고 있습니다. 행동에 나서야죠!
그래서 행동했습니다. 새벽 6시까지요.
이제 KVarN은 공개된 BeeLlama.cpp v0.3.2 Preview에 구현되어 있으며, 직접 시도해볼 수 있습니다. 빌드된 버전을 다운로드하고 --cache-type-k kvarn4와 --cache-type-v kvarn4 또는 원하는 비트로 실행해보세요. 테스트는 RTX 3090으로만 했으니 여러분의 플랫폼에서 잘 작동하길 바랍니다. Qwen 3.6 27B와 Gemma 4 31B는 확실히 지원되며, 작은 모델들도 아마 잘 작동할 겁니다.
더 중요한 질문은, 시도해볼 가치가 있느냐는 것이죠. 원 논문에서는 "k4v2에서 fp16을 얻었다"고 합니다. 네, 물론이죠... 벤치마크에선 그럴지도요... 하지만 전반적으로는 어떨까요?
이 질문에 답하기 위해, 저는 기존의 KLD를 실행하고 KVarN을 제가 가진 50여 개의 양자화 쌍과 비교하기 시작했습니다. 평소처럼 PPL이나 다른 시시한 지표는 보지 않고, Qwen 3.6 27B의 3가지 설정에 걸쳐 중앙값과 99.9% KLD를 확인했습니다.
결과는 나쁘지 않습니다. 악명 높은 TurboQuant와 비교했을 때 말이죠. KVarN은 회전(rotation)이 활성화된 llama.cpp 양자화와 비교해도 제 몫을 다하는 것으로 보입니다. 큰 차이는 아니지만, VRAM이 부족한 우리들에겐 0.1%의 정밀도 향상도 소중하니까요.
요약하자면 4비트에서 q5 품질을, 3.5비트에서 q4 품질을 제공합니다. 아주 초기 구현 단계인데도 이 정도입니다. 아마 더 개선될 수 있을 겁니다. 특히 속도 면에서요. 속도에 대해서는 아직 아무것도 장담할 수 없습니다. 비교하기엔 너무 초기 단계니까요. 하지만 논문상의 완성된 구현은 일반적인 양자화보다 빨랐습니다.
fp16 품질인가요? 아니요. 하지만 llama.cpp 생태계의 다른 그 어떤 것보다 나은가요? 그런 것 같습니다.
Qwen 3.6 27B Q5_K_S + 64k 컨텍스트에서의 KLD 결과
나머지 벤치마크 데이터와 심층 분석은 기사에서 확인할 수 있습니다.
캐시 크기 | 평균 KLD | 평균 정밀도 | 99.9% KLD | 99.9% 정밀도 | 토큰/초
bf16 | 100.0% | 0.000375 | 100.00% | 0.023258 | 100.00% | 850.81
q8_0 | 53.1% | 0.002328 | 99.80% | 0.078709 | 94.61% | 851.11
q8_0-q5_1 | 45.3% | 0.002529 | 99.78% | 0.082880 | 94.21% | 828.63
q8_0-q4_0 | 40.6% | 0.003316 | 99.71% | 0.104680 | 92.18% | 849.37
q6_0 | 40.6% | 0.002614 | 99.78% | 0.090800 | 93.47% | 845.96
q6_0-q5_0 | 37.5% | 0.002820 | 99.76% | 0.092682 | 93.29% | 846.86
q5_1 | 37.5% | 0.002911 | 99.75% | 0.098354 | 92.77% | 841.65
q5_0 | 34.4% | 0.003206 | 99.72% | 0.099073 | 92.70% | 849.79
q5_0-q4_0 | 31.3% | 0.003581 | 99.68% | 0.113332 | 91.39% | 847.64
q4_0 | 28.1% | 0.004711 | 99.57% | 0.130419 | 89.84% | 855.08
kvarn4-kvarn4 | 27.9% | 0.002974 | 99.74% | 0.094819 | 93.09% | 760.88
q5_0-turbo3_tcq | 27.3% | 0.005471 | 99.49% | 0.158514 | 87.35% | 815.80
turbo4 | 25.8% | 0.004760 | 99.55% | 0.138370 | 89.13% | 705.32
kvarn4-kvarn3 | 24.8% | 0.003824 | 99.66% | 0.135028 | 89.42% | 765.23
q4_0-turbo3_tcq | 24.2% | 0.006269 | 99.41% | 0.186572 | 84.93% | 821.89
kvarn4-kvarn2 | 21.7% | 0.010449 | 99.00% | 0.340392 | 72.82% | 765.57
kvarn3-kvarn3 | 21.7% | 0.005349 | 99.50% | 0.168135 | 86.51% | 773.12
