Prhub

#1972 [docker] fix mooncake offload in sglang v0.5.12

原始 PR 作者 zhuzilin 合并时间 2026-05-29 13:38 文件变更 2 提交数 1 评论 0 代码增减 +4 / -3

执行摘要

修复 sglang v0.5.12 中 mooncake offload 的 deregister 逻辑

随着 sglang 升级到 v0.5.12,mooncake offload 相关数据结构 state_data_ptrs 的存储方式发生变化(变为嵌套列表),原有的直接 batch_deregister 调用会导致解注册失败,可能引发内存泄漏或后续传输错误。修复该问题以确保 offload 功能正常工作。

建议精读补丁文件中 deregister_buffer_to_engine 的改动,理解嵌套列表的处理方式。对于 mooncake offload 的维护者,可考虑后续统一规范 state_data_ptrs 的数据结构以避免类似问题。

讨论亮点

PR 无任何评论或讨论,变更直接合并。

实现拆解

  1. 修改 deregister_buffer_to_engine 方法中的 state_data_ptrs 解注册逻辑docker/patch/latest/sglang.patch):将 if self.kv_args.state_data_ptrs: self.engine.batch_deregister(self.kv_args.state_data_ptrs) 替换为 for ptrs in self.kv_args.state_data_ptrs: if ptrs: self.engine.batch_deregister(ptrs),以支持嵌套列表结构。
  2. 更新 Docker 版本号docker/version.txt):将版本从 nightly-dev-20260526a 更新为 nightly-dev-20260529a,标识补丁版本。
文件 模块 状态 重要度
docker/patch/latest/sglang.patch 补丁 modified 4.06
docker/version.txt 部署脚本 modified 1.32

关键符号

deregister_buffer_to_engine

关键源码片段

docker/patch/latest/sglang.patch test-coverage

核心修复文件,修改了 mooncake 的 KV 管理器中解注册逻辑,以适配 sglang v0.5.12 中 state_data_ptrs 的嵌套列表结构。

# 修复前:直接对整个 state_data_ptrs 列表调用 batch_deregister,但新版本中 state_data_ptrs 为嵌套列表
# if self.kv_args.state_data_ptrs:
# self.engine.batch_deregister(self.kv_args.state_data_ptrs)# 修复后:遍历外层列表,对每个非空内层列表单独解注册
if self.kv_args.state_data_ptrs:
    for ptrs in self.kv_args.state_data_ptrs:
        if ptrs: # 确保内层列表非空,避免传递空列表导致引擎报错
            self.engine.batch_deregister(ptrs)

评论区精华

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

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

风险与影响

本次变更仅涉及 sglang 补丁文件中约 5 行代码的修改,且仅影响 mooncake offload 场景下的 deregister_buffer_to_engine 路径。风险较低,但若新版本中 state_data_ptrs 结构有其他变化(如包含 None 或非列表元素),可能导致异常。

影响范围仅限使用 docker 部署且启用 mooncake offload 功能的用户。修复后解注册行为正确,可防止内存泄漏和后续传输失败。

低风险补丁 无新增测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论