跳转至

engine_workers.py — 统一引擎 Workers

文件概述

基于统一 Engine 抽象的新一代 Worker 实现。通过 EngineRegistry 注册机制,自动选择合适的训练引擎(FSDP/Megatron/TorchTitan/VeOmni),大幅简化了 Worker 代码并消除了后端间的重复逻辑。

这是推荐的 Worker 实现方式。

核心类

TrainingWorker

通用训练 Worker,包装了 BaseEngine 进行训练和推理。

class TrainingWorker:
    def __init__(self, config: TrainingWorkerConfig):
        # 通过 EngineRegistry 自动选择引擎
        engine_cls = EngineRegistry.get(
            model_type=config.engine.model_type,
            backend=config.engine.backend,
            device=config.engine.device,
        )
        self.engine: BaseEngine = engine_cls(
            model_config=config.model,
            engine_config=config.engine,
            optimizer_config=config.optimizer,
            checkpoint_config=config.checkpoint,
        )

关键方法:

def train_batch(self, data, loss_function):
    """执行一次训练步骤(前向+反向+优化器更新)"""
    with self.engine.train_mode():
        output = self.engine.forward_backward_batch(data, loss_function)
        grad_norm = self.engine.optimizer_step()
        lr = self.engine.lr_scheduler_step()
    return output

def infer_batch(self, data, loss_function=None):
    """执行推理(只做前向,不计算梯度)"""
    with self.engine.eval_mode():
        output = self.engine.forward_backward_batch(data, loss_function, forward_only=True)
    return output

ActorRolloutRefWorker

组装 Actor + Rollout + Reference 角色的统一 Worker。

class ActorRolloutRefWorker:
    def __init__(self, config):
        # Actor 训练 Worker
        self.actor_worker = TrainingWorker(actor_config)
        # Rollout 推理引擎
        self.rollout = ServerAdapter(rollout_config)
        # Reference 推理 Worker
        self.ref_worker = TrainingWorker(ref_config)

设计优势

旧架构 (fsdp_workers / megatron_workers):
  ActorRolloutRefWorker ──→ DataParallelPPOActor ──→ FSDP 模型
  ActorRolloutRefWorker ──→ MegatronPPOActor ──→ Megatron 模型
  (两套完全独立的代码)

新架构 (engine_workers):
  ActorRolloutRefWorker ──→ TrainingWorker ──→ BaseEngine
                                                 ├── FSDPEngine
                                                 ├── MegatronEngine
                                                 ├── TorchTitanEngine
                                                 └── VeOmniEngine
  (统一的 Worker 代码,引擎可插拔)

与其他模块的关系

  • 核心依赖 engine/base.py 中的 BaseEngine 和 EngineRegistry
  • 依赖 engine/fsdp/, engine/megatron/ 等具体引擎实现
  • 依赖 rollout/ 中的推理引擎适配器
  • 依赖 utils/losses.py 中的损失函数(ppo_loss, value_loss, sft_loss)
  • 被 verl/trainer/ppo/ray_trainer.py 调度

小结

engine_workers.py 是 verl 框架的新一代 Worker 实现,通过引擎注册表机制实现了后端无关的统一接口,使新增训练后端变得非常简单。