Prhub

verl-project/verl · 标签视图

标签列表

聚合结果

perf 相关 PR

2026-09-16
缺陷修复 重要性 8.36 洞察度 7.00

detach model_output 修复多引擎逐 micro-batch 显存泄漏

值得精读。建议关注四点: 1. 根因定位方法:`_record_memory_history` 栈归因锁定 `p2p_communication.py::create_tensor_recv_prev`,并用 `forward_only`(0.76 MiB/micro-batch)与 PP=1(0.31 MiB/micro-batch)两组对照实验把“图保留”机制钉死,是排查训练显存泄漏的范本。 2. `detach_tree` 设计:惰性 detach(已 detached 张量原样返回)避免逐 key 创建 `TensorImpl`;递归支持 dict / list / tuple,从而覆盖 jagged nested tensors 这类新型输出结构。 3. 回归测试设计:CPU-only 下用最小 checkpoint 模型 + weakref 复现“图被钉住”机制,再配合 AST 静态检查 4 个引擎调用点,绕开“必须 PP>=2 才可复现”与“无法在 CI 断言绝对显存”的双重困境。 4. 工程陷阱提醒:“detach 位置错误导致梯度静默归零且 loss 曲线正常”说明此类内存修复必须用梯度可达性断言(`requires_grad` 契约)双保险,而不能只靠数值曲线。

2026-09-15

#7873 [perf] fix: remove full gc during weight refit

原始 PR · 作者 wuxibin89 · 合并时间 2026-09-15 22:25

性能优化 重要性 7.03 洞察度 8.00

移除权重同步 full GC 并修复 IPC ACK 竞态

值得精读,尤其是 `verl/workers/rollout/vllm_rollout/bucketed_weight_transfer.py`:它演示了如何用内存快照把“性能优化”还原成“跨进程竞态修复”,以及 CUDA IPC 的 `CudaIPCSentDataLimbo_` + `ipc_collect()` 组合在什么条件下无法回收 block。建议关注三个设计决策:最后一帧 ACK 推迟到 `_cleanup` 之后、`_ack_pending` 守卫如何维持 REP socket 的收发热度、`del weights, tensor` 前置如何顺带覆盖 `_direct_send_large_weight`。需要提醒读者的未闭环项:接收方 `_cleanup` 异常时的发送方永久阻塞(应尽快与 #7366 的 ACK 超时对齐或补 try/except 兜底 ACK),以及 `tests/utils/test_bucketed_weight_transfer.py` 缺失的 ACK 顺序断言——后者是未来重构最容易踩的坑。若团队正在维护 #7780 的 GC 开关,本 PR 之后应考虑废弃或标注为过渡方案。

性能优化 重要性 5.28 洞察度 6.00

权重恢复前改用轻量 empty_cache,去掉关键路径 full GC

值得精读,但重点不在代码而在推理链:改动本身只有一行,真正的价值是 Issue #7848 + PR body 中“拆分 empty_cache / GC / retry 各自耗时与释放量”的实验方法,可直接迁移到其他显存清理、profiler、同步点的性能排查。 阅读时建议关注三个设计决策:一是为什么普通 `empty_cache()` 在这个边界上已经足够(进程间 allocator handoff 语义 vs 释放活跃张量);二是为什么 aggressive cleanup 在权重传输后、KV-cache resume 前的那处被保留(本 PR 的边界克制);三是无单测情况下的回归防线如何建立——建议后续为 `update_weights()` 的关键路径加一个轻量守卫(例如断言该边界不再调用 `aggressive_empty_cache`,或把 GPU A/B 数据纳入 nightly 基准),否则同类回退仍可能被静默引入。

2026-09-08
缺陷修复 重要性 7.84 洞察度 6.00

分离 rollout 和训练 profiler 窗口,修复 NPU/GPU 并发采集冲突导致数据丢失。

本 PR 是一个高质量、有针对性的 bugfix,解决了实际硬件平台上的关键问题。它不仅修复了核心逻辑,还显著增强了测试和验证基础设施。强烈建议精读其实现,尤其是三种 trainer 模式下 profiler 生命周期控制的新设计,这对理解 V1 架构的扩展性和健壮性有重要参考价值。实现逻辑清晰,测试充分。

功能 重要性 8.65 洞察度 6.00

为 torch_memory 分析器增加 CUDA/NPU OOM 自动快照和多步内存历史窗口。

该 PR 是一个高质量的增强功能,解决了一个常见的痛点。代码结构清晰,异常处理完善,测试覆盖全面。建议相关开发者(尤其是进行大规模训练调优的团队)精读其设计,特别是 OOM 回调的实现和多步窗口的配置使用。

2026-09-03
功能 重要性 7.78 洞察度 5.00

为 VeOmni 引擎新增基于流的异步激活卸载配置与实现,用于降低 GPU 内存占用。

本 PR 引入了一个重要的内存优化功能,值得精读。关注重点在于: 1. `_maybe_apply_async_activation_offload` 方法的设计和应用时机,这是理解异步卸载如何与 FSDP2 和梯度检查点协同工作的关键。 2. 配置项的语义和验证逻辑,特别是 `activation_offload_modules` 的模式匹配和 `activation_offload_host_cache_limit_gb` 的内存管理策略。 3. 移除同步卸载路径对整体架构简化的影响。 尽管 PR 合并时无 Review 讨论,但其实现逻辑清晰,关键设计决策在代码注释中得到了充分解释。这是一个“重大变更”(导入ance_score: 6),因为它引入了一个全新的内存管理子系统,并伴随配置的破坏性更改。

2026-09-02
性能优化 重要性 4.73 洞察度 4.00

禁用教师蒸馏中vLLM的反标记化,降低每请求开销。

该PR值得精读,原因如下:1)展示了如何通过一个单行配置变更获得2.4-3.2倍的性能提升,且不改变行为;2)设计决策上隔离教师和学生rollout的配置,避免影响其他后端;3)讨论中深入分析了vLLM的内部机制(如 `skip_tokenizer_init` 硬编码),提供了有价值的技术洞察。建议关注教师循环的性能优化路径,以及后续学生rollout的修复(PR#7679)。

2026-09-01
性能优化 重要性 7.27 洞察度 5.00

FSDP 引擎跳过温度为 1 时的全词表 logits 缩放,降低峰值内存。

建议精读。这是一个小范围但设计精良的性能优化 PR。它清晰地识别了一个可以安全跳过的计算(温度=1 时的恒等缩放),通过引入清晰的辅助函数和状态传递实现了优化,同时配套了完备的测试和容错处理。其“识别并跳过 no-op”的优化思路和“保持兼容性”的实现方式,对于处理类似场景具有参考价值。