tierKV: 제거된 블록을 GPU 캐시 히트보다 더 빠르게 복원하는 분산 KV 캐시

발행: (2026년 5월 9일 PM 12:01 GMT+9)
7 분 소요
원문: Dev.to

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
0 조회
Back to Blog

관련 글

더 보기 »

AI를 보다 효과적으로 사용하는 팁

AI를 보다 효과적으로 활용하려는 개발자라면, 실제로 나에게 도움이 되었던 세 가지가 있습니다: AI를 주니어 팀원처럼 대하기 - 컨텍스트 제공, 제약…