SGLang HiCache 最佳实践#
为什么 HiCache 至关重要#
SGLang HiCache 通过三级分层 KV 缓存系统扩展了传统的 RadixAttention,显著提升了长文本和多轮对话场景下的性能。通过智能管理 GPU 显存、主机内存和外部存储后端之间的 KV 缓存,HiCache 解决了限制传统系统缓存命中率的根本容量瓶颈问题。
配置指南#
HiCache 核心参数#
# 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.)
启用存储后端时的关键配置#
内存布局优化#
# 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
布局兼容性
page_first:仅与kernelI/O 后端兼容,在使用direct后端时会自动切换为layer_firstpage_first_direct:专为directI/O 后端设计,具有优化的内存组织方式
预取策略#
# 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 分离架构集成#
HiCache 可以与 PD 分离架构(Prefill-Decode Disaggregation)无缝协作。您可以从以下两种配置中选择:
仅 Prefill 开启 HiCache:仅在 Prefill 节点上启用 HiCache,允许在多个 Prefill 实例之间共享 KV 缓存
全量 HiCache 配合异步卸载:在 Prefill 节点上启用 HiCache,并在 Decode 节点上开启异步 KV 缓存卸载(offloading),从而允许 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 部署#
以下是使用 HiCache-HF3FS 部署 DeepSeek-R1 的示例。更多详情请参阅 HF3FS 文档。
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 部署#
以下是使用 Mooncake 部署 Qwen3-235B-A22B-Instruct-2507 的示例。更多详情请参阅 Mooncake 文档。
# 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
自定义存储后端集成#
要集成新的存储后端:
实现三个核心方法:
get(key):通过键获取值exists(key):检查键是否存在set(key, value):存储键值对
注册您的后端: 将您的存储后端添加到 HiCache 的 BackendFactory 中
HiCache 控制器会自动处理所有的调度和同步工作。
动态后端加载#
或者,您可以使用动态加载来避免在代码仓库中硬编码您的后端:
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"}'
配置参数
--hicache-storage-backend:设置为dynamic--hicache-storage-backend-extra-config:JSON 配置,包含:backend_name:自定义后端标识符module_path:指向您实现的 Python 模块路径class_name:您的 HiCache 实现类名interface_v1:0(禁用)或 1(启用),用于控制 batch_get_v1 和 batch_set_v1 方法的使用
社区与支持#
GitHub Issues:报告 bug 和功能需求
Slack 频道:加入 #sgl-kv-cache-store 参与社区讨论
文档:参考特定存储后端的指南
本文档将根据社区反馈和新功能持续更新。欢迎提出贡献和建议!