Wink Pings

一个加法项,让FP8 RL训练稳了

Score Centering 成为 TRL async GRPO Trainer 的默认配置。FP8 rollout 下,训练奖励从 0.338 提到 0.715。训练和采样不一致导致的 drift,被一个加法修正项抵消。

0.715 对 0.338。0.723 对 0.095。

这是 Lewis Tunstall 贴出的训练奖励对比。FP8 rollout 下,Score Centering + masked importance sampling 的奖励是 0.715,普通基线只有 0.338。他的标题就一句话:“FP8 rollouts. Stable learning.”

FP8 rollout 下训练奖励对比曲线图

TRL(Hugging Face 的强化学习库)把 Score Centering 加进了 async GRPO Trainer(异步 GRPO 训练器)。绿线贴着 bf16 reference 走,红线冲到半路掉头向下。

RL 训练 LLM 有个老大难:训练和采样策略不一致(training-inference mismatch,TIM)。模型采样生成数据,训练更新参数,理想情况下两者一致。实际总有差异——训练器用 bf16,采样器用 FP8;KV cache 量化;异步更新,训练器拿到的还是旧权重。这些差异让梯度更新带上偏差,偏差会累积,训练越久,模型越飘。

业内已有的解法分两类。一是对齐数值,router replay、batch-invariant kernels 之类,有效果,但 rollout 性能会打折扣。二是重要性采样(importance sampling),给偏离策略的更新加权,但权重被 clipping 之后会引入新偏差。

Max Ryabinin 和 Martin Marek 从第一性原理重新看这个问题。他们发现 TIM 导致的不稳定,根源是 drift(漂移):训练器和采样器之间持续存在的偏差,每一步训练都在累积。标准解法都在绕开 drift。他们选择直接抵消它。

策略梯度更新可以分解成两部分:信号和 drift。on-policy 时,trainer score 的期望是 0,drift 消失。off-policy 时不为零,能估计出来,在更新时减掉。他们管这个叫 Score Centering。

Martin Marek 做了个动画对比:左边没有校正,优化轨迹被采样器拉偏,离损失最低点越来越远;右边加上 Score Centering,轨迹直奔最低点。

实现不复杂。训练时从 vLLM 获取采样器的 top-k logprobs(概率最高的 k 个 token 的对数概率,k=128),尾部用训练器的分布建模。loss 按 token 算,JAX 和 PyTorch 都有简洁实现,不需要改模型结构。

Score Centering 论文示意图

他们在 0.6B 到 30B 参数的模型上做了验证。Score Centering 单独用,匹配或超过 TIS、MIS 这些重要性采样方法;mismatch 越严重,优势越大。因为它是加性修正项,还能和重要性采样组合,staleness 实验里组合效果超过了纯 IS 基线。

然后是落地。Dirhousssi Amine 把 score centering + masked importance sampling 设成了 TRL async GRPO Trainer 的默认配置。各种 staleness 和采样量化设置下,稳定性很猛。

TRL async GRPO Trainer 稳定性测试结果

工程上有代价:vLLM 的 API 前端要额外返回 top-k logprobs,压力变大。用 8 个 API server,top-8 log-probs 的吞吐损失能压到 3% 左右。他们还在和 vLLM 做 flat log-probs——把 logprobs 打包成数组,避免逐个 token 构造 Python 对象。PR 已经开着(vllm-project/vllm#62446)。

vLLM flat log-probs 优化结果图

有网友评论(@Saksham Jain)说,numerics gap 才是真正的 bug,重要性采样只是把它盖住。另一个网友(@Varun Daiya)观察到,centering 消掉了 reward model 本来就不该学的 per-prompt 偏移,policy 不再从这个偏移里捞好处;他好奇 length drift 会不会也跟着降。

论文:arxiv.org/abs/2609.20807。作者 Martin Marek 和 Max Ryabinin,Martin 在 Together 的 Model Shaping 团队暑期实习期间主导了这个项目。代码:github.com/martin-marek/score-centering,基于一个叫 postax 的 JAX 框架,支持 Llama、Qwen 的预训练、SFT、DPO 和 RL。Hugging Face Journal Club 有一期 Kashif Rasul 的完整推导视频,从数学细节讲到实现:YouTube。

效果就是开头那张图:FP8 rollout 下的绿线,终于能贴着 bf16 reference 走了。

发布时间: 2026-10-27 00:41