# PR #23182 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[ci][cu13] Bump torch_memory_saver to 0.0.9.post1; restore manual tests
- 合并时间：2026-05-02 13:50
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/23182

---

# 执行摘要

- 一句话：升级 torch_memory_saver 并恢复 cu13 测试
- 推荐动作：值得合入。这是一个典型的依赖升级与测试恢复 PR，变更简洁明了。对于维护者而言，可以关注 `torch_memory_saver==0.0.9.post1` 在更广泛的 CUDA 版本上的稳定性，但就本 PR 而言风险已充分验证。

# 功能与动机

此前 `torch_memory_saver==0.0.9` 的 wheel 仅链接了 `libcudart.so.12`，在 CUDA 13 运行时环境（如 H200）下 `LD_PRELOAD` 会因找不到 `libcudart.so.12` 而失败。参见 PR body 中的日志：`python3: error while loading shared libraries: libcudart.so.12: cannot open shared object file`。

0.0.9.post1 通过在 wheel 内打包 `preload_cu13.abi3.so` 和 `torch_cu13.abi3.so` 等文件（并利用 `ctypes.CDLL` 探测运行时 CUDA 版本）解决了该问题，从而不再需要为 cu13 环境单独构建或分发 wheel。

# 实现拆解

1. **升级 torch_memory_saver 版本约束**：在 `python/pyproject.toml` 的 `[project.dependencies]` 中将 `torch_memory_saver==0.0.9` 改为 `torch_memory_saver>=0.0.9.post1`，使得 pip install 时能自动获取兼容 cu12 和 cu13 的 wheel。

2. **将 cu13 阻塞的测试移回 registered 目录**：删除 `test/manual/model_loading/test_utils_update_weights.py` 和 `test/manual/rl/test_multi_instance_release_memory_occupation.py` 开头的 TODO 块注释（描述 cu13 兼容问题），并将其移至对应的 `test/registered/` 目录下，恢复其在 CI 中的自动运行。

3. **验证结果**：在 H200 + CUDA 13.0.1 环境下，两项测试均通过。`test_utils_update_weights.py` 在单 GPU 上 45 秒完成，`test_multi_instance_release_memory_occupation.py` 在 dp=2 tp=2 的 4 卡配置下 71 秒完成。

关键文件：
- `python/pyproject.toml`（模块 依赖管理；类别 config；类型 configuration）: 核心配置变更：将 torch_memory_saver 的版本约束从固定版本改为宽松范围，使 cu12+cu13 兼容的 wheel 能被 pip 解析安装。
- `test/registered/model_loading/test_utils_update_weights.py`（模块 模型加载；类别 test；类型 rename-or-move）: 从 test/manual/ 搬迁回 registered 目录，并删除开头的 TODO 注释块，测试逻辑不变。恢复 CI 自动执行。
- `test/registered/rl/test_multi_instance_release_memory_occupation.py`（模块 强化学习；类别 test；类型 rename-or-move）: 从 test/manual/ 搬迁回 registered 目录，并删除开头的 TODO 注释块，测试逻辑不变。恢复 CI 自动执行。

关键符号：未识别

## 关键源码片段

### `test/registered/rl/test_multi_instance_release_memory_occupation.py`

从 test/manual/ 搬迁回 registered 目录，并删除开头的 TODO 注释块，测试逻辑不变。恢复 CI 自动执行。

```python
# test/registered/rl/test_multi_instance_release_memory_occupation.py (head)
# 移除了 base 版本中阻止 cu13 运行的 TODO 注释块，其余代码与原 manual 版本一致。
# 原先的注释内容（已删除）: 指出该测试在 cu13 环境中失败。
import gc
import multiprocessing
# ...（后续代码与 manual 版本完全相同）

```

# 评论区精华

主要讨论集中在 review 阶段：

- **gemini-code-assist[bot] 指出**：在 Dockerfile 中直接硬编码 Github URL 安装 torch_memory_saver wheel 不够一致，建议改用 `${GITHUB_ARTIFACTORY}` 变量，以支持自定义仓库或镜像。但该 PR 最终并未涉及 Dockerfile 的修改：torch_memory_saver 的升级仅通过 `pyproject.toml` 的版本约束变更实现，Dockerfile 中无需额外的安装步骤。因此该建议已被间接采纳（根本不需要 Dockerfile 变更）。

 - **用户 Kangyan-Zhou 多次触发 /rerun-test**以确认 CI 通过，最终 1-gpu-h100-h200 runner 上的测试通过。

 - Dockerfile 中安装 URL 应使用 GITHUB_ARTIFACTORY 变量 (style): 该建议未直接体现在 PR 中，因为最终实现方式不涉及 Dockerfile 修改——torch_memory_saver 的更新完全通过 pyproject.toml 的版本约束实现，pip 会自动从 PyPI 获取合适的 wheel。

# 风险与影响

- 风险：风险极低。该 PR 本质上是依赖版本放宽和测试搬迁：

1. 依赖版本从 `==0.0.9` 改为 `>=0.0.9.post1`，在同一 wheel 内向下兼容 cu12，不存在回归风险。
2. 测试文件搬迁仅删除了阻塞的注释块，未修改任何测试逻辑，不会引入新的缺陷。
3. 在 H200 cu13 环境上的两次关键测试均通过，验证了兼容性。
- 影响：
 - **用户 / 系统**：使用 CUDA 13 运行时的用户将不再遇到 `torch_memory_saver` 加载失败的错误；cu12 用户无感知。
 - **CI/ 团队**：此前因 cu13 问题手动移至 `test/manual/` 的两个测试现在重新纳入 CI 自动检查，减少了人工维护成本。
 - **部署**：不需要修改 Dockerfile 或 CI 矩阵等配置文件。
 - 风险标记：无显著风险

# 关联脉络

- PR #23119 疑似关联 PR（issue 评论中提及失败 workflow）: PR body 和测试文件中的 TODO 注释引用了 https://github.com/sgl-project/sglang/actions/runs/24616960626/job/71980705675?pr=23119，表明 PR #23119 是之前暴露 cu13 兼容性问题的 CI 运行。