TRL 增量权重同步:万亿参数模型通过枢纽桶传输
25 天前 16 阅读来源:HuggingFace Blog
AI 中文改写
原文为英文,由 AI 改写为中文报道,内容完整。如需参考原文请点击下方链接
万亿参数模型的“减肥”秘诀:TRL 如何用“增量同步”让强化学习成本骤降
异步强化学习(Async RL)有一个公开的秘密:每次训练步骤,训练器都必须把整个模型“打包”发送给推理引擎。对于一个 7B 参数的 bf16 模型,这意味着一份 14GB 的数据包;而对于一个前沿的 1T 参数模型,单次检查点的大小就接近 1TB。更关键的是,这个过程在每个训练步骤都要重复一次。
但 Hugging Face 团队最近发现,你其实不必这么做。在连续两次 RL 优化器步骤之间,大约 99% 的 bf16 权重是比特级相同的(最差情况下也不低于 98%)。真正发生变化的“增量”微乎其微。
基于这一洞察,他们向 TRL(Transformer Reinforcement Learning)库提交了一个 PR(Pull Request),实现了一种名为 Delta Weight Sync(增量权重同步) 的机制。其核心思路是:只编码那些发生变化的元素,生成一个稀疏的 safetensors 文件,上传到 Hugging Face Hub 的 Bucket 中,然后通知 vLLM(推理引擎)去拉取。
效果立竿见影: 以 Qwen3-0.6B 模型为例,每个步骤的传输负载从 1.2GB 骤降至 20-35MB。更令人印象深刻的是,他们进行了一次完全“解耦”的训练演示:训练器在一台机器上,vLLM 运行在一个 Hugging Face Space 中,Wordle 环境(用于生成奖励信号)在另一个 Space 中,而所有权重仅通过一个 Hub Bucket 流动。整个过程无需共享集群、无需 RDMA(远程直接内存访问)、无需 VPN。异步 RL 的成本,就这样被大幅降低了。
---
1. 万亿参数的“搬运”难题
如果你读过我们之前关于异步 RL 训练现状的文章,就会知道核心痛点在哪里。无论哪个异步 RL 库,无论它如何定义“策略模型”或使用何种 NCCL(NVIDIA 集合通信库)后端,最终都会撞上同一个瓶颈:权重同步。
推理引擎在执行第 N 步的策略,而训练器刚刚完成了第 N+1 步。新的权重必须从一端传输到另一端,否则推理引擎就会开始产生“策略漂移”,导致训练失效。无论是同步还是异步 RL,这个过程都卡在关键路径上。一次阻塞式的权重传输,就意味着 GPU 在空转,无法生成 token。
而采用稀疏增量路径,你可以将这段空闲时间压缩到几秒内。训练器甚至不需要等待推理引擎就绪:它只需在优化器步骤完成后,将“权重已就绪”的信号和增量权重上传到共享 Bucket,推理引擎则在自己的时间线上去拉取即可。
Fireworks AI 在其文章《Frontier RL Is Cheaper Than You Think》中给出了一个令人印象深刻的数据:对于一个前沿的 1T 参数 fp8 检查点,完整快照的大小是 1024 GiB。传统观念认为,每次更新你的“推理集群”时,都必须传输这么大的数据量。这足以让工程师们开始规划超大规模集群、RDMA 网络和专用跨区域链路。
然而,他们实际测量的相邻检查点之间的平均增量仅为 20.3 GiB,仅占完整模型的 1.98%。他们明确指出:“在 bf16 格式下,超过 98% 的权重在连续检查点之间保持比特级等价。”
Cursor 的 Composer 2 报告也讲述了类似的故事。他们将训练和推理部署在不同区域,通过一个共享的 S3 Bucket 将它们连接起来。训练器在每个训练步骤都将压缩后的权重差异上传到该 Bucket,每个集群独立地从共享的增量链中下载并重建模型,“无需与训练集群建立直接连接”。两个集群之间从不直接通信参数,Bucket 本身就是“线缆”。
2. 核心共识:增量同步的三条铁律
上述两个案例(Fireworks 和 Cursor)以及 Hugging Face 的实践,都指向了三个共识,这也是本文后续所有内容的基础:
1. 权重变化极小: 在相邻的两个 RL 步骤之间,绝大多数权重实际上没有改变。
2. 带宽成本骤降: 如果只发送变化的部分,你的带宽账单大约会减少两个数量级。
3. 对象存储即“总线”: 如果将这些微小的增量差异通过一个共享的对象存储(如 Hub Bucket、S3)来路由,你就不再需要昂贵的专用网络基础设施。
这篇文章对你有帮助吗?
觉得有用?分享给更多人
留言 · 0 条
暂无留言,来说两句吧
