veRL FSDP SFT Trainer 详解
| 字段 | 内容 |
|---|---|
| 作者/整理 | 基于公开课程资料整理 |
| 来源 | 五道口纳什 |
| 日期 | 2025 |

引言
本期介绍 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 逻辑,往往更容易建立全局认识。
总结与延伸
- Dataset + Trainer 是训练框架的两大核心抽象
- SFT 只对 response 计算 loss
- FSDP 实现分布式训练