跳转至

veRL FSDP SFT Trainer 详解

LaTeX 源码 · 备用 PDF

字段 内容
作者/整理 基于公开课程资料整理
来源 五道口纳什
日期 2025

veRL FSDP SFT Trainer 详解

引言

本期介绍 veRL 中简洁高效的 FSDP SFT Trainer,回顾 SFT 训练的完整过程。

好的训练框架设计

两大设计维度

  • Dataset:数据加载和预处理抽象(SFT Dataset, RLHF Dataset)
  • Trainer:训练循环抽象(SFT Trainer, PPO Trainer)

SFT Dataset

核心是 get_item 函数:将 prompt-response 数据转换为模型输入。关键点:

  • 只对 response 部分计算 loss(prompt 部分 mask 掉)
  • Token 化处理:添加特殊 token、padding、attention mask

FSDP SFT Trainer

veRL 的 SFT Trainer 代码极其简洁清晰,是学习 SFT 实现细节的优秀模板。FSDP(Fully Sharded Data Parallel)实现了分布式训练。

SFT vs. RL 训练差异

  • SFT:有监督学习,有明确的 target,不需要 rollout
  • RL:需要在线 rollout 生成 response,reward 作为训练信号

本章小结

veRL 的 SFT Trainer 是一个优秀的参考实现,代码简洁、可读性强。

代码阅读法:先看数据如何流进 Trainer

这节课的价值,在于把 Dataset 和 Trainer 两个核心抽象钉得很清楚。真正阅读框架代码时,最值得先跟的是:一个样本如何从 get_item 进入 batch,再流入 Trainer 完成前向与反向传播。

阅读训练框架的最短路径

  • 先看 Dataset 如何组织输入输出
  • 再看 Trainer 如何消费 batch
  • 最后才去看分布式策略如何包裹训练循环

本章小结

理解训练框架,不一定要先啃最复杂的分布式代码;先看数据流和 Trainer 逻辑,往往更容易建立全局认识。

总结与延伸

  1. Dataset + Trainer 是训练框架的两大核心抽象
  2. SFT 只对 response 计算 loss
  3. FSDP 实现分布式训练