Liwei Ma, Yan Bai, DevTech China | NVIDIA AI Open Day, Nov. 7th, 2025
角色: 强化学习 (RL) 是语言模型主要的后训练 (post-training) 实践。
算法: 反馈设计是设计强化学习系统的关键。
工程: GPU 效率是一个持续的目标。
模型与应用:
调度两个引擎: 在同一组 GPU 上进行 rollout 和训练。
两个工作流阶段:
verl 的用户界面位于 verl/trainer/config 路径下,其主要特点如下:
算法支持最新的进展:
Actor_rollout_ref and critic
Qwen 2.5 VL 模型包含3种类型的层
3002 个几何问题
下图展示了实施强化学习的流程及其中的关键问题:
nsysProfiler.steps: [1,2, 5], null, []Profiler.continuous_steps=True, FalseProfiler.nsys.discrete=False, TrueActor.profiler_enable: TrueActor.all_ranks: True; ranks: [1,2]通过 Nsight System 的时间线视图,可以清晰地分析各个阶段的耗时,例如 generation(生成)、reward(奖励计算)、update_actor(Actor 更新),以及各个步骤(Step 1, Step 2 等)和开销(overhead)。
从资源和计算角度看:
下表展示了在 Hopper 80G 上的典型时序:
| 7b (n1) | 32b (n4) | 72b (n8) | |
|---|---|---|---|
| Step | 160 | 165 | 170 |
| rollout | 60 | 55 | 70 |
| training | 50 | 60 | 60 |
下图展示了基于 Qwen 模型的实验设置和结果。
实验配置:
| 配置项 | 值 |
|---|---|
| Model | Qwen 2.5/3 VL |
| Model Size | 7b, 32b, 72b |
| GPUs | 8, 32, 64 |
| algorithm | GRPO, DAPO |
| Training engine | FSDP, Mcore |
| Rollout engine | vLLM |
| Rollout parallelism | Valid space |
| Training parallelism | Valid space |
| Offload parameters | Yes/No |
| Dynamic batching (training) | Yes/No |
| Fixed vision | Yes/No |
性能曲线:
右图展示了前10次运行的 critic/score/mean 随训练步骤的变化。图中比较了不同模型大小(如 Qwen 3 30b, Qwen 2.5 72b, Qwen 2.5 32b, Qwen 2.5 7b)和算法(DAPO)的性能。
算法特性对比:
| PPO | GRPO | DAPO | |
|---|---|---|---|
| Models | 4 | 2 | 1 |
| Rollout/prompt | low | medium | high |
| Computation | medium | medium | high |
| Static Memory | high | medium | low |
配置差异:
| Config | GRPO | DAPO |
|---|---|---|
| entry | verl/ppo | recipe/dapo |
| train_batch_size | 512 | 512 |
| gen_batch_size | 512 | 512*3 |
| rollout.n | 5 | 16 |
| adv_estimator | grpo | grpo |
| actor.use_kl_loss | True | False |
| kl_ctrl.kl_coef | 0.001 | 0 |
| filter_groups | Disable | Enable |
| Nnodes | 1 | 1,4 |
从右侧的图中可以看出,DAPO n1 在 Reward 上显著优于 GRPO n1,并且在 Timing step 和 Timing generation 方面也表现出更优的性能。
静态内存消耗 = 固定的 + 可共享的 / 并行
动态内存消耗 = 变量 * 线性参数
ppo_micro_batch_size (训练, 静态批大小)ppo_max_token_len_per_gpu (训练, 动态批大小)max_num_batched_tokens (rollout)重计算 以时间换取内存。
rollout_gpu_memory_utilizationTP 与 kvcache 关系表:
| TP | 2 | 4 | 8 | 16 |
|---|---|---|---|---|
| kvcache | 0.5 | 0.5 | 0.5 | |
| OOM | valid | valid | invalid |
右侧的图表展示了不同 TP 设置下(TP=8 vs TP=4)的 timing_s/gen, timing_s/update_actor, 和 timing_s/step 的性能曲线。
技巧: 如果内存充足,可以关闭 FSDP 的参数和优化器卸载(offload)。
fsdp_config.param_offloadfsdp_config.optimizer_offload动态批大小 在本案例中会降低性能。
下图展示了 timing_s/gen 和 timing_s/step 在不同配置下的性能曲线,比较了开启和关闭动态批大小,以及关闭卸载(offload)后的性能表现。结果显示,关闭 offload 可以获得最佳性能。
本节探讨了在 Qwen3 VL 30B 模型中,不同张量并行(TP)和专家并行(EP)设置对性能的影响(TP=1, 2, 4, EP=4, 8)。
下图展示了不同并行策略下的 timing_s/gen, timing_s/step 和 timing_s/update_actor 指标。右侧的 timing_s/update_actor 图表清晰地表明,TP1+EP8+recompute 配置的执行时间最短,性能最优。
本节分析了在微调过程中,重计算(Recompute)策略在性能和内存占用之间的权衡。
TP2(不使用重计算)和 TP1+recompute(使用重计算)获得了相似的性能。下图左侧的 timing_s/update_actor 图表显示 TP2 和 TP1+recompute 的性能(执行时间)相近。右侧的 perf/max_memory_allocated_gb 图表则显示,TP1+recompute 的峰值内存分配显著低于 TP2,这验证了重计算以计算换取内存的有效性。
以下是进行性能优化的通用指南:
将问题规模适配到一小组 GPU 中
建立经验模型
进一步覆盖引擎的详细参数
下图展示了典型的长尾序列长度分布情况。
下图的时间线显示,不同 rank 的计算时间不同,部分 rank 会提前完成并进入等待状态(例如 Rank 2),造成 GPU 空闲。
下图展示了两个设备在流水线并行执行时,由于各 micro-batch 的处理时间不同而产生的空闲气泡。
为了解决工作负载不均衡问题,提出了以下解决方案:
Inter DP (数据并行组间):
Intra DP (数据并行组内):
下图详细展示了“排序动态批处理”(Sorted Dynamic Batching)的机制,通过对 micro-batch 重新排序来优化流水线执行效率。
本节展示了负载均衡解决方案的性能提升效果。
_Balance 版本都获得了显著更高的模型 FLOPs 利用率(MFU),证明了该方法的有效性。agent-loop 提供了一套标准 API,用于实现多轮对话和带工具的智能体式推演(rollout)。用途包括:
核心流程:prompt 输入到 Agent Loop,Agent Loop 与 LLM 交互生成结果,最终产生 output。
A. ReTool:代码沙箱
B. DeepEyes:image_zoom_in_tool
image_zoom_in_tool 工具放大图像的关键区域,进行再次检查后,得出“外套是红色的”这一更准确的结论。下图展示了异步训练的架构,包括 ActorRolloutRef、Rollouter、MessageQueue 和 Trainer,实现了数据生成与模型训练的并行化。
此部分由美团搜索团队贡献。
下图展示了四种不同的异步训练流水线模式:
这些模式在 Rollouter 和 Trainer 的同步方式、数据新鲜度等方面有所不同。
此部分由美团搜索团队贡献。
Trainer(训练器)在开始处理第一批mini-batch之前,需要等待Rollouter(部署器)完成第一批次(batch)的部署(rollout)。Rollouter在开始新一批次的处理前,需要等待Trainer完成上一批次的最后一个mini-batch的训练。Trainer的处理不再严格等待批次的开始或结束,而是等待活动任务完成(wait active task finish)。MessageQueue(消息队列)中可能会包含一些过时的数据(图中红色部分),这些数据由较早的模型版本生成,但仍被用于训练。Rollouter可以生成部分数据(图中橙色部分)并将其送入MessageQueue,而无需等待整个批次完成。Trainer可以更早地开始处理数据,进一步减少了空闲时间,最大化了组件的并行度。colocate sync:同步训练模式。fully_async_policy:全异步训练策略。fully_async_policy在所有资源配置下都显著缩短了训练总时间,实现了高达2.67倍的加速。例如,在128个GPU上,完成400步训练,同步模式需要1天16小时48分钟,而异步模式仅需17小时22分钟(加速比2.35倍)。acc/mean@1),尽管最终的last值略有下降,但最大值max仍然具有竞争力。采用Megatron作为训练后端,以获得最佳的训练MFU(模型浮点运算利用率)。
使用工作负载感知的动态批处理(dynamic batching)来减轻长尾数据分布的不平衡效应。