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 实现,通过引擎注册表机制实现了后端无关的统一接口,使新增训练后端变得非常简单。