SGLang HiCache 最佳实践#
为什么 HiCache 很重要#
SGLang HiCache 通过三层分层 KV 缓存系统扩展了传统的 RadixAttention,在长上下文和多轮对话场景中显著提高了性能。通过智能地管理 GPU 内存、主机内存和外部存储后端的 KV 缓存,HiCache 解决了传统系统中限制缓存命中率的根本容量瓶颈问题。
配置指南#
核心 HiCache 参数#
# 必需的 HiCache 标志
--page-size 64 # 缓存管理的页面大小
--enable-hierarchical-cache # 启用 HiCache
--hicache-ratio 2 # 主机内存比例(GPU 内存的 2 倍)
--hicache-size 100 # 主机内存大小(以 GB 为计),将覆盖上述比例
--hicache-io-backend kernel # CPU 和 GPU 之间数据移动的 I/O 后端
--hicache-write-policy write_through # 从 GPU 到 CPU 的缓存写入策略
--hicache-storage-backend # 可选的存储后端(例如:hf3fs、mooncake 等)
启用存储后端的关键配置#
内存布局优化#
# 页面优先:为 I/O 效率优化,支持零拷贝(与 kernel 后端一起使用时推荐)
--hicache-mem-layout page_first
# 页面优先直接:为直接 I/O 操作优化(兼容 fa3,与 page_first 具有相同的零拷贝性能)
--hicache-mem-layout page_first_direct
# 层优先
--hicache-mem-layout layer_first
布局兼容性:
page_first:仅兼容kernelI/O 后端,使用direct后端时自动切换到layer_firstpage_first_direct:专为directI/O 后端设计,具有优化的内存组织
预取策略#
# 尽力而为:在需要时终止预取
--hicache-storage-prefetch-policy best_effort
# 等待完成:确保完整预取,提高缓存重用率
--hicache-storage-prefetch-policy wait_complete
# 超时:在完成和尽力而为之间取得平衡
--hicache-storage-prefetch-policy timeout
与 PD 分离的集成#
HiCache 与 PD 分离无缝协作。您可以在两种配置中选择:
仅填充 HiCache:仅在填充节点上启用 HiCache,允许填充实例之间共享 KV 缓存
带有异步卸载的完整 HiCache:在填充节点上启用 HiCache,在解码节点上启用异步 KV 缓存卸载,允许填充节点在多轮对话场景中重用解码节点的 KV 缓存
# 在填充节点上启用 HiCache 以实现跨填充共享(适用于系统提示场景的理想选择)
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
# 解码节点启用异步卸载以供填充节点重用 KV 缓存(适用于多轮对话的理想选择)
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 \ # 在解码节点中启用异步 KV 缓存卸载
--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 文档。
# 设置 Mooncake 环境变量
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
# 使用 Mooncake 后端启动 SGLang 服务器
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 问题:报告错误和功能请求
Slack 频道:加入 #sgl-kv-cache-store 中的社区讨论
文档:参考存储后端特定指南
本文档将根据社区反馈和新功能持续更新。欢迎贡献和建议!