tierKV: 제거된 블록을 GPU 캐시 히트보다 더 빠르게 복원하는 분산 KV 캐시
Source: Dev.to
(위에 제공된 내용 외에 번역할 텍스트가 없습니다. 번역이 필요한 본문을 제공해 주시면 한국어로 번역해 드리겠습니다.)
문제
GPU의 KV 캐시가 가득 차면, 추론 엔진은 블록을 내보내고 폐기합니다. 동일한 프리픽스를 가진 다음 요청은 처음부터 전체 프리필을 다시 실행합니다 — 시퀀스 길이에 대해 2차적으로 증가합니다. 30,000 토큰 문서에서는 프롬프트가 다시 나타날 때마다 10초 이상이 걸릴 수 있습니다.
tierKV는 내보낸 KV 블록을 가로채어 양자화하고, LAN 머신의 볼트에 전송한 뒤 다음 캐시 미스 시 복원합니다 — vLLM의 페이지드 KV 버퍼에 직접 주입하여 어텐션 재계산 없이 동작합니다. 소스 코드를 변경할 필요 없이 vLLM의 KVConnectorBase_V1 플러그인 API를 통해 통합됩니다.
Benchmarks (Qwen3.6-35B-A3B, Apple FY2025 10‑K, 30,561 tokens)
| 시나리오 | 시간 |
|---|---|
| 전체 콜드 프리필 (캐시 없음) | 10.75 s |
| GPU 캐시 히트 (블록이 이미 VRAM에 있음) | 1.19 s |
| 콜드 볼트 복원 | 0.52 s (≈ 전체 프리필보다 20배 빠르고, GPU 히트보다 빠름) |
볼트 복원은 어텐션 연산을 완전히 건너뛰기 때문에 GPU 캐시 히트를 능가합니다. GPU 히트는 여전히 부분 어텐션을 수행하지만, 볼트 블록은 바로 버퍼로 들어갑니다. 컨텍스트 길이가 길어질수록 차이는 커지며, 128 k 토큰에서는 프리필이 *O(n²)*이고 복원이 O(n) + 네트워크이므로 약 35배의 속도 향상이 예상됩니다.
tierKV는 EXO를 사후 설치 패치를 통해 지원합니다. 8,000‑토큰 프롬프트에서: 30.83 s 콜드 → 4.11 s 복원 (7.3배 속도 향상).
Architecture
Three tiers
[Hot] GPU KV cache — VRAM, in‑engine prefix cache
[Cold] KV vault — LAN machine RAM, ~0.5 ms away, gRPC
[Cold] SSM vault — separate LAN machine for SSM/linear‑attention layers
Eviction path
GPU 블록이 퇴출됨 → TurboQuant INT8 인코드 → fire‑and‑forget gRPC Store → GPU 블록이 즉시 해제됩니다.
Restore path
캐시 미스 → BatchPromote RPC (모든 레이어, 한 번의 라운드‑트립) → 병렬 Rayon 디코드 (GIL 해제) → 텐서가 페이지드 KV 버퍼에 삽입됩니다.
TurboQuant
Rust로 작성된 그룹별 INT8 양자화기. 그룹은 어텐션‑헤드 경계에 맞춰 정렬되며(그룹 크기 = 헤드 차원, 예: Qwen3.6‑35B‑A3B의 경우 256), 이상치 헤드가 인접 그룹을 오염시키지 못합니다.
Result: 3.9× 압축 및 ≥ 52 dB SNR 달성.
Qwen3.6‑35B‑A3B(전체 어텐션 10개 + 선형 어텐션 30개)와 같은 하이브리드 모델은 두 종류의 레이어를 자동으로 별도 볼트로 라우팅합니다 — 모델마다 수동 설정이 필요 없습니다.
설정
1단계 – 모든 머신에 설치
pip install tierkv
Cargo도, CMake도 필요 없습니다. Rust 코어는 휠에 포함되어 있습니다.
2단계 – 각 머신 설정 (tierkv.toml)
Inference 노드
[cluster]
role = "inference"
kv_cold = "192.168.1.10:50051"
ssm_cold = "192.168.1.11:50051"
[turbo_quant]
enabled = true
kv_dim = 256 # 모델의 attention head 차원에 맞추세요
KV 볼트 머신
[cluster]
role = "kv_cold"
[vault]
max_bytes = 24_000_000_000 # 24 GB
3단계 – 콜드 머신에서 볼트 서버 시작
tierkv vault
4단계 – 연결 상태 확인
tierkv status
5단계 – vLLM 실행
vllm serve Qwen/Qwen3-30B-A3B \
--kv-transfer-config '{
"kv_connector": "TierKVConnector",
"kv_connector_module_path": "tierkv.connectors.vllm.connector",
"kv_role": "kv_both",
"kv_connector_extra_config": {"config_path": "/path/to/tierkv.toml"}
}' \
--enable-prefix-caching \
--no-disable-hybrid-kv-cache-manager \
--block-size 16
vLLM 소스 코드를 수정하거나 재빌드할 필요가 없습니다. tierKV가 자동으로 eviction과 restore를 가로챕니다.
EXO 사용자
tierkv install --exo-path /path/to/exo
그 후 일반적으로 EXO를 실행하면 됩니다.
우리의 테스트 클러스터
| 구성 요소 | 하드웨어 |
|---|---|
| 추론 노드 | NVIDIA DGX Spark (GB10, 96 GB HBM) — vLLM 또는 EXO 실행 |
| KV 콜드 볼트 | Apple Mac Pro (M2 Pro, 32 GB RAM) — KV 블록을 위해 24 GB 예약 |
| SSM 콜드 볼트 | Apple Mac Air (M2, 16 GB RAM) — SSM 상태를 위해 12 GB 예약 |
| 네트워크 | 5 GbE LAN, ~0.5 ms RTT |
고의적으로 겸손한 하드웨어; 볼트 노드는 유휴 머신이며 — GPU가 필요하지 않습니다.
tierKV가 도움이 되는 경우
- 반복적인 장기 컨텍스트 프롬프트 (고정 문서, 채팅 기록, 시스템 프롬프트에 대한 RAG)
- 공유 프리픽스를 사용하는 다중 사용자 서비스 — 첫 번째 요청이 볼트를 워밍업하고, 이후 모든 요청이 혜택을 받음
- MoE + SSM 하이브리드 모델로, 두 레이어 유형 모두 별도의 콜드 스토리지가 필요함
- 컨텍스트 길이에 비해 제한된 VRAM 예산
도움이 되지 않을 때
- 한 번만 사용하고 절대 반복하지 않는 단일‑샷 프롬프트
- 고지연 네트워크 (Wi‑Fi, WAN) — LAN RTT가 5 ms 미만이라고 가정
- 텐서‑패럴렐 멀티‑GPU 추론 — 아직 지원되지 않음
- 하이브리드 모델에서 매우 짧은 프롬프트 (HMA 블록‑사이즈 임계값 이하)
- 비트‑대‑비트 동일한 출력을 요구하는 애플리케이션 (
turbo_quant = false)
링크
- GitHub:
- 전체 글:
pip install tierkv