Prhub

#1731 Fix CUDA IPC cache leaks during weight updates

原始 PR 作者 zhuzilin 合并时间 2026-03-17 10:37 文件变更 1 提交数 1 评论 0 代码增减 +8 / -2

执行摘要

修复权重更新中的 CUDA IPC 缓存泄漏,防止 GPU 内存累积。

根据PR body的描述,根因是ForkingPickler调用storage.share_cuda()创建了CUDA IPC缓存中的永久条目,这些条目持有GPU内存的强引用,只有通过torch.cuda.ipc_collect()检测到消费者关闭IPC句柄时才释放,导致内存泄漏。修复旨在避免此问题,确保内存回收。

对于涉及GPU内存管理或权重更新模块的工程师,建议精读此PR以学习CUDA IPC泄漏的修复技巧;对于一般读者,可关注变更点以规避类似的内存管理问题。

讨论亮点

本PR没有review评论或讨论,表明变更可能较为紧急或已被作者内部验证后直接合并。

实现拆解

实现集中在slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py文件的update_weights函数中:

  1. 在循环中添加del long_lived_tensors, hf_named_tensors来释放GPU张量;
  2. 在每次ray.get()后调用torch.cuda.ipc_collect()以释放已完成chunk的IPC缓存条目;
  3. 在dist.barrier后再次调用torch.cuda.ipc_collect()以释放最后一个chunk的IPC条目。这些步骤共同确保内存泄漏被及时清理。
文件 模块 状态 重要度
slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py megatron_utils update_weight modified 7.0

关键符号

update_weights

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

评论区精华

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

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

风险与影响

主要风险在于引入的torch.cuda.ipc_collect()调用可能带来轻微性能开销,特别是在高频率权重更新场景中。此外,修改依赖PyTorch CUDA IPC机制,需确保与现有torch版本的兼容性。由于变更集中在内存管理逻辑,有潜在的回归风险,但修复了已知泄漏,总体风险可控。

对用户而言,显著减少GPU内存泄漏,提升系统稳定性和可预测性;对系统,改善了GPU内存管理效率,允许内存块重用;对团队,这是一个针对性的bugfix,影响范围有限,但为处理类似内存问题的工程师提供了参考。

性能开销风险 核心内存管理变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论