4.3 KiB
4.3 KiB
目标
- 在现有 DPO/PPO 基础上,新增 GRPO 与 SPO 训练类型的完整前后端流程。
- 选定对应训练类型后,仅显示该类型的特有参数;隐藏不需要的参数。
- 参数默认值严格对齐
trainer/train_grpo.py与trainer/train_spo.py。 - 保持原有
trainer_web逻辑与交互不受影响。
代码改动
前端模板(index.html)
- 在训练类型选择框中新增:
RL - GRPO(value=grpo)、RL - SPO(value=spo)。 - 新增两块参数卡片:
- GRPO 参数卡(class=
parameter-card grpo):beta(浮点输入,placeholder=0.02)num_generations(整数输入,placeholder=8)reasoning(下拉 0/1)reward_model_path(文本输入,placeholder=../../internlm2-1_8b-reward)
- SPO 参数卡(class=
parameter-card spo):beta(浮点输入,placeholder=0.02)reasoning(下拉 0/1)reward_model_path(文本输入,placeholder=../../internlm2-1_8b-reward)
- GRPO 参数卡(class=
- 保持现有 DPO/PPO 参数卡结构不变。
前端交互(static/js/train/form.js)
- 在
onTrainTypeChange中:- 为 GRPO/SPO 添加显示/隐藏逻辑:
.grpo与.spo卡片只在对应训练类型显示。pretrain-sft区域显示范围扩展到grpo与spo(需要save_weight字段)。from-weight区域在ppo/grpo/spo下隐藏(这三者均不使用from_weight)。
- 新增默认参数设定:
- GRPO 默认值(严格对齐
trainer/train_grpo.py):save_dir=../out,save_weight=grpo,epochs=1,batch_size=2,learning_rate=8e-8data_path=../dataset/rlaif-mini.jsonl,log_interval=1,save_interval=10hidden_size=512,num_hidden_layers=8,max_seq_len=66,use_moe=0- 特有:
beta=0.02,num_generations=8,reasoning=1,reward_model_path=../../internlm2-1_8b-reward
- SPO 默认值(严格对齐
trainer/train_spo.py):save_dir=../out,save_weight=spo,epochs=1,batch_size=2,learning_rate=1e-7data_path=../dataset/rlaif-mini.jsonl,log_interval=1,save_interval=10hidden_size=512,num_hidden_layers=8,max_seq_len=66,use_moe=0- 特有:
beta=0.02,reasoning=1,reward_model_path=../../internlm2-1_8b-reward
- GRPO 默认值(严格对齐
- 为 GRPO/SPO 添加显示/隐藏逻辑:
- 保持 GPU 选择与提交逻辑不变。
后端启动器(trainer_web/train_web_ui.py)
- 在
start_training_process中新增train_type=='grpo'与train_type=='spo'分支:grpo使用脚本../trainer/train_grpo.py;显式拼接:--beta、--num_generations、--reasoning、--reward_model_path(若前端提供)。spo使用脚本../trainer/train_spo.py;显式拼接:--beta、--reasoning、--reward_model_path(若前端提供)。
- 在通用参数拼接的跳过列表中新增:
'num_generations','beta','reasoning','reward_model_path'(防止重复添加),并与 DPO/PPO 现有跳过策略一致;同时对grpo/spo也跳过from_weight。 - 其余逻辑(多卡、日志、监控)保持不变。
进程显示名称
static/js/processes/list.js的名称映射中补充:ppo: 'PPO', grpo: 'GRPO', spo: 'SPO'(logfiles/list.js已有,无需改动)。
验证步骤
- 前端:切换训练类型时仅显示对应参数卡;
from_weight在ppo/grpo/spo下隐藏;默认值填充正确。 - 后端:提交后查看日志首行的命令拼接,确认包含对应特有参数:
- GRPO:
--beta 0.02 --num_generations 8 --reasoning 1 --reward_model_path ../../internlm2-1_8b-reward - SPO:
--beta 0.02 --reasoning 1 --reward_model_path ../../internlm2-1_8b-reward
- GRPO:
- 保证 DPO/PPO 流程未受影响:分别发起一次 DPO/PPO 以回归测试。
- 多卡/单卡/CPU 选择与日志查看、进程管理均保持工作。
兼容性与风险控制
- 所有改动均为增量更新,不修改既有字段与 API 形态。
- 默认值与训练脚本对齐;占位符仅用于引导,实际以默认填充值为准。
- 若未提供特有参数,后端不拼接该 flag,训练脚本使用自身默认值。
交付
- 更新上述 4 处文件:
templates/index.html、static/js/train/form.js、trainer_web/train_web_ui.py、static/js/processes/list.js。 - 提供端到端验证记录与示例日志片段,确保功能闭环。