SGLang HiCache 모범 사례
SGLang HiCache 모범 사례 (Best Practices)
SGLang HiCache는 전통적인 RadixAttention을 3단계 계층형 KV 캐싱 시스템으로 확장한 기능입니다. 긴 컨텍스트와 다중 턴 대화 시나리오에서 성능을 크게 개선해요. 이 문서는 HiCache를 실제로 배포할 때 어떤 설정을 고르고 어떻게 구성하는지 안내합니다.
출처: 문서
본문
HiCache가 왜 중요한가 (Why HiCache Matters)
SGLang HiCache는 기존 RadixAttention을 GPU 메모리, 호스트 메모리, 외부 스토리지 백엔드로 이어지는 3단계 계층형 KV 캐싱 시스템으로 확장해, 긴 컨텍스트와 다중 턴 대화 시나리오의 성능을 크게 개선합니다. KV 캐시를 GPU 메모리·호스트 메모리·외부 스토리지 백엔드에 걸쳐 지능적으로 관리함으로써, 기존 시스템에서 캐시 적중률을 제한하는 근본적인 용량 병목을 해결합니다.
설정 가이드라인 (Configuration Guidelines)
핵심 HiCache 파라미터 (Core HiCache Parameters)
# Essential HiCache flags
--page-size 64 # Page size for cache management
--enable-hierarchical-cache # Enable HiCache
--hicache-ratio 2 # Host memory ratio (2x GPU memory)
--hicache-size 100 # Host memory size in GBs, will override the above ratio
--hicache-io-backend kernel # The I/O backend of moving data between CPU and GPU
--hicache-write-policy write_through # Cache write policy from GPU to CPU
--hicache-storage-backend # Optional storage backend (e.g., hf3fs, mooncake, etc.)
참고:
- 시작 시
--hicache-storage-backend를 구성하는 것 외에도, SGLang은 HTTP admin 엔드포인트를 통한 HiCache 스토리지 백엔드의 런타임 attach/detach(재시작 불필요)를 지원합니다. Runtime Attach/Detach HiCache Storage Backend를 참고하세요.
스토리지 백엔드가 켜진 핵심 설정 (Key Configurations with Storage Backends Enabled)
메모리 레이아웃 최적화 (Memory Layout Optimization)
# Page-first: Optimized for I/O efficiency with zero-copy (recommended with kernel backend)
--hicache-mem-layout page_first
# Page-first-direct: Optimized for direct I/O operations (Compatible with fa3 and same zero-copy performance as page_first)
--hicache-mem-layout page_first_direct
# Layer-first
--hicache-mem-layout layer_first
레이아웃 호환성 (Layout Compatibility):
page_first:kernelI/O 백엔드에서만 호환되며,direct백엔드에서는 자동으로layer_first로 전환됨page_first_direct:directI/O 백엔드를 위해 최적화된 메모리 구성을 갖춘 전용 모드
이기종 TP 지원 (GQA/MHA 모델) (Heterogeneous TP Support)
HiCache 스토리지는 서로 다른 배포가 서로 다른 TP 크기(예: tp=4, tp=8)를 사용하고 동일한 스토리지 백엔드 네임스페이스를 공유할 때 교차 클러스터 KV 재사용을 지원합니다.
--hicache-storage-backend-extra-config에서 tp_lcm_size를 사용하세요:
# Example: heterogeneous TP = {4, 8}, so lcm = 8
--hicache-storage-backend-extra-config '{"tp_lcm_size": 8}'
가이드라인:
tp_lcm_size는 동일한 HiCache 스토리지를 공유할 모든 TP 크기의 최소공배수(LCM)로 설정하세요.- Mooncake와
page_head레이아웃을 쓰는 MHA 모델의 경우, HiCache는tp_lcm_size에 따라 헤드 샤드를 분할해 이기종 TP 배포에서 키를 재사용 가능하게 합니다. - 모든 클러스터가 동일한 TP 크기를 쓰면 이 옵션은 필요 없습니다.
프리페치 정책 (Prefetch Policies)
# Best-effort: Terminate prefetch when needed
--hicache-storage-prefetch-policy best_effort
# Wait-complete: Ensure complete prefetch, higher cache reuse
--hicache-storage-prefetch-policy wait_complete
# Timeout: Balance between completion and best-effort
--hicache-storage-prefetch-policy timeout
PD 분리(Disaggregation)와의 통합 (Integration with PD Disaggregation)
HiCache는 PD Disaggregation과 완벽하게 연동됩니다. 두 가지 구성을 선택할 수 있어요:
- Prefill 전용 HiCache (Prefill-only HiCache): Prefill 노드에서만 HiCache를 켜 Prefill 인스턴스 간 KV 캐시 공유를 허용
- 비동기 오프로딩이 있는 전체 HiCache (Full HiCache with async offloading): Prefill 노드에 HiCache를, Decode 노드에 비동기 KV 캐시 오프로딩을 켜 다중 턴 대화 시나리오에서 Prefill 노드가 Decode 노드의 KV 캐시를 재사용할 수 있게
# Prefill node with HiCache enabled for cross-prefill sharing (ideal for SystemPrompt scenarios)
python3 -m sglang.launch_server \
--model-path /xxx/DeepSeek-R1/ \
--tp 8 \
--host 0.0.0.0 \
--port 10000 \
--enable-metrics \
--enable-cache-report \
--mem-fraction-static 0.85 \
--page-size 64 \
--enable-hierarchical-cache \
--hicache-ratio 2 \
--hicache-size 0 \
--hicache-mem-layout page_first_direct \
--hicache-io-backend direct \
--hicache-write-policy write_through \
--hicache-storage-backend hf3fs \
--hicache-storage-prefetch-policy wait_complete \
--disaggregation-ib-device mlx5_0 \
--disaggregation-mode prefill \
--disaggregation-transfer-backend mooncake
# Decode node with async offloading enabled for KV cache reuse by Prefill (ideal for multi-turn conversations)
python3 -m sglang.launch_server \
--model-path /xxx/DeepSeek-R1/ \
--tp 8 \
--host 0.0.0.0 \
--port 10000 \
--enable-metrics \
--enable-cache-report \
--page-size 64 \
--hicache-ratio 2 \
--hicache-size 0 \
--hicache-mem-layout page_first_direct \
--hicache-io-backend direct \
--hicache-write-policy write_through \
--hicache-storage-backend hf3fs \
--hicache-storage-prefetch-policy wait_complete \
--disaggregation-decode-enable-offload-kvcache \ # Enable async KV cache offloading in decode node
--disaggregation-ib-device mlx5_0 \
--disaggregation-mode decode \
--disaggregation-transfer-backend mooncake
HF3FS로 배포 (Deployment with HF3FS)
다음은 HiCache-HF3FS로 DeepSeek-R1을 배포하는 예시입니다. 자세한 내용은 HF3FS Documentation을 참고하세요.
python3 -m sglang.launch_server \
--model-path /xxx/DeepSeek-R1/ \
--log-level info \
--tp 8 \
--host 0.0.0.0 \
--port 10000 \
--enable-metrics \
--enable-cache-report \
--page-size 64 \
--mem-fraction-static 0.85 \
--enable-hierarchical-cache \
--hicache-ratio 2 \
--hicache-size 0 \
--hicache-mem-layout page_first_direct \
--hicache-io-backend direct \
--hicache-write-policy write_through \
--hicache-storage-backend hf3fs \
--hicache-storage-prefetch-policy wait_complete \
Mooncake로 배포 (Deployment with Mooncake)
다음은 Mooncake로 Qwen3-235B-A22B-Instruct-2507을 배포하는 예시입니다. 자세한 내용은 Mooncake Documentation을 참고하세요.
# Set Mooncake environment variables
export MOONCAKE_TE_META_DATA_SERVER="http://127.0.0.1:8080/metadata"
export MOONCAKE_GLOBAL_SEGMENT_SIZE=816043786240
export MOONCAKE_PROTOCOL="rdma"
export MOONCAKE_DEVICE="$DEVICE_LIST"
export MOONCAKE_MASTER=127.0.0.1:50051
# Launch SGLang server with Mooncake backend
python3 -m sglang.launch_server \
--model-path $MODEL_PATH \
--tp 8 \
--page-size 64 \
--enable-hierarchical-cache \
--hicache-ratio 2 \
--hicache-mem-layout page_first_direct \
--hicache-io-backend direct \
--hicache-storage-backend mooncake \
--hicache-write-policy write_through \
--hicache-storage-prefetch-policy timeout
커스텀 스토리지 백엔드 통합 (Custom Storage Backend Integration)
새 스토리지 백엔드를 통합하려면:
-
세 가지 핵심 메서드 구현:
get(key): 키로 값 조회exists(key): 키 존재 확인set(key, value): 키-값 쌍 저장
-
백엔드 등록: 스토리지 백엔드를 HiCache BackendFactory에 추가
HiCache 컨트롤러가 모든 스케줄링과 동기화를 자동으로 처리합니다.
동적 백엔드 로딩 (Dynamic Backend Loading)
또는 동적 로딩을 사용해 저장소에 백엔드를 하드코딩하지 않을 수 있습니다:
python3 -m sglang.launch_server \
--model-path your-model \
--enable-hierarchical-cache \
--hicache-storage-backend dynamic \
--hicache-storage-backend-extra-config '{"backend_name":"custom_backend_name", "module_path": "your_module_path", "class_name": "YourHiCacheClassName"}'
설정 파라미터 (Configuration Parameters):
--hicache-storage-backend:dynamic으로 설정--hicache-storage-backend-extra-config: 다음을 포함한 JSON 설정backend_name: 커스텀 백엔드 식별자module_path: 구현체의 Python 모듈 경로class_name: HiCache 구현 클래스명interface_v1:batch_get_v1·batch_set_v1메서드 사용 제어를 위한 0(비활성) 또는 1(활성)
커뮤니티와 지원 (Community and Support)
- GitHub Issues: 버그와 기능 요청 보고
- Slack Channel: #sgl-kv-cache-store에서 커뮤니티 토론 참여
- Documentation: 스토리지 백엔드별 가이드 참조
이 문서는 커뮤니티 피드백과 새 기능에 따라 지속적으로 업데이트됩니다. 기여와 제안을 환영합니다!