Prhub

#29621 Extract reusable VMM shareable-handle helpers from register_graph_inputs

原始 PR 作者 minosfuture 合并时间 2026-07-02 05:02 文件变更 3 提交数 2 评论 3 代码增减 +530 / -246

执行摘要

提取 VMM 可复用的跨进程句柄共享帮助函数

为了减少重复代码,使 VMM 句柄处理步骤可被其他需要跨 rank 显存共享的代码复用,同时使 register_graph_inputs 更易读。如 PR body 所述:“Extracting them enables that reuse and makes register_graph_inputs easier to read.”

建议精读 export_shareable_handlesrelease_mappings 的实现,前者展示了 FABRIC->POSIX 优雅降级和全 rank 一致性保证,后者演示了 partial undo 模式。此 PR 是 CUDA driver API 封装的良好范例。

讨论亮点

无公开 review 讨论。维护者 @merrymercy 直接批准。PR 描述中明确声明“no behavior change”。

实现拆解

  1. 文件重命名与函数提取:将 custom_all_reduce_vmm_utils.py 重命名为 vmm_utils.py。原来内联在 VmmGraphInputManager.register_graph_inputs 中的句柄导出(FABRIC/POSIX)、fd 交换、导入与映射逻辑全部提取为模块级函数。

  2. 核心公用函数:新增 export_shareable_handles(自动从 FABRIC 降级到 POSIX)、exchange_posix_fds(SCM_RIGHTS fd 交换)、import_and_map_allocmap_chunk_into_spanimport_peer_handlerelease_mappings(安全释放)。将私有 _check_drv 改为公有 check_drv,并添加 make_rw_access_desc(构造 CUmemAccessDesc)和 all_ranks_ok(全 rank 一致性检查)。

  3. register_graph_inputs 重构VmmGraphInputManager.register_graph_inputs 依次调用上述函数,先导出 handles,再 all-gather 或交换 fds,最后逐段映射。所有 cuMem* 调用序列和 flags 保持不变,仅在共享时替换了一个错误字符串。

  4. 测试套件:新增 test_vmm_utils.py,注册为 2-gpu-large 测试。通过 _create_alloc 创建 shareable VMM 分配,测试 round-trip 导出->交换->导入映射,覆盖 transport=fabric(仅当 NVLink 可用)和 posix,以及 n_chunks=1, 3 两种映射形状。

文件 模块 状态 重要度
python/sglang/srt/distributed/device_communicators/vmm_utils.py 通信层 renamed 8.89
test/registered/unit/distributed/test_vmm_utils.py 分布式测试 added 7.42
python/sglang/srt/distributed/device_communicators/custom_all_reduce_v2.py 通信层 modified 4.09

关键符号

check_drv make_rw_access_desc all_ranks_ok release_mappings export_shareable_handles exchange_posix_fds import_and_map_alloc map_chunk_into_span import_peer_handle recv_loop

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

评论区精华

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

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

风险与影响

主要风险为文件重命名和函数公有化可能影响未发现的引用。但仓库内仅 custom_all_reduce_v2.py 一处导入,且 CI 测试覆盖了所有受影响路径(含 expandable_segments)。此外,CUDA 驱动调用序列未经修改,测试验证了跨进程 round-trip,故风险较低。潜在风险包括其他分支或未合并 PR 对新模块路径的依赖,但可通过 CI 自动检测。

对最终用户无影响(无行为变化)。对开发者:vmm_utils.py 现为共享句柄处理的标准工具库,未来 MoE、HiCache、DS V4 等模块可复用。重构降低了 register_graph_inputs 的复杂度(减少 inline 代码约 120 行),并提供了完善的单元测试,降低了后续改动引入缺陷的风险。

文件重命名可能导致旧导入中断 函数公有化可能影响内部封装 CUDA 驱动调用序列未变,风险较低

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论