Prhub

verl-project/verl · 标签视图

标签列表

聚合结果

vllm 相关 PR

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 之后应考虑废弃或标注为过渡方案。

缺陷修复 重要性 7.20 洞察度 8.00

SGLang rollout 补齐视频特征转发,修复视频 VLM 盲答

值得精读,尤其是维护 rollout/多模态链路的同学:本案是“静默降级类 bug”的教科书样本——TODO 注释无告警、特征算完即丢、两个后端行为不一致,三者叠加后表现为模型输出流畅但完全虚构。建议重点看三处设计决策:(1) 用 `format="processor_output"` 复用 verl 已算好的 processor 输出而不是让 SGLang 重新抽帧,避免 fps 采样不一致这一隐形 desync;(2) 把后端差异收敛到 `LLMServerClient.generate` 的一处分支,并用无条件传参 + `TypeError` 换取“漏改即失败”的可见性;(3) teacher/OPD 路径与 rollout 路径共用同一 payload,避免修复只覆盖一半。阅读时建议同时关注作者未解决的遗留:非 Qwen 视频家族的静默丢弃、多轮 ToolAgentLoop 重复传帧、以及缺失的单测(作者愿意贡献 CPU-only mRoPE 对齐测试,可作为后续 PR 的补位点)。

缺陷修复 重要性 8.13 洞察度 6.00

NPU 补丁增加部分唤醒防护,修复 GLM-5.2 异步训练崩溃

建议精读。本 PR 是典型的“对外部引擎做安全 monkey-patch”的范本:源码指纹校验、幂等 marker、spawn 入口包装三件事结合得很好,对维护 vllm-ascend、sglang 等外部组件兼容层的开发者有直接参考价值。值得关注的设计决策是“先验证再替换”和“通过入口函数传播补丁到子进程”这两个模式。

2026-09-14
缺陷修复 重要性 5.90 洞察度 6.00

权重同步后加跨 rank barrier,避免非 leader 恢复 KV cache 时 OOM

值得精读(约 5 行,10 分钟以内),特别是正在维护权重同步、rollout 显存管理或遇到过“非 0 号 rank OOM”的工程师:它是理解“leader 抢先分配资源 → 其它 rank OOM”这类跨 rank 竞态的典型样本,也是 `asyncio.to_thread` 包装阻塞式集合通信的现成写法。 阅读时重点确认三点:一是 barrier 的位置是否确实覆盖了所有会持有显存的重 rank(本例放在 offload 与 aggressive_empty_cache 之后、resume 之前,逻辑正确);二是是否应加 `torch.distributed.is_initialized()` 守卫或改用带超时的 barrier,以降低挂起/异常风险;三是其它未覆盖的同步路径(disaggregated、TRT-LLM 之外的专用后端)是否需要同样处理。此外建议补一个最小的多 rank/异步单测或在 PR 描述中说明手工验证方法,弥补当前评审与测试证据不足的问题。

2026-09-10
测试 重要性 7.33 洞察度 5.00

新增 Ascend NPU batch-invariant 开关回归测试(14 例)

值得精读,但读的是测试脚手架而不是代码改动本身。 - 重点看 `run_on_npu` 的 spawn 子进程隔离设计:对于会在全局注册 torch dispatch 表或替换 `torch.sum`、`torch_npu.npu_add_rms_norm` 这类入口的开关,进程级隔离是唯一可靠的隔离手段,这套写法可直接迁移到其他 NPU 补丁测试。 - 重点看 `_run_check` 如何用真实 `vLLMHttpServer` 加最小 mock(模型元数据 + Ray 上下文 + 引擎配置单例)触发真实的 `init_batch_invariance()`,避免了「只测 mock」的假阳性,同时不付出加载权重与拉起推理引擎的代价。 - 关键设计决策:enabled/disabled 双向断言(特别是 disabled 时要求 `batch_invariant_ops::` 事件数必须为 0),这比只测开启路径更能捕获 dispatch 注册泄漏。 - 若要真正确认能力,建议后续补一个跨 batch size 的一致性用例:同一条样本分别放进 batch=1 与 batch=N 比较 logprob 位级一致,才覆盖 `full_determinism` 的语义;并补齐 CI 收集与算子包安装的验证,避免长期 skipped。 - 维护建议:把对 `bi._batch_invariant_LIB` 等私有符号的依赖在注释中显式标注为「随 vllm-ascend 版本可能变动」,并在 PR 描述中把文件名与 body 里的 `test_batch_invariant_switch.py` 对齐。

2026-09-09
功能 重要性 5.53 洞察度 3.00

新增 GLM-5.2 模型在 Ascend NPU 上的 32 节点 GRPO 训练示例脚本。

该 PR 是一个有价值但无需精读代码的示例脚本提交。**值得精读的程度较低**,因为变更仅为一个 Shell 脚本,不涉及核心逻辑。**但值得关注的设计决策和配置**包括: 1. 如何为 GLM-5.2 这类 MoE 模型在 32 节点规模下配置专家并行(EP=64)和推理并行(INFER_EP=64)。 2. 针对 Ascend NPU 优化的 Megatron 配置细节,如 `use_fused_rmsnorm=True`,`experimental_attention_variant="dsa"`。 3. GRPO 算法的具体参数设置(如 `clip_ratio_low=0.2`, `clip_ratio_high=0.28`),这反映了该训练配方的具体调优思路。

2026-09-07
缺陷修复 重要性 8.61 洞察度 6.00

为 vllm-ascend 添加 GLM-5.2 RL 训练兼容性补丁,修复 RMS 归一化、权重处理和内存同步问题。

这个 PR 是一个高风险的、临时性的兼容性修复,**建议仔细审查**。审查重点应放在:1) 补丁逻辑的正确性,特别是对 vllm-ascend 内部函数的 monkey-patching 是否完全复制了预期的修复(可对照 PR body 中提及的 commit `ca0420391`);2) 源码自省逻辑的健壮性,确保不会在不匹配的 vllm-ascend 版本上错误应用补丁;3) 环境变量控制的清晰度。虽然缺少讨论,但 PR 本身的设计(条件启用、防止重复、优雅降级)显示出对临时补丁风险的充分考虑。对于任何计划在 NPU 上部署 GLM-5.2 的团队,此 PR 值得关注。

2026-09-03
缺陷修复 重要性 7.32 洞察度 6.00

修复融合线性输出头后端选择逻辑,使配置参数 impl_backend 生效。

值得精读,尤其是核心逻辑变更(`FusedLinearForPPO`)和配置传播设计。此 PR 展示了如何通过显式参数和属性传递来修复一个由隐式依赖引发的架构违规,对处理类似的可选后端集成问题有参考价值。建议关注其配置传播模式(模型实例属性 -> 适配器函数参数 -> 模块初始化参数)以及完整的测试覆盖策略。