扩展 UniRL
新增模型、rollout engine、train-side algorithm、reward、training backend 和 recipe 的位置。
扩展时优先沿用已有边界:一个实现包、一个 config dataclass、一个 recipe,以及一个 focused check。
扩展位置
| 目标 | 主要位置 | recipe 如何连接 |
|---|---|---|
| 新增模型 | unirl/models/<model_name>/ | 在 bundle: 和 pipeline: 下配置 _target_;pipeline 接收共享 bundle |
| 新增 rollout engine | unirl/rollout/engine/<engine>/ | 用 @dataclass 定义 config,在 rollout: 下用 _target_ 引用 |
| 新增 train-side algorithm | unirl/algorithms/ | 一个 BaseAlgorithmConfig 子类,用 _target_ 引用并绑定到某 track 的 algorithm: 节点 |
| 新增 reward scorer | unirl/reward/local/ | 一个 spec @dataclass,在 reward.backend.config 下用 _target_ 引用 |
| 新增 training backend | unirl/train/backend/ | Remote backend 契约(与 FSDPBackend 并列) |
| 新增 recipe | examples/<path-under-examples>.yaml | python -m unirl.train_<owner> --config-name=<path-under-examples> |
新增模型
- 添加
unirl/models/<model_name>/。 - 在旁边用
@dataclass定义模型 config。 - 实现 bundle,暴露训练和 rollout 需要的可训练及冻结模块。
- 实现消费该 bundle 的 pipeline,暴露可训练 stage 和 sampling path。
- 在至少一个
examples/<path-under-examples>.yamlrecipe 中同时配置bundle:与pipeline:。
新增 Rollout Engine
- 在
unirl/rollout/engine/<engine>/下添加 typed config。 - 在 recipe 的
rollout:块用_target_引用它。 - 实现
unirl/rollout/engine/base.py中的 contract。 - 实现
generate(sample: Sample) -> Sample,填充Sample.parts中对应的生成Part。 - 如果是 dedicated engine,还要定义 trainer-to-rollout weight sync。
新增 Train-Side Algorithm
生成 Part 的训练 loss 由 StageAlgorithm 负责。只有当 loss 数学改变时才新增类
(DanceGRPO / MixGRPO 这类 recipe 组合复用 FlowGRPO;自回归 GRPO 使用 GRPO)。
- 继承
StageAlgorithm(unirl/algorithms/base.py)。 - 在旁边定义继承
BaseAlgorithmConfig的 config(普通@dataclass)。 - 实现
compute_loss_and_backward(...)——replay stage、算 loss、backward()。 - 设置
supports_multi_update(loss 是否在一个 rollout shard 上多次 optimizer step 仍有效),requires_ema_rollout只给需要 EMA 采样的 off-policy loss(NFT)。 - 在 recipe 中把该类绑定到 track 的
algorithm:节点。
完整契约见生成的 Algorithms Package README。
新增 Reward Scorer
在 unirl/reward/local/ 旁实现 spec 和 scorer。进程内模型 scorer 推荐从 LocalRewardBackend 开始,因为它提供 device 解析、eager load、offload() 和 onload()。用普通 @dataclass 定义 spec,在 recipe 的 reward.backend.config 下用 _target_ 引用它(无需注册步骤)。进程外 scoring 则把 reward backend 指向远程 service。见 Rewards。
训练 Backend 与并行
新的训练 backend 或并行工作(新的 FSDP / SP / EP plan,或 VeOmni 式 backend)面向 unirl/train/backend/ 下的 backend 契约:实现与 FSDPBackend 相同的 Remote 表面,并把 TrainTopology 映射到并行 plan,而不是硬编码 shard size。见 Trainer 与训练栈 与生成的 Train Stack README。
Agent 提示
Agent 修改代码前,应先把任务映射到上表,再读对应 package README。