KVarN: Huawei가 개발한 KV-cache 양자화를 위한 네이티브 vLLM 백엔드
요약
Huawei가 개발한 KVarN은 vLLM을 위한 네이티브 KV-cache 양자화 백엔드입니다. FP16 수준의 정확도를 유지하면서도 용량을 3~5배 늘리고 처리량을 최대 1.3배 향상시켜 롱 컨텍스트 워크로드에 최적화되어 있습니다.
핵심 포인트
- FP16 수준의 정확도와 더 높은 처리량 동시 달성
- 보정이 필요 없는 vLLM 플러그 앤 플레이 방식
- 기존 TurboQuant 대비 최대 2.4배 높은 처리량 제공
- 에이전트 및 롱 컨텍스트 워크로드에 최적화
⚡️
에이전트(agentic) 및 롱 컨텍스트(long-context) 워크로드를 위해 구축되었습니다.
💡 KVarN은 다음과 같은 성능을 제공합니다:
FP16 대비 3~5배 더 많은 KV-cache 용량과 최대 ~1.3배의 처리량(throughput)을 제공하여, FP16 수준의 정확도를 유지하면서도 훨씬 더 긴 컨텍스트를 수용하고 더 많은 동시 요청을 처리할 수 있습니다.
🔌
보정(Calibration)이 필요 없는 vLLM 플러그 앤 플레이(plug-and-play) 방식입니다. 네이티브 vLLM 어텐션(attention) 백엔드로서, 플래그 하나만 추가하면 모델 변경이나 보정 없이 바로 사용할 수 있습니다.
🥊
동일한 용량에서 TurboQuant 대비 최대 ~2.4배의 처리량을 제공하며, 더 높은 정확도를 보장합니다.
kvarn/kvɑːɳ/ · 명사(스웨덴어)
- 물질을 더 작은 입자나 가루로 분쇄하는 데 사용되는 연마 장치. 특히 곡물, 씨앗, 향신료, 커피 원두, KV-cache 등을 분쇄하는 데 사용됩니다.
KV-cache 양자화(quantization)에는 보통 대가가 따릅니다. vLLM TurboQuant 블로그에서 보여주듯, 기존 방식들은 추가적인 KV-cache 용량을 얻는 대신 처리량(throughput)을 포기해야 합니다 (TurboQuant 보고에 따르면 2.3~3.7배 용량 확보 시 처리량이 40~52% 감소함). 또한 공격적인 저비트(low-bit) 양자화는 정확도(accuracy)를 희생하는 경향이 있습니다. 속도와 품질을 모두 잃는 것이 KV-cache 양자화가 실제 운영 환경에서 거의 사용되지 않는 주요 원인입니다.
KVarN은 이 두 가지를 모두 유지하도록 설계되었습니다. Qwen3-32B (AIME25, 16K-context burst, TP=2) 환경에서 KVarN은 FP16 정확도와 일치하면서도, 약 4배의 KV-cache 용량을 제공하는 동시에 FP16의 처리량을 능가합니다.
KVarN은 기존 블로그의 방식들이 도달할 수 없는 우상단 영역에 머무릅니다: FP16 수준의 정확도, FP16 또는 그 이상의 처리량, 그리고 몇 배 더 긴 컨텍스트를 제공합니다.
KVarN은 vLLM 포크(fork) 형태로 제공됩니다. vLLM과 동일하게 설치한 후, KVarN KV-cache 데이터 타입(dtype)을 선택하면 됩니다.
# 1. Clone
git clone https://github.com/huawei-csl/KVarN.git
cd KVarN
...
from vllm import LLM, SamplingParams
llm = LLM(
model="Qwen/Qwen3-32B",
...
서빙(Serving) 방식도 동일합니다:
vllm serve Qwen/Qwen3-32B --dtype float16 --kv-cache-dtype kvarn_k4v2_g128 --block-size 128
참고: KVarN은 float16 연산(compute)에서 실행됩니다. 타일/페이지(tile / page) 크기는 현재 128로 고정되어 있습니다 (하나의 vLLM 블록 = 하나의 KVarN 타일). 다른 페이지 크기도 곧 지원될 예정입니다.
팁 (용량): KVarN은 작은 고정 크기의 디코딩 워크스페이스 (decode workspace)를 분할 상환(amortize)할 여유 공간이 있을 때 KV-cache의 전체 용량을 실현합니다. 멀티 GPU 또는 넉넉한 --gpu-memory-utilization 설정 환경에서는 이것이 자동으로 이루어집니다. 메모리가 제한적인 단일 GPU 환경에서는 vLLM의 CUDA-graph 메모리 프로파일러 (memory profiler)가 KV 풀 (pool)을 과도하게 예약하고 축소할 수 있습니다. 전체 용량을 회복하려면 VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0을 설정하거나 (--gpu-memory-utilization 값을 높이십시오).
KVarN은 고정된 크기의 토큰 타일 (token tile)을 한 번에 하나씩 양자화하며, 각 타일을 위의 네 가지 단계로 처리합니다:
- 캐시 (Cache): 어텐션 (attention)에서 바로 가져온 가공되지 않은 fp16 KV 타일 (채널 × 토큰).
- 회전된 캐시 (Rotated Cache): 채널 차원을 따라 수행되는 **하다마르 회전 (Hadamard rotation)**은 채널을 혼합하여 채널별 이상치 (outliers)를 분산시킴으로써 타일을 양자화하기 더 쉽게 만듭니다. 이 회전은 직교 (orthonormal) 방식이므로 어텐션 점수 (attention scores)가 보존됩니다.
- 정규화된 캐시 (Normalized Cache): 반복적 분산 정규화 (iterative variance normalization) (Sinkhorn 방식과 유사)는 로그 공간에서 열(column) 및 행(row) 방향의 표준 편차 정규화를 교대로 수행하여, 타일 전체의 분산을 균등하게 만들고 반올림이 일어나기 전에 양자화 오차를 줄입니다.
- 양자화된 캐시 (Quantized Cache): 낮은 비트 너비 (bit-width)에서 **비대칭 최근접 반올림 (asymmetric round-to-nearest)**을 수행하며, 읽기 시점에 스케일 (scales)을 다시 적용합니다 (채널당 키, 토큰당 값).
배포된 프리셋은 값 (values)보다 키 (keys)에 더 많은 비트를 할당합니다 (kvarn_k4v2_g128: 4비트 키, 2비트 값). 이 구성을 출시하기로 선택한 이유는, FP16 이상의 처리량 (throughput)을 제공하면서도 가장 까다로운 프로덕션 배포 환경과 vLLM이 요구하는 가장 엄격한 정확도 기준(FP16과 일치)을 충족하기 때문입니다.
KVarN은 저희 논문의 공식 vLLM 구현체입니다:
📄
KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks (arXiv:2606.03458)
KVarN을 사용하신다면, 다음을 인용해 주세요:
@misc{muller2026kvarn,
title={KVarN: Variance-Normalized KV-Cache Quantization Mitigates Error Accumulation in Reasoning Tasks},
author={Lorenz K. Muller and Philippe Bich and Chiara Boretti and Hyun-Min Chang and Jiawei Zhuang and Lukas Cavigelli},
...
}
KVarN은 vLLM (v0.22.0)을 기반으로 구축되었으며 Apache 2.0 라이선스 (Apache 2.0 License) 하에 배포됩니다. 원본 vLLM의 README는 README_vLLM.md로 보존되어 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Posts의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기