在大型语言模型的强化学习人类反馈(RLHF)后训练中,分布式奖励模型训练是吞吐量与稳定性的关键瓶颈。传统 RLHF 框架常面临推理延迟不可扩展与训练内存紧缺的双重压力,梯度累积(Gradient Accumulation)作为一种经典的内存 - 吞吐权衡手段,其效果严重受限于底层系统的内存优化能力。清华大学 KEG 实验室与 Z.ai 团队开源的 SLiMe(An SGLang-Native Post-Training Framework for RL Scaling)框架,通过一系列创新的工程化内存优化,重新定义了分布式奖励模型训练中梯度累积的策略上限与实施范式。
一、核心挑战:推理延迟与内存墙的夹击
分布式奖励模型训练通常遵循 “生成 - 训练” 交替的范式。生成阶段(Rollout)需要运行完整的自回归推理,其延迟由单个样本的解码速度决定,无法通过单纯增加 GPU 数量来降低。训练阶段则需承载策略模型、价值模型及优化器状态,显存消耗巨大。传统 RLHF 在这两个阶段均面临 “内存墙”:生成阶段受限于 KV Cache 容量,制约了并发 batch size;训练阶段则因优化器状态和梯度张量而迅速耗尽显存,迫使使用者采用较小的 batch size 或过多的梯度累积步数,进而牺牲吞吐量与更新频率,影响收敛稳定性。
SLiMe 的架构设计直面这一矛盾。其核心是将高性能推理引擎 SGLang 与训练引擎 Megatron-LM 原生集成,并通过资源管理器 Ray 支持训练与推理进程的灵活编排(协同或解耦)。这种设计为实施激进的内存优化提供了基础,使得梯度累积不再仅仅是 “省内存” 的妥协手段,而是可以主动用于扩大有效 batch size、提升训练稳定性的积极策略。
二、梯度累积的使能技术栈:从内存回收到 KV Cache 扩容
梯度累积的本质是通过多次前向 - 反向传播累加梯度,再一次性更新参数,从而用较小的瞬时 batch size 模拟大 batch 的训练效果。其效能上限取决于系统能否在有限的显存内,同时容纳足够的推理并发(KV Cache)和训练中间状态。SLiMe 通过三层优化,系统性提升了这一上限。
1. 训练内存卸载:CPU Adam 与通用 GPU 张量回收
训练部分的内存消耗大头来自优化器状态(Adam 的动量、方差)以及模型参数和梯度。SLiMe 利用 Megatron 内置的 CPU Adam,将优化器状态完全卸载至主机内存,仅保留计算所需的参数和梯度在 GPU 上。这一优化可将训练部分占用的 GPU 显存从典型的 15-18 GB 显著降低至 3-5 GB。
为进一步榨取显存,SLiMe 引入了更激进的通用卸载方案。它没有采用复杂的模型切分,而是利用 CUDA 10.2 引入的虚拟内存管理(VMM)API。通过 LD_PRELOAD 劫持训练进程中 PyTorch CUDACachingAllocator 底层的 cudaMalloc 和 cudaFree 调用,将其替换为 VMM 操作。这使得系统可以 “欺骗” 上层应用,在需要时透明地释放和重新分配 GPU 物理内存。此举实现了对 Megatron 训练进程中所有 GPU 张量的通用、无损卸载,且无需修改 Megatron 源码,维护成本极低。
2. NCCL 通信缓冲区卸载
在分布式训练中,NCCL 通信组会预分配大量的缓冲区,对于采用多种并行策略(TP、PP、EP、CP)的大规模 MoE 模型,此部分内存可超过 10 GB。VMM 方案对此效果有限。SLiMe 的解决方法是动态销毁与重建进程组。在需要卸载训练进程时,调用 destroy_process_group 释放 NCCL 资源;重新加载前再重建。框架通过猴子补丁(monkey patch)包装 dist.new_group,使其返回一个可重载的进程组对象。虽然这会为每个训练迭代的首次通信引入微小延迟,但换来了 GB 级别的显存释放,使得 mem_fraction(SGLang 服务器可用显存比例)可以提升至 0.7-0.8。
3. KV Cache 扩容与推理优化
释放出的显存主要供给 SGLang 服务器,用于扩容 KV Cache。这是提升生成阶段吞吐量的关键。KV Cache 空间决定了单个服务器能同时进行的推理请求数(并发度)。SLiMe 通过上述组合优化,确保了在训练进程共存的情况下,SGLang 仍能获得充足的显存。
此外,SLiMe 原生支持一系列推理端优化来直接提升单样本解码速度,从而间接为梯度累积提供更宽松的时间窗口:
- FP8 量化推理:降低 MoE 模型推理时的内存访问开销。
- DeepEP:优化跨节点的专家并行(MoE)All-to-All 通信延迟。
- 推测采样(Speculative Sampling):使用草案模型加速解码。 据官方数据,这些优化可将 GLM4.5 355B-A32B 这类超大 MoE 模型的单样本解码速度从不足 10 token/s 提升至 60-70 token/s。
三、对比传统 RLHF:吞吐与稳定性的工程权衡
与传统 RLHF 训练框架相比,SLiMe 在梯度累积策略的支撑环境下实现了显著差异。
在吞吐量层面,传统框架的瓶颈往往在于:为了节省显存而使用小 batch size 和多次梯度累积,导致硬件利用率低,有效样本吞吐下降。同时,推理端优化手段有限,长序列生成缓慢。SLiMe 通过内存卸载将训练 footprint 最小化,使得更大的瞬时 batch size 成为可能,从而减少达到相同有效 batch size 所需的累积步数。结合其高效的推理优化,单位时间内的有效训练样本数(即吞吐量)得以大幅提升。
在收敛稳定性层面,传统 RLHF 中,过度的梯度累积会拉长参数更新间隔,导致两个问题:一是奖励模型误差在多步 rollout 中被放大;二是策略更新的 KL 散度控制变得迟钝,容易发生缓慢的分布漂移,最终训练崩溃。SLiMe 通过其严格的端到端 CI 验证机制应对此挑战。它对每次训练都进行精确校验,例如要求首轮生成的概率与参考模型完全一致,以及 PPO 训练第一步的 KL 散度必须为零。这种数值层面的严格一致性,确保了训推对齐,减少了因系统误差导致的稳定性风险。
更重要的是,SLiMe 的内存优化允许用户在相同的硬件规模下运行更多的独立实验。例如,当总共有 512 张 GPU 时,若计算得出 256 张 GPU 已能提供足够的 KV Cache 且避免溢出,则可以选择并行启动两组独立的训练任务,而非将所有 GPU 投入一次训练。这种 “小而多” 的实验范式,加速了超参搜索和算法迭代,从系统层面提升了研发效率与稳定性。
四、可落地参数与监控清单
基于 SLiMe v0.1.0 的实践,以下为部署分布式奖励模型训练时可参考的核心参数与监控要点:
关键配置参数
-
内存与并行配置
--colocate:根据硬件情况选择训练与推理是否协同部署。--use-cpu-adam:启用 CPU Adam 优化器,这是释放训练显存的基础。--sglang-mem-fraction:设置为 0.7-0.8。这是经过 VMM/NCCL 卸载后可达的安全范围,确保充足的 KV Cache。- Megatron 并行参数:根据模型规模配置
--tensor-model-parallel-size、--pipeline-model-parallel-size等。SLiMe 支持 Megatron 所有并行策略。
-
推理优化配置
--sglang-enable-fp8:启用 FP8 量化推理,显著降低 MoE 模型延迟。--sglang-enable-deepep:启用 DeepEP 优化跨机通信。--sglang-enable-speculative:启用推测采样,需指定草案模型路径。
-
梯度累积相关
--gradient-accumulation-steps:梯度累积步数。建议通过公式估算:有效_batch_size = 单卡_batch_size * 数据并行度 * gradient_accumulation_steps。目标是将有效 batch size 设定在能保持稳定性的较大值(如 512-2048),然后反推累积步数。- 由于训练显存被极大压缩,单卡 batch size 可以适当增大,从而减少所需的累积步数。
稳定性监控清单
- KL 散度监控:实时监控策略模型与参考模型之间的 KL 散度。警惕其出现单调缓慢上升的趋势,这可能是更新间隔过长(累积步数过多)的信号。
- 奖励与价值损失:监控奖励分数和 Critic 价值损失的方差。异常波动可能提示奖励模型误差被放大或训推不一致。
- 吞吐与延迟指标:
perf/longest_sample_tokens_per_sec:跟踪最慢样本的解码速度,这是训练速度的上限。- 训练迭代时间:关注 NCCL 重建可能带来的首次通信延迟增长是否在可接受范围内。
- 显存使用:监控 SGLang 服务器的实际 KV Cache 使用率和是否发生 Cache 溢出(被踢出的请求)。
风险与限制
- 通信延迟:NCCL 动态重建会为每个训练迭代的第一次 all-reduce 通信增加开销,在通信密集型的训练中需评估影响。
- 兼容性:VMM API 与 CUDA IPC 不兼容。因此,在启用 DeepEP 或需要训练 - 推理进程间紧密内存共享的场景下,必须禁用
LD_PRELOAD卸载,回退到传统cudaMalloc。 - 算法耦合:梯度累积的最佳步数与具体 RL 算法(如 PPO、GSPO)的超参强相关,需要联合调优。
五、结论
SLiMe 框架通过系统性的内存优化工程,将分布式奖励模型训练从 “内存紧缺” 的束缚中部分解放出来。其核心价值在于重构了梯度累积的技术前提:不再是因硬件不足而被迫采用的妥协方案,而是可以基于充裕的 KV Cache 和精简的训练 footprint,主动追求的、用于提升有效 batch size 与训练稳定性的积极策略。通过 CPU Adam、通用 VMM 卸载、NCCL 动态管理等组合拳,SLiMe 实现了训练显存占用从 GB 级到 GB 级的跃迁,使得 mem_fraction 提升至 0.7 以上成为可能。
对比传统 RLHF 训练,SLiMe 在吞吐量上依托 fp8、DeepEP、推测采样等推理加速技术,在稳定性上依靠端到端的数值一致性校验,为大规模 MoE 模型的 RL 后训练提供了可验证的高性能基线。对于工程实践者而言,理解其内存优化原理是合理配置梯度累积参数、设计监控体系的关键。未来,随着 SLiMe 对更多训练后端(如原生 PyTorch)的支持以及对大规模 MoE 模型 RL 策略的持续探索,其作为 RL 基础设施的潜力将进一步释放。
资料来源
- THUDM/slime GitHub 仓库与 v0.1.0 发布说明:提供了框架架构、内存优化细节及性能数据。
- RLHF 训练瓶颈综合分析:概述了传统 RLHF 在内存、梯度累积、吞吐量与稳定性方面的核心权衡与挑战。