Prhub

#28446 [HiCache]Asymmetric pool support direct backend

原始 PR 作者 huangtingwei9988 合并时间 2026-06-17 04:17 文件变更 6 提交数 2 评论 5 代码增减 +227 / -66

执行摘要

Asymmetric 池新增 direct 后端支持,移除 kernel 强制限制

PR body 引用了一个 CI 失败链接和 #21631。此前 Asymmetric 池仅支持 kernel 后端和 page_first 布局,使用 direct 后端时 K/V 传输会被拒绝。此 PR 旨在开放 direct 后端支持,使 HiCache 在 asymmetric MHA 场景下也能利用 O_DIRECT 等高性能 IO 后端的优势。

值得精读,特别是 Asymmetric 池的布局和 IO 后端设计,以及 K/V 独立传输的意图。审查者关注如何确保 stride 安全地由单独的 kernel 调用承载。

讨论亮点

此 PR 无实质性 review 讨论,仅 Gemini 自动检查(无意见)和 hzh0425 的快速批准。

实现拆解

  1. AsymmetricMHATokenToKVPoolHost.init_kv_buffer(memory_pool_host.py):新增 page_first_direct 分支,分配五维张量 (page_num, layer_num, page_size, head_num, head_dim) 作为 K/V 缓冲区,与现有 page_first 的四维形状区分。\
  2. load_to_device_per_layer / backup_from_device_all_layer(memory_pool_host.py):为 io_backend='direct' 增加独立分支,分别调用 transfer_kv_per_layer_direct_pf_lftransfer_kv_all_layer_direct_lf_pf,且 K 和 V 作为单独调用以确保 stride 计算正确(因 head dim 不同)。\
  3. server_args._handle_model_specific_adjustments(server_args.py):移除 MiMoV2 启用 HiCache 时强制设置 hicache_io_backend='kernel'hicache_mem_layout='page_first' 的代码,改为仅注释说明两者均受支持。\
  4. 测试配套:在 test_kvcacheio_asymmetric.py 中新增 test_asymmetric_mha_direct_page_first_direct_roundtrip;在 test_asymmetric_mha_pool_host_unit.py 中将原有拒绝 direct 的测试改为验证分派正确性;test_mimo_v2.pytest_mimo_v2_flash.py 将启动参数切换为 page_first_directdirect 以实现 e2e 覆盖。
文件 模块 状态 重要度
python/sglang/srt/mem_cache/memory_pool_host.py 内存池 modified 7.15
test/registered/jit/test_kvcacheio_asymmetric.py KVCacheIO 测试 modified 6.87
test/registered/unit/mem_cache/test_asymmetric_mha_pool_host_unit.py AsymmetricMHA 单元测试 modified 6.83
python/sglang/srt/server_args.py 配置 modified 5.68
test/registered/models_e2e/test_mimo_v2.py MiMoV2 e2e 测试 modified 4.04
test/registered/models_e2e/test_mimo_v2_flash.py MiMoV2 Flash e2e 测试 modified 4.04

关键符号

init_kv_buffer load_to_device_per_layer backup_from_device_all_layer _host_k_tokens _host_v_tokens test_asymmetric_mha_direct_page_first_direct_roundtrip test_direct_load_splits_k_and_v_for_page_first_direct test_direct_backup_splits_k_and_v_for_page_first_direct test_direct_requires_page_first_direct_layout

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

新增的 direct 分支仅在 page_first_direct 布局下生效,若误用 page_first 布局会明确报错。风险较低,但若未来新增其他布局(如 page_head),需确保该分支被正确处理。另外,测试覆盖了 H200 单卡场景,但未覆盖多卡或 AMD 平台,可能存在兼容性风险。

使用 HiCache 且 K/V head dim 不同的模型(如 MiMoV2)用户现在可以选择 direct 后端,可能获得更高的 IO 性能。server_args 移除强制限制后,用户可以自由切换布局和后端。系统行为变化:原先被拒绝的 direct 请求现在可正常工作。影响范围限于 HiCache 异步传输场景。

新增 direct 后端代码路径 测试覆盖有限(仅 H200 单卡) 布局兼容性风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论