PyTRIO 教程:从 GRPO 到 Agent 强化学习实战
我用 PyTRIO 把论文里的训练方法拆成可以运行、修改和检查的实验。这份教程入口把本仓库的代码与笔记串起来:先完成一次 GRPO 训练,再逐步加入自定义 loss、工具环境和图片输入。
PyTRIO 将模型训练与采样放到远程服务,本地脚本组织数据、奖励和实验循环。服务能力与接口说明见 PyTRIO 官方文档。这里记录的是我在具体任务中的实现、观察和边界。
第一次使用 PyTRIO,从哪里开始?
- 按安装与首次训练指南获取仓库、安装锁定依赖,并登录 PyTRIO 与 SwanLab。
- 阅读 GRPO 原理与代码,先认清 prompt、group、reward 和 advantage 在代码里的位置。
- 按 GRPO 快速启动运行 GSM8K 小规模训练。当前指南使用
01-grpo/01-demo-sync.py同步入口。 - 检查训练日志里的 reward、退化组比例、生成长度与训练 token 数,并保存程序输出的 sampler weights 路径。
仓库当前锁定 pytrio==0.2.9,要求 Python 3.13 或以上。复现实验时优先使用仓库的锁定环境;想尝试其他 SDK 版本时,单独检查接口和实验结果。
按任务选择教程
| 你想解决的问题 | 阅读与运行入口 | 阅读时重点检查 |
|---|---|---|
| 完成一次数学推理 RL 训练 | GRPO · 快速启动 | 同题组采样、奖励、旧策略 logprob 与 advantage |
| 改变策略更新方式 | Loss Functions · DAPO · GSPO | 裁剪、动态采样和序列级目标各自改了哪一步 |
| 使用教师反馈训练学生 | General OPD · Medical OPD · OPSD | 学生轨迹、教师打分与 token 级学习信号 |
| 训练会调用工具的 Agent | Search-R1 · ReTool | 搜索或代码执行结果怎样进入上下文,哪些 token 参与 loss |
| 研究长程环境交互 | ALFWorld · TEMPO · AgentOPSD | 环境状态、轨迹预算、终局奖励与信用分配 |
| 加入图片和视觉工具 | Vision GRPO · Spec-o3 | 图文输入、视觉 token 对齐和固定评测条件 |
| 训练固定选项的决策模型 | PyTrio-Jev · 快速启动 | marker 位置监督、候选概率与温度校准 |
GSPO 笔记会区分核心 loss 实现与完整训练复现;其他章节也保留各自的环境、预算和实现边界。阅读结果时,请一起看这些条件。
读 PyTRIO 训练代码时,先找这五个位置
以仓库的 GRPO 同步脚本为例:
ServiceClient与create_lora_training_client:选择基模并创建训练会话。save_weights_and_get_sampling_client:从当前训练权重取得 sampler,再做组采样。- reward 与 advantage 的计算:追踪它们如何对应到每条 completion。
forward_backward或forward_backward_custom,随后optim_step:定位 loss、梯度与参数更新。save_weights_for_sampler:找到训练结束后的推理权重输出。
先沿着这些位置读通一次数据流,再修改一个变量。例如只切换 loss,保持模型、数据、采样参数和训练预算一致,观察日志发生了什么变化。
常见问题
本地没有 GPU,也能运行吗?
本仓库把模型采样与训练交给 PyTRIO 服务,本地仍需运行数据处理、实验循环以及所选任务的工具或环境。需要可用的服务账户和训练资源;“本地不跑模型训练”不代表实验没有资源成本。
训练 reward 上升,就能说明模型变好了吗?
训练日志只能说明当前训练样本上的行为。比较模型能力时,还要固定测试集、评测协议与采样预算。GRPO 章节当前没有独立 eval.py,请保留这个边界;其他任务按各自文档运行评测。
我熟悉 Tinker,这些笔记能怎么用?
从 Tinker 与 PyTRIO 的训练工作流对照开始,把采样、奖励、策略更新与 checkpoint 对应到具体实验。当前仓库运行入口使用 PyTRIO,迁移到其他 SDK 需要单独适配和验证。
下一步:安装 PyTRIO 并跑通第一个实验,或查看完整学习路线。