Prhub

#6630 [rollout] fix: propagate ignore_eos to vLLM sampling params

原始 PR 作者 Mengyuyang 合并时间 2026-06-10 18:08 文件变更 1 提交数 2 评论 7 代码增减 +2 / -0

执行摘要

修复 ignore_eos 参数未传递到 vLLM 采样参数

PR body 指出,修改前设置 ignore_eos=True 无效,修改后该参数被正确读取,且设置为 True 后可生成到限制长度。reviewer @wuxibin89 询问用途时,作者 @Mengyuyang 解释:为了观察模型推理长序列时的性能,在小数据集上持续生成文本便于观察。该参数之前已定义但未正确传递。

PR 虽小但修复了一个配置未生效的 bug,建议合并。同时,考虑其他采样参数是否也存在类似遗漏,可未来做一次全面检查。

讨论亮点
  1. config 取值方式:reviewer @wuxibin89 建议利用 Hydra 自动将 ignore_eos 转换为布尔值的特性,直接使用 self.config.ignore_eos。但后续 @wucong25 建议设置默认值,作者最终改为 self.config.get("ignore_eos", False),既保持兼容性又提供默认值。
  2. 用途澄清:@wuxibin89 询问参数用途,作者解释用于长序列推理观察。

实现拆解

  1. 在文件 verl/workers/rollout/vllm_rollout/vllm_async_server.py 的 generate 方法中,在构建 SamplingParams 之前,添加一行代码:sampling_params.setdefault("ignore_eos", self.config.get("ignore_eos", False))。
  2. 该行代码紧跟在 repetition_penalty 的 setdefault 之后,确保 ignore_eos 参数从配置中读取并注入到采样参数字典中。
  3. 初始提交包含了一个复杂的类型转换逻辑(处理字符串和整数),但在 reviewer 建议下简化成现在的形式。
文件 模块 状态 重要度
verl/workers/rollout/vllm_rollout/vllm_async_server.py rollout modified 5.12

关键源码片段

verl/workers/rollout/vllm_rollout/vllm_async_server.py core-logic

这是唯一修改的文件,在 generate 方法中新增一行将 ignore_eos 配置传递到 SamplingParams。

# 位于 async def generate 方法中,构建采样参数字典的最后阶段
sampling_params["logprobs"] = 0 if sampling_params.pop("logprobs", False) else None
sampling_params.setdefault("repetition_penalty", self.config.get("repetition_penalty", 1.0))
​
# [ 新增 ] 将 ignore_eos 从配置传递给 vLLM 采样参数
# 此前该字段已定义但未传递,导致设置无效
# 使用 setdefault 确保用户显式传入的值优先,否则回退配置中 ignore_eos(默认 False)
sampling_params.setdefault("ignore_eos", self.config.get("ignore_eos", False))
​
sampling_params = SamplingParams(max_tokens=max_tokens, **sampling_params)
# 后续使用 sampling_params 调用 engine.generate

评论区精华

参数简化:利用 Hydra 自动类型转换 设计

reviewer wuxibin89 指出 Hydra 已自动将 ignore_eos 转为 boolean,建议简化为 `sampling_params.setdefault("ignore_eos", self.config.ignore_eos)`

结论:作者采纳建议,但随后 wucong25 建议设置默认值,最终改为 `self.config.get("ignore_eos", False)` · 已解决

参数用途说明 question

wuxibin89 询问 ignore_eos 的用途,作者解释用于长序列推理观察。

结论:确认用途为调试 / 性能分析场景 · 已解决

增加默认值建议 设计

wucong25 建议 ' 这里也设置一个默认值吧 ',要求给 ignore_eos 设置默认值。

结论:作者修改为 `self.config.get("ignore_eos", False)`,实现了默认值。 · 已解决

风险与影响

变更仅增加一行 setdefault 调用,风险极低。ignore_eos 是 vLLM 原生支持的采样参数,若配置中未指定该字段,使用 get 的默认值 False 也不会改变现有行为。

影响范围小,仅限于 vLLM rollout 服务器中采样参数的正确传递。对用户来说,之前设置了 ignore_eos=True 但不生效的用户现在可以获得预期行为。不涉及其他后端或模块。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论