Prhub

#6550 [ci] fix: FSDP actor/critic ci fail

原始 PR 作者 wuxibin89 合并时间 2026-06-01 11:02 文件变更 1 提交数 1 评论 1 代码增减 +8 / -0

执行摘要

FSDP actor/critic CI 配置校验修复

CI 中 FSDP actor/critic 的测试用例因缺少 use_remove_padding 校验而失败,需要提前捕获无效配置,避免运行时出现预期之外的错误。

该 PR 改动极小且直接,可快速合入以修复 CI。但 review 中提出的 model_config 类型兼容性问题值得在后续迭代中修复,以增强鲁棒性。

讨论亮点

讨论中 gemini-code-assist[bot] 指出:model_config 可能是 HFModelConfig 等 dataclass 实例而非字典,直接调用 .get() 会引发 AttributeError。建议改用 getattr() 或先检查 hasattr(model_config, "get") 进行安全访问。但最终合并的代码未采纳该建议,保留了原始的 .get() 调用。

实现拆解

  1. verl/workers/config/actor.pyActorConfig.validate() 方法末尾插入一段条件判断:当 ulysses_sequence_parallel_size > 1model_config 不为空且 model_config.get("use_remove_padding", False)False 时,抛出 ValueError
  2. 该校验逻辑位于 super().validate() 调用之后,确保父类校验先执行。
  3. 无其他文件修改。
文件 模块 状态 重要度
verl/workers/config/actor.py 配置层 modified 5.73

关键符号

ActorConfig.validate

关键源码片段

verl/workers/config/actor.py core-logic

唯一修改的文件,在 ActorConfig.validate() 方法中新增了针对 ulysses_sequence_parallel_size 与 use_remove_padding 一致性的校验逻辑,直接修复 CI 失败原因。

# verl/workers/config/actor.py
# ActorConfig 的 validate 方法末尾新增校验:
# 当使用序列并行 (ulysses_sequence_parallel_size > 1) 时,
# 必须启用 use_remove_padding,否则抛出 ValueError
class ActorConfig(FSDPActorConfig, Role):
    # ...
    def validate(self, n_gpus: int, train_batch_size: int, model_config: dict = None):
        """Validate FSDP actor configuration with runtime parameters."""
        super().validate(n_gpus, train_batch_size, model_config)
        # 注意:此处直接调用 .get() 假设 model_config 是 dict-like 对象;
        # 若 model_config 是 dataclass 实例(如 HFModelConfig),
        # 则 .get() 会引发 AttributeError,可考虑使用 getattr 增强健壮性。
        if (
            self.ulysses_sequence_parallel_size > 1
            and model_config
            and not model_config.get("use_remove_padding", False)
        ):
            raise ValueError(
                "When using sequence parallelism for actor/ref policy, "
                "you must enable `use_remove_padding`."
            )
# 此校验旨在避免 FSDP CI 因配置不匹配而失败,提前暴露问题。

评论区精华

model_config 类型兼容性 正确性

gemini-code-assist[bot] 指出如果 model_config 是 dataclass 实例(如 HFModelConfig),调用 .get() 会触发 AttributeError,建议同时支持 getattr 或 hasattr 安全访问。

结论:未采纳建议,合并代码保留了 .get() 调用。可能因为实际使用场景中 model_config 均为字典或 DictConfig。 · unresolved

风险与影响

低风险。新增校验仅在配置不合法时抛出异常,不会影响正常运行路径。但存在一个未修复的潜在风险:若 model_config 是 dataclass 对象(如 HFModelConfig),当前代码会因 AttributeError 崩溃而非正确提示用户。不过实际调用中 model_config 通常为字典或 DictConfig,此风险较低。

直接影响:仅影响使用 FSDP 策略且开启序列并行(ulysses_sequence_parallel_size > 1)的 actor 配置。此类用户若未设置 use_remove_padding=True,训练将在启动前抛出明确的 ValueError,从而避免运行时难以定位的问题。对其他策略(如 VeOmni)无影响。

未修复的 model_config 类型兼容性问题

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论