生成式人工智能/大语言模型

借助 NVIDIA NeMo-RL 进行强化学习:Megatron 核心支持优化训练吞吐量

NVIDIA NeMo-RL 的初始版本通过 PyTorch DTensor(也称为 FSDP2)提供训练支持。该后端不仅实现了与 Hugging Face 生态系统的原生集成,还支持快速实验,并可通过 PyTorch 原生并行化技术(包括 FSDP2、张量并行、序列并行和上下文并行)实现高效扩展。

然而,当模型规模接近数千亿参数时,DTensor 方案逐渐显现出其局限性。大型模型的激活值会带来巨大的内存开销,导致重新计算成本过高,训练速度显著下降。此外,DTensor 方案缺乏针对 NVIDIA CUDA 的优化内核以及其他关键的性能增强功能,难以实现最优的吞吐量。这些挑战凸显了对更高效解决方案的迫切需求,而 NVIDIA Megatron-Core 库正是为应对这一需求而设计的。

探索最新的 NeMo-RL v0.3 版本,该版本包含详细的文档、示例脚本和配置文件,支持在 Megatron-Core 后端高效地对大型模型进行后训练。

使用 Megatron 作为后端进行强化学习

Megatron-Core 采用 GPU 优化技术与高吞吐量性能增强功能,专为大规模语言模型的高效训练而设计。其 6D 并行化策略可优化通信与计算模式,支持多种模型架构,实现训练过程的无缝扩展。

NeMo-RL 增加了对 Megatron-Core 的支持,使开发者能够在后训练阶段充分利用其优化功能。尽管 Megatron-Core 提供了丰富的底层配置选项,但对于初次接触该库的用户而言,手动配置这些参数可能颇具挑战。NeMo-RL 通过自动处理后台复杂的调优过程,显著简化了使用流程,并为用户提供了更简洁、直观的配置接口。

开始使用 Megatron 进行训练

启用基于 Megatron 的训练非常简单,只需在 YAML 配置文件中添加 policy.megatron_cfg 部分即可。

policy:
  
  ...
  
  megatron_cfg:
    enabled: true
    activation_checkpointing: false
    tensor_model_parallel_size: 1
    pipeline_model_parallel_size: 1
    
    ... 
    
    optimizer:
      ...
    
    scheduler:
      ...
    
    distributed_data_parallel_config:
      grad_reduce_in_fp32: false
      overlap_grad_reduce: true
      overlap_param_gather: true
      average_in_collective: true
      use_custom_fsdp: false
data_parallel_sharding_strategy: "optim_grads_params"

查看完整示例

训练期间,配置文件中的所有参数都将传递给 Megatron。在将 Megatron 相关配置添加到配置文件并设置 enabled=True 后,即可开始模型训练。训练的启动方式与 DTensor 类似,具体操作可参考 README 或我们的 DeepScaleR 复现指南。

结果

基于 Megatron 的训练既支持密集模型,也支持专家混合(MoE)模型。下表列出了几种常用模型在使用 GRPO(Group Relative Policy Optimization)方法时的步骤时间细分,表中所示时间为各训练任务第 22 至 29 步的平均值。

模型 后端服务 节点 每个节点的 GPU 数量 总步数时间 (秒) 策略训练 (s) 改装 (s) 生成 (s) 获取 logprobs (s) 平均值:每个样本生成的 token 数量
Llama 3.1-8B Instruct Megatron 1 8 112 28 5 58 18 795
PyT DTensor 1 8 122 38 4 57 19 777
Llama 3.1-70B Base Megatron 8 8 147 28 14 84 18 398
PyT DTensor* 8 8 230 97 15 82 28 395
Qwen3 32B** Megatron 8 8 213 68 7 96 40 3283
Qwen3 30B-A3B** Megatron 8 8 167 50 12 78 23 3251
表1展示了在Megatron中,使用不同训练配置时模型性能与PyTorch DTensor的对比结果实验设置如下:最大序列长度为4096,Rollout批量大小为2048,全局批量大小为512,并启用了序列打包(有关序列打包的详细信息,请参见后续章节)。在Megatron-Core的实验中,Llama 3.1 8B仅使用数据并行;Llama 3.1 70B采用4路张量并行和4路流水线并行;Qwen3 32B采用4路张量并行和2路流水线并行;Qwen3 30B-A3B则采用8路专家并行和2路张量并行。 * Llama 70B的DTensor结果使用了动态批处理而非序列打包,因为序列打包存在已知的内存不足问题** Qwen3 32B和30B-A3B的DTensor实验由于存在已知的断言错误而未能运行成功,详情请参见相关问题说明。
Bar charts comparing step time breakdown across training, generation, refit, and logprob, for Llama 3.1 8B instruct model with 4k sequence length using Megatron-core and PyTorch DTensor backends.
图1:Llama 3.1 8B指令模型在使用Megatron-core与PyTorch DTensor后端时的总步骤时间对比
Bar charts comparing step time breakdown across training, generation, refit, and logprob for Llama 3.1 70B base model with 4k sequence length using Megatron-core and PyTorch DTensor backends.
图2:Llama 3.1 70B Base模型在使用Megatron-core与PyTorch DTensor后端时的总步骤时间对比

通过采用 Megatron-Core 提供的性能优化,我们在保持与 DTensor 相同收敛特性的同时,实现了更优的训练性能,如图所示。

 Line chart comparing training reward curves for Llama 3.1 8B using Megatron-Core and PyTorch DTensor backends, showing coinciding curves that indicate accuracy match.
图3:Llama 8B在GRPO框架下使用Megatron-Core与PyTorch DTensor的奖励曲线对比
Line chart comparing training reward curves for Llama 3.1-70B using Megatron-Core and PyTorch DTensor backends, showing coinciding curves that indicate accuracy match.
图4. 70B GRPO Megatron-Core 与 DTensor 的奖励曲线对比

以下命令用于生成相应的奖励曲线:

## 8B -- requires a single node

## dtensor
uv run ./examples/run_grpo_math.py --config examples/configs/grpo_math_8B.yaml \
    loss_fn.use_importance_sampling_correction=True

## megatron 
uv run ./examples/run_grpo_math.py --config examples/configs/grpo_math_8B_megatron.yaml \
    policy.sequence_packing.enabled=True loss_fn.use_importance_sampling_correction=True

## 70B -- requires 8 nodes

## dtensor
uv run ./examples/run_grpo_math.py --config examples/configs/grpo_math_8B.yaml \
    policy.model_name=meta-llama/Llama-3.1-70B policy.tokenizer.name=meta-llama/Llama-3.1-70B-Instruct \
    policy.generation.vllm_cfg.tensor_parallel_size=4 policy.max_total_sequence_length=4096 \
    cluster.num_nodes=8 policy.dtensor_cfg.enabled=True policy.dtensor_cfg.tensor_parallel_size=8 \
    policy.dtensor_cfg.sequence_parallel=True policy.dtensor_cfg.activation_checkpointing=False \
    loss_fn.use_importance_sampling_correction=True

## megatron
uv run ./examples/run_grpo_math.py --config examples/configs/grpo_math_70B_megatron.yaml \
    policy.model_name=meta-llama/Llama-3.1-70B policy.tokenizer.name=meta-llama/Llama-3.3-70B-Instruct \
    policy.sequence_packing.enabled=True loss_fn.use_importance_sampling_correction=True

这些运行采用了多项性能和收敛性优化功能,以确保实现最佳吞吐量和快速收敛。

  1. 序列打包: 多个序列被打包到 max_total_sequence_length 中,这一操作称为序列打包。序列打包能够减少填充 token 的数量,尤其在序列长度差异较大时效果显著。对于 Llama 70B 模型,启用序列打包可将整体训练步骤时间缩短约一半,且不会影响模型收敛。该功能已由 Megatron-Core 和 DTensor 后端支持。有关 NeMo-RL 中序列打包的更多详细信息,请参阅我们的文档
  2. 重要性采样:NeMo-RL 在训练和推理阶段采用不同的框架以实现最佳性能,但这可能导致两者在 token 概率上存在细微差异。为缓解这一问题,可使用重要性采样方法,该方法根据每个样本在推理与训练概率之间的关系,为其分配相应的权重。启用重要性采样有助于降低不同运行结果之间的方差,并提升 Megatron-Core 与 DTensor 策略之间的一致性。有关 NeMo-RL 中重要性采样的更多详细信息,请参阅我们的文档

长序列支持

我们还可以结合使用 Megatron-Core 和 DTensor 实现上下文并行,以支持长上下文训练。例如,以下示例展示了 Llama 3.3 70B 在使用 Megatron 后端、序列长度为 16k 时的当前性能表现。我们同样支持更长的序列长度,并正在持续优化长上下文训练的性能。

模型 最大序列长度 节点 (Node) 每个节点的 GPU 数量 上下文并行大小 总步数时间 (秒) 策略训练 (s) 改装 (s) 世代 (s) 获取 logprobs (s) 平均值:每个样本生成的 token 数量
Llama 3.3-70B Instruct 16,384  16 445 64  17 287 75 749

表2:Llama 3.3-70B Instruct 在使用 Megatron 后端、16K 长上下文窗口下的性能表现

其他值得注意的功能

除了 Megatron 训练后端外,NeMo-RL V0.3 还引入了多项令人振奋的新功能,可有效支持各类模型的后训练。

  • 异步部署:用户现在可通过设置 policy.generation.async_engine=True 启用 vLLM 异步引擎,使多轮强化学习的速度提升 2 至 3 倍。
  • 非同域生成(DTensor 后端):现在用户可以选择将训练和生成的后端部署在不同的 GPU 集群上。当训练与生成任务的并行化策略或世界大小不兼容,或在共置模式下因内存卸载不足而无法满足资源需求时,该功能尤为有用。更多详细信息请参见 0.3.0 版本说明

即将推出

请密切关注以下即将推出的功能:

  • 支持使用 Megatron 后端,可更高效地运行参数规模达数十亿的大型 MOE 模型,包括 DeepSeek-V3 和 Qwen3-235B-A22B。
  • 高度优化的改装。
  • FP8 生成支持。
  • 支持 Megatron 和 DTensor VLM。
  • 使用 Megatron-Core 后端进行非共置生成。

结论

本文展示了在使用 Megatron-Core 后端的 NeMo-RL v0.3 时,相较于 PyTorch DTensor,如何显著提升强化学习的训练吞吐量,尤其在 Llama 70B 等大规模模型上表现更为突出。通过 GPU 优化内核、4D 并行、序列打包和重要性采样等关键技术,NeMo-RL 有效保障了大模型训练的效率与收敛性。此外,我们还验证了其对长上下文训练的良好支持,即使在 16k 序列长度下仍能保持出色的性能表现。

探索 NVIDIA NeMo RL 的文档、示例配置和脚本,了解如何利用 Megatron-Core 优化大型模型的后训练。

 

标签