
1. 为什么RL scaling值得单独拿出来聊做强化学习训练的人大概都有过这种体验小规模实验跑得挺漂亮reward曲线稳步上升评估指标也好看可一旦把模型参数、并行环境数、batch size往上翻几倍整个训练就开始抽风——要么reward直接崩掉要么收敛速度反而变慢要么干脆卡在一个平庸的策略上再也上不去。这不是玄学而是RL scaling本身就有它自己的规律跟监督学习那套scaling law不完全是一回事。mimo-v2.6这个项目里我们把RL scaling作为一个独立的观察对象来做实验核心目的就一个搞清楚当训练规模模型侧、数据侧、并行侧按比例放大时RL训练的动态会发生什么变化哪些量是线性受益的哪些量会提前饱和哪些量甚至会反向恶化。这个观察对做实际训练的人价值很直接——它决定了你该把有限的算力预算砸在哪个维度上。这篇文章适合两类人看一类是正在做RL训练、准备扩规模但心里没底的同学另一类是想理解RL训练动态、需要一份可复现实验参考的从业者。我会把实验设计思路、关键参数选择、踩过的坑、以及那些文档里不会写但实际会要命的细节都摊开讲。所有结论都来自mimo-v2.6这轮实验的实际观察不是纸上谈兵。2. 实验整体设计与思路拆解2.1 为什么要做scaling而不是单点调优单点调优的思路是给定一个规模把超参调到最好。但这个方法有个致命问题你在小规模上调出来的最优超参搬到大规模上大概率不是最优甚至可能直接失效。原因在于RL训练里很多超参之间存在规模相关的耦合——比如学习率和batch size的关系、KL惩罚系数和策略更新幅度的关系、并行环境数和advantage估计方差的关系这些耦合在小规模下可能被噪声掩盖规模一放大就暴露出来。所以我们这轮实验的设计原则是固定一套相对合理的超参配置然后系统性地改变规模维度观察训练动态如何随之变化。这样得到的不是某个规模下的最优解而是规模变化时训练动态的响应曲线后者对做scaling决策更有指导意义。2.2 三个scaling维度怎么选RL训练里可以放大的维度很多但真正对结果影响大、且实际训练中经常需要调整的主要是三个模型规模从base model的参数量角度我们选了三个档位做对比观察策略表达能力提升对RL收敛的影响。并行环境数rollout batch这是RL特有的维度直接决定每轮策略更新能拿到多少on-policy样本。环境数太少advantage估计方差大太多单步训练时间线性增长。训练步数与数据消耗观察在固定算力预算下是多跑几步小batch还是少跑几步大batch更划算。这三个维度不是独立的实际训练中它们互相牵制。我们的做法是先固定两个、扫一个得到单维度响应曲线再做交叉验证看耦合效应。2.3 基线配置与对照组设置基线配置的选择很关键它决定了后续所有对比的参照系。我们用的基线大致是这样的中等规模模型 中等并行环境数 标准PPO风格的目标函数 固定的KL系数调度。这个配置在小规模预实验里表现稳定reward曲线没有明显震荡评估指标能到预期水平。对照组的设计上我们没有简单地改一个参数看结果而是按scaling比例成组调整。比如模型规模翻倍时学习率、batch size、KL系数都按经验比例同步调整避免出现只放大模型不调学习率这种不公平对比。这一点很重要很多scaling实验结论不可靠就是因为对照组设置不公平。提示做scaling实验时最容易被忽略的是同步调整这件事。只改一个维度、其他全不动得到的结论往往不能推广因为其他维度已经不在合理工作区间了。3. 核心细节解析与实操要点3.1 模型规模放大后的收敛行为变化模型规模从最小档到最大档我们观察到几个比较明确的现象。第一大模型的初始策略熵明显更低也就是说它一开始就更自信探索行为更少。这个现象在小模型上不明显但规模上去之后非常突出。带来的直接后果是如果沿用同样的熵正则系数大模型会过早收敛到一个次优策略reward曲线前期涨得快、后期卡死。第二大模型对KL惩罚的敏感度更高。同样的KL系数大模型策略更新幅度更小训练更保守。这本身不一定是坏事但如果你期望它快速适应新reward信号就会觉得它学得慢。我们的处理方式是给大模型配更小的KL系数初值配合更激进的熵正则把探索和利用的平衡重新拉回来。第三大模型的reward方差更低。这个其实是好事意味着advantage估计更稳定梯度噪声更小。但代价是它对reward shaping的依赖更强——如果reward设计有偏大模型会更快地过拟合到这个偏差上而且更难通过后续训练纠正。3.2 并行环境数对训练稳定性的影响并行环境数是RL scaling里最反直觉的维度。直觉上环境越多、样本越多、训练越稳但实际观察不是这样。环境数从低档提到中档时训练稳定性确实明显改善reward曲线更平滑评估指标波动更小。这个阶段收益是正的符合预期。但从中间档继续往上提收益开始递减而且出现了一个新问题策略更新频率下降导致的off-policy程度上升。环境数太多每轮rollout耗时变长等这一轮数据收集完策略已经更新过好几次了数据的新鲜度下降on-policy假设被削弱。我们实测下来环境数和模型规模之间存在一个经验比例关系。模型越大单次前向耗时越长环境数就不宜设得太大否则单步训练时间会被rollout主导整体吞吐反而下降。这个比例没有理论公式得靠实测标定但大方向是环境数的增长应该慢于模型规模的增长。3.3 训练步数与数据效率的权衡固定算力预算下多步小batch和少步大batch哪个好我们的观察是取决于reward信号的稠密程度。reward稠密、每步都有有效梯度信号的任务少步大batch更划算因为大batch的梯度估计更准每步更新质量高。reward稀疏、需要大量探索才能碰到有效信号的任务多步小batch反而更好因为更新频率高策略能更快地朝有效方向移动大batch在这种情况下只是把噪声平均了一下没有实质帮助。这个结论对实际训练的指导是不要盲目追求大batch先看你的reward设计是稠密还是稀疏。mimo-v2.6里我们两种任务都跑了差异非常明显稠密任务上大batch的样本效率能高出30%以上稀疏任务上反而是小batch领先。3.4 关键参数的同步调整策略前面提到对照组要同步调整具体怎么调这里给一个我们实际用的经验规则放大维度同步调整项调整方向备注模型规模x2学习率下调约30%-50%大模型梯度尺度更大模型规模x2KL系数初值下调约50%大模型对KL更敏感模型规模x2熵正则上调约20%-30%补偿初始熵降低环境数x2学习率基本不变样本质量提升抵消环境数x2更新频率适当降低控制off-policy程度batch size x2学习率上调约20%线性缩放规则的保守版这张表不是万能公式但作为起点比什么都不调强得多。实际用的时候建议先按这个调再根据前几百步的reward曲线微调。注意学习率的线性缩放规则batch翻倍、lr翻倍在RL里要慎用因为RL的梯度噪声结构和监督学习不同直接套用容易导致训练发散。我们用的是保守版只上调20%左右。4. 实操过程与核心环节实现4.1 实验环境搭建与配置基线环境搭建这块核心是把训练框架的并行能力和RL的rollout机制对齐。我们用的是标准的分布式训练框架模型侧做数据并行加张量并行rollout侧用独立的推理进程池避免训练和推理抢资源。配置基线的关键参数大致如下以中等档为例model: hidden_size: 2048 num_layers: 24 num_heads: 16 rl: algorithm: ppo clip_ratio: 0.2 kl_coef_init: 0.02 entropy_coef: 0.01 gamma: 0.99 gae_lambda: 0.95 rollout: num_envs: 256 rollout_steps: 128 batch_size: 1024 train: lr: 1.5e-5 warmup_steps: 100 total_steps: 20000这套配置在小规模预实验里跑了大概5000步确认稳定然后才作为基线开始扫规模。4.2 单维度scaling实验的执行流程每个维度的scaling实验按这个流程走确定扫描点每个维度选3-4个档位档位之间保持大致等比比如x1、x2、x4。同步调整超参按3.4节的规则调整记录调整前后的完整配置。短跑验证每个配置先跑500-1000步看reward曲线是否正常启动异常的直接排查配置问题。长跑采集验证通过的配置跑满预算每100步记录一次reward、KL散度、熵、梯度范数、评估指标。交叉验证单维度结论出来后挑2-3个组合做交叉实验确认结论在耦合情况下依然成立。这个流程看起来繁琐但能避免跑了几万步才发现配置有问题的浪费。短跑验证这一步千万别省我们早期就是省了这步结果一个KL系数设错的配置跑了三天才发现白烧算力。4.3 训练动态的监控指标与记录方式RL训练要监控的指标比监督学习多得多我们固定记录这几类reward相关训练reward均值、评估reward、reward方差策略相关策略熵、KL散度相对参考策略、clip fraction优化相关梯度范数、学习率、更新幅度系统相关单步耗时、rollout耗时占比、显存占用记录频率是每100步一次关键阶段比如reward突变时加密到每10步。这些指标后面分析scaling行为时是主要依据尤其是KL散度和熵的变化曲线能解释很多reward异常。4.4 一次典型的规模放大实操记录拿模型规模从x1放大到x2这次实验举例。调整项学习率从1.5e-5降到1.0e-5KL系数从0.02降到0.01熵正则从0.01提到0.013其他不变。前500步reward上升速度比x1慢但曲线更平滑KL散度维持在低位。这个阶段符合预期大模型更保守。500-2000步reward开始加速逐渐追平x1的水平熵缓慢下降但没有崩。这里有个细节x1的熵在1500步左右就降到很低了x2的熵到2500步才降到同等水平说明大模型的探索维持得更久。2000-8000步x2的reward超过x1最终评估指标高出约8%。KL散度全程稳定没有出现x1后期那种KL突然抬升的情况。这次实验的结论是模型规模放大确实带来收益但需要配套调整超参尤其是KL和熵。不调整的话x2的表现反而不如x1我们试过reward卡在x1的80%左右上不去。5. 常见问题与排查技巧实录5.1 reward曲线异常的分类与定位RL训练出问题reward曲线是最直接的信号。我们整理了几种典型异常和对应的排查方向异常表现可能原因排查方向reward前期就崩学习率过大/KL系数过小先降lr再调KLreward涨到一半卡死熵过低/探索不足提高熵正则检查策略熵曲线reward震荡剧烈batch过小/环境数不足增大batch或环境数reward缓慢下降过拟合reward偏差检查reward设计加KL约束评估指标与训练reward背离过拟合训练分布检查评估集分布加正则这张表是我们踩坑踩出来的实际排查时按这个顺序走能省不少时间。5.2 KL散度失控的典型场景KL散度失控是RL训练里最常见也最头疼的问题。我们遇到过的典型场景有两个。一个是参考策略更新滞后。有些实现里参考策略不是实时更新的如果更新周期设得太长KL约束就形同虚设策略会跑偏。解决办法是缩短参考策略更新周期或者用滑动平均的方式平滑更新。另一个是reward尺度突变。如果reward函数里有某个分量在训练中途因为环境变化而尺度突变KL会瞬间抬升。这个在小规模下不明显规模放大后reward信号更强突变的影响也被放大。我们的处理是给reward做归一化并且监控每个分量的尺度变化。5.3 并行环境数增加后吞吐反而下降这个问题前面提过这里展开说排查思路。环境数增加后吞吐下降通常是三个原因之一rollout成为瓶颈单步训练时间里rollout占比超过70%说明推理侧跟不上需要优化推理或减少环境数。通信开销上升环境数增加导致进程间通信量上升尤其是在跨节点场景下。检查通信耗时占比。显存压力导致batch切分环境数增加后单次rollout数据量变大如果显存不够被迫切分batch反而增加开销。排查时先看耗时分解定位瓶颈在哪再针对性处理。盲目加环境数是最常见的错误。5.4 规模放大后复现性变差怎么办规模放大后实验复现性变差是普遍现象原因主要是随机性来源变多环境随机、并行调度随机、梯度同步顺序随机。我们的应对方式固定所有能固定的随机种子包括环境侧记录完整的配置和代码版本任何改动都留痕关键结论至少跑两次不同种子确认接受一定范围内的波动不追求完全一致提示RL实验的复现性天然比监督学习差不要用监督学习的标准要求RL。关键是结论的方向性一致而不是数值完全一致。5.5 独家避坑清单最后整理几条我们踩过、但文档里基本不会写的坑不要在训练中途改环境数。环境数变化会改变advantage的估计分布中途改会让训练动态断裂。要改就重启训练。KL系数不要用固定值。用自适应调度根据实际KL散度动态调整比固定值稳得多。评估频率不要太高。评估本身消耗算力而且频繁评估会干扰训练节奏。我们一般每500-1000步评估一次。梯度裁剪阈值要随规模调整。大模型梯度范数分布不同沿用旧阈值要么裁太狠要么裁不动。保存checkpoint时连优化器状态一起存。只存模型权重的话恢复训练后优化器状态重置训练动态会突变。这些坑单独看都不大但凑在一起能让一次实验多烧好几天算力。mimo-v2.6这轮实验下来我个人最大的体会是RL scaling不是简单地把东西放大而是要重新理解每个规模维度背后的动态变化然后针对性地调整。规模放大带来的收益是真实的但前提是你得把配套的东西都调对。