llama.cpp 포크에 KVarN을 구현하고 KLD 벤치마크를 수행했습니다. 유망해 보이네요!
요약
Huawei의 새로운 KV-cache 양자화 기술인 KVarN을 llama.cpp 포크인 BeeLlama.cpp에 구현하고 KLD 벤치마크를 수행한 결과입니다. KVarN은 기존 TurboQuant 대비 높은 정밀도를 유지하며, 4-bit 설정에서도 q5 수준의 품질을 제공하여 VRAM 제약 환경에서 유용합니다.
핵심 포인트
- KVarN을 BeeLlama.cpp v0.3.2 Preview에 구현 완료
- 4-bit에서 q5 품질, 3.5-bit에서 q4 품질 수준의 정밀도 제공
- KLD 벤치마크 결과 기존 양자화 방식 대비 우수한 성능 확인
- VRAM이 제한적인 환경에서 효율적인 KV-cache 압축 가능
어제 여기서 이 게시물을 봤습니다: KVarN: Huawei의 새로운 KV-cache 양자화 (quant). 속도 저하 없이 실제 속도 향상을 동반한 3~5배의 KV-cache 압축을 제공하며, TurboQuant와 달리 추론 (reasoning) 성능을 유지합니다 (Apache 2.0, vLLM 단일 플래그).
정밀도가 좋은 저렴한 KV-cache라고요? 당장 참여하겠습니다! 아, 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여 개의 양자화 (quant) 쌍들과 비교하기 시작했습니다. 평소와 마찬가지로, 우리는 PPL (Perplexity)이나 다른 한심한 지표들을 보지 않습니다. Qwen 3.6 27B의 3가지 서로 다른 설정에 대해 중앙값 (median) 및 99.9% KLD를 확인합니다.
결과를 보니 그렇게 나쁘지 않습니다. 제 말은, 악명 높은 TurboQuant와 비교했을 때 말이죠. KVarN은 회전 (rotation) 기능이 활성화된 llama.cpp 양자화 모델들과 비교해도 제 체급 이상의 성능을 보여주는 것으로 보입니다. 차이가 아주 크지는 않지만, VRAM 제약이 있는 우리들에게는 0.1%의 정밀도라도 매우 소중합니다.
요약하자면 (TL;DR), 4-bit에서 q5 품질을, 3.5-bit에서 q4 품질을 제공합니다. 그리고 이것은 매우 초기 단계의 구현(raw implementation) 결과입니다. 아마 더 개선될 수 있을 것입니다. 특히 속도 면에서요. 속도에 대해서는 아무것도 주장하지 않겠습니다. 비교하기에는 너무 초기 단계입니다. 하지만 논문에 나온 성숙한 구현체는 일반적인 양자화 모델보다 더 빨랐습니다.
fp16 품질인가요? 아니요. 하지만 여전히 llama.cpp 생태계의 다른 무엇보다 나은가요? 그런 것 같습니다.
Qwen 3.6 27B Q5_K_S + 64k 컨텍스트에서의 KLD 결과
벤치마크 데이터와 심층 분석은 해당 아티클에서 확인할 수 있습니다.
캐시 크기 | 평균 KLD | 평균 정밀도 | 99.9% KLD | 99.9% 정밀도 | Tok/s
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 |
turbo3_tcq | 20.3% | 0.007978 | 99.24% | 0.227104 | 81.56% | 795.20 |
kvarn3-kvarn2 | 18.6% | 0.011122 | 98.93% | 0.345995 | 72.42% | 773.65 |
kvarn2-kvarn2 | 15.4% | 0.021395 | 97.92% | 0.630208 | 54.50% | 776.81 |
turbo2_tcq | 14.1% | 0.023073 | 97.76% | 0.632401 | 54.38% | 807.25 |
제출자: /u/Anbeeld, r/LocalLLaMA에 제출됨
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기