# NVIDIA NeMo AutoModel：一行代码加速Transformer MoE模型微调

- 来源：Hugging Face：Blog（RSS）
- 发布时间：2026-06-25 00:00
- AIHOT 分数：66
- AIHOT 标记：精选
- AIHOT 链接：https://aihot.virxact.com/items/cmqs9yjcy0187slfupnhipvhf
- 原文链接：https://huggingface.co/blog/nvidia/accelerating-fine-tuning-nvidia-nemo-automodel

## 精选理由

英伟达的 NeMo AutoModel 把 MoE 模型微调速度提高了三倍多，内存省了近三分之一，代码只需改一行 import，做训练的可以立刻升级。

## AI 摘要

NVIDIA NeMo AutoModel 是基于 Transformers v5 的开源库，添加 Expert Parallelism、DeepEP 融合 all-to-all 调度和 TransformerEngine 内核。在 MoE 模型微调中，相比原生 v5，训练吞吐量提升 3.4–3.7 倍，GPU 内存减少 29–32%，仅需改动一行 import。在 16 节点 128 张 H100 上全微调 Nemotron 3 Ultra 550B A55B 时，v5 因内存不足无法运行，而 AutoModel 凭借 EP=64 专家并行使训练可行。单节点 30B MoE 模型（如 Qwen3-30B-A3B）同样获得可量化的性能优势。

## 正文

v5 版本奠定了混合专家模型（MoE）的基础：专家后端、动态权重加载以及分布式执行，使 MoE 具备可扩展性且易于构建。

NVIDIA NeMo AutoModel 是一个开源库，属于 NVIDIA NeMo 框架的一部分，用于大规模构建自定义生成式 AI 模型。NeMo AutoModel 在 v5 之上进行了简洁的构建，增加了专家并行（Expert Parallelism）、DeepEP 融合的全对全（all-to-all）调度以及 TransformerEngine 内核，并利用 v5 的动态权重加载将这些优化应用于广泛且不断增长的模型族。其成果是，在使用相同的 `from_pretrained()` API 微调 MoE 模型时，训练吞吐量提升了 3.4-3.7 倍，GPU 内存减少了 29-32%：只需修改一行导入代码，无需其他任何代码更改。

本篇博客详细介绍了这种组合的工作原理，以及用户如何在不更改 API 的情况下更快地微调 MoE 模型。

背景

MoE 模型的兴起给高效训练带来了新的挑战：跨数百个专家路由 token、将专家矩阵乘法融合到单个内核中、跨 GPU 分片权重，以及使通信与计算重叠，这些都需要通用库开箱即用功能之外的基础设施支持。

Transformers v5（“v5”）引入了对 MoE 的一流支持，例如专家后端、动态权重加载以及用于分布式执行的张量并行方案。此外，v5 通过将 PyTorch 的 DeviceMesh 直接集成到 `from_pretrained()` 中，使分布式训练成为了一等公民。

NeMo AutoModel 通过继承 AutoModelForCausalLM，并增加专家并行（EP）、DeepEP 融合的全对全调度以及 TransformerEngine 内核，在 v5 之上进行构建。DeepEP 是 v5 尚未具备的部分：它使通信与专家计算重叠。并且，由于 NeMo AutoModel 借助 v5 的可逆权重转换来加载每个模型，它可以将工程精力集中在这些可复用的核心操作上，而不是每个模型的检查点适配工作上，同时 `save_pretrained()` 仍然输出标准的 Hugging Face 检查点，vLLM 和 SGLang 等工具可以加载这些检查点。

下一节将介绍两者如何协同工作，以及我们测量到的性能提升——从跨 16 个节点对 NVIDIA Nemotron 3 Ultra 550B A55B 进行全参数微调，到在单节点上运行 Qwen3-30B-A3B 和 Nemotron 3 Nano 30B A3B 等模型。

NeMo AutoModel：同一套 API，更高性能

NeMo AutoModel 的目标之一是与 HuggingFace Transformers 实现 API 兼容，从而支持开源社区。NeMoAutoModelForCausalLM 继承自 AutoModelForCausalLM，因此任何适用于 HF 模型的代码也同样适用于 AutoModel。

以下是两种方式加载模型的对比。唯一的变化是导入语句：

这一行导入语句完成了大量工作。对于 Qwen3、NVIDIA Nemotron、GPT-OSS 和 DeepSeek V3 等流行的 MoE 架构，NeMo AutoModel 提供了手工调优的实现，包含 TransformerEngine 注意力机制、融合线性层和自定义专家内核。对于其他架构，它会回退到标准 HF 实现，同时仍会应用 Liger 内核补丁等优化。无论走哪条路径，生成的模型都具备可扩展性：传入 device_mesh 即可实现多 GPU 训练，无需额外重写代码。

NeMo AutoModel 的真正优势在于将 MoE 模型扩展到多 GPU 训练。要在 8 个 GPU 上使用专家并行训练 Nemotron 3 Nano 30B A3B，只需添加分布式网格配置：

import os import torch import torch.distributed as dist from nemo_automodel import NeMoAutoModelForCausalLM from nemo_automodel.recipes._dist_utils import create_distributed_setup_from_config

dist.init_process_group(backend="nccl") torch.manual_seed(0) torch.cuda.set_device(int(os.environ.get("LOCAL_RANK", 0)))

dist_setup = create_distributed_setup_from_config( { "strategy": "fsdp2", "ep_size": 8, }, )

model = NeMoAutoModelForCausalLM.from_pretrained( "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16", dtype=torch.bfloat16, distributed_setup=dist_setup, )

dist.destroy_process_group()

这通过一次 from_pretrained() 调用，即可实现 FSDP2、专家并行、TransformerEngine 内核和 DeepEP 调度带来的速度提升、可扩展性和内存优化。

性能对比

我们在两种场景下评估了 NeMo AutoModel：跨 16 个节点对前沿规模的 550B 模型进行全参数微调，以及在单个节点上训练两个 30B MoE 模型。550B 的结果说明了专家并行在大规模场景下的必要性；30B 的结果则量化了相比 Transformers v5 的每 GPU 速度提升。

Nemotron 3 Ultra 550B A55B（全参数微调，多节点）

Nemotron 3 Ultra 550B A55B 是一个 550B 参数的混合模型，集成了 Mamba2、LatentMoE 和多 token 预测（MTP）。我们对其进行了全参数微调基准测试：每个参数都参与更新，Adam 优化器状态被完整实例化，在此规模下需要跨越 16 个 H100 节点（128 个 GPU）。

方法：

参数 值

硬件 16 个 H100 80GB（128 个 GPU）

专家并行 EP=64

本地批次大小 2

序列长度 4,096

特性 MTP、激活检查点、融合线性交叉熵

内核 DeepEP 调度 + torch_mm 专家 + TransformerEngine

指标 NeMo AutoModel (EP=64)

每 GPU 每秒 token 数（平均） 815

每 GPU 每秒 TFLOP ~293

峰值内存 58.2 GiB

为什么没有 Transformers v5 列。Transformers v5 在此规模下会耗尽内存，因此这里没有 v5 的数据可报告。AutoModel 的专家并行将专家分片到多个 GPU 上，从而将内存占用控制在预算之内，这才使得完整微调得以运行。下面 30B 的对比也显示了同样的优势，即 v5 能够适配。

单节点 30B MoE 基准测试

我们在一个 8x H100 80GB GPU 的单节点上对三种方法进行了基准测试：HF Transformers v4（hub 代码）、HF Transformers v5（采用最佳可用优化）以及 NeMo AutoModel（EP=8 + 自定义内核）。

方法：

参数 值

硬件 8x H100 80GB（单节点）

序列长度 4,096

本地批次大小 1

关于路由门的说明。下面 NeMo AutoModel 的数据使用了均衡路由门，这会强制 token 在专家之间均匀分布。这模拟了 MoE 训练所趋向的理想工作点：一个训练良好的模型，其负载均衡损失会使专家利用率接近均匀分布，因此均衡路由反映了真实工作负载收敛到的稳定状态（并消除了随机虚拟 token 可能引入的掉队者噪声）。v4/v5 在相同的虚拟 token 上运行其原生路由器。因此，均衡门衡量的是 NeMo AutoModel 在其目标 MoE 工作点上的表现，而 v4/v5 列则反映了它们开箱即用的行为。

Qwen3-30B-A3B

指标 v4 v5 (FA2 + grouped_mm) NeMo AutoModel (EP=8) v5 → NeMo AutoModel

每 GPU 每秒 token 数（平均） 死锁 3,075 11,340 3.69 倍

峰值内存 — 68.2 GiB 48.1 GiB -29%

平均前向+损失 — 582 毫秒 194 毫秒 3.00 倍

平均反向 — 758 毫秒 178 毫秒 4.26 倍

v4 死锁的原因：Transformers v4 将 Qwen3 MoE 专家存储为包含 128 个独立 MLP 模块的 ModuleList，每个模块分别进行 FSDP 封装。前向传播使用一个数据依赖的循环，仅迭代那些接收到 token 的专家。由于不同 rank 上的数据不同，不同 rank 会跳过不同的专家，导致 FSDP AllGather/ReduceScatter 集合通信不匹配，从而无限期挂起。Transformers v5 通过将专家存储为融合的 3D 参数张量（没有每个专家的模块，也没有每个专家的 FSDP 集合通信）来修复此问题。

Nemotron 3 Nano 30B A3B

指标 v4（Hub 代码） v5（FA2 + grouped_mm + Mamba CUDA） NeMo AutoModel（EP=8） v5 → NeMo AutoModel

TPS/GPU（平均） 1,807 4,583 15,421 3.36 倍

峰值内存 61.9 GiB 62.1 GiB 42.5 GiB -32%

平均前向+损失 1,024 毫秒 283 毫秒 109 毫秒 2.60 倍

平均反向 1,246 毫秒 611 毫秒 157 毫秒 3.89 倍

v4 配置：trust_remote_code=True（NVIDIA 的 Hub 建模代码）。Hub 代码中的专家循环是 FSDP 安全的（无论 token 分配如何，都会迭代所有专家），因此它不会像 Qwen3 v4 那样死锁。

加速的来源

NeMo AutoModel 相比 Transformers v5 的 3.4-3.7 倍加速来自三个方面：

专家并行降低了内存压力。EP=8 将专家权重分布到多个 GPU 上，将每个 GPU 的 MoE 内存占用降低 8 倍。对于 Qwen3，这使峰值内存从 68.2 GiB 降至 48.1 GiB（-29%）。对于 Nemotron Nano，则从 62.1 GiB 降至 42.5 GiB（-32%），为更大的批次大小或更长的序列腾出了空间。

DeepEP 将通信与计算融合。DeepEP 没有为专家路由使用单独的 AllGather/ReduceScatter 集合通信，而是将 token 分发与合并融合到优化的 GPU 内核中，使通信与专家计算重叠进行。

TransformerEngine 内核加速了核心运算。TE 的融合注意力、线性层和 RMSNorm 实现，在所有层类型（不仅仅是 MoE 层）上，都比其对应的 PyTorch/Flash Attention 实现提供了持续的加速。

HuggingFace AutoModel 利用的 Transformers v5 特性

专家后端

Transformers v5 中最具影响力的特性之一是 experts_implementation 参数，它包含三个专家后端：

后端 描述 最适合

eager 对选中的专家进行 for 循环 调试、兼容性与正确性。同样适用于 v4 版本。

batched_mm 复制专家参数，通过 torch.bmm 执行单次批量 GEMM 运算 小规模输入，使用 torch.compile 时速度快。为 v5 版本新增

grouped_mm 按专家对 token 排序，通过 torch.nn.functional.grouped_mm 执行单次分组 GEMM 运算 训练（内存高效，无参数复制）。为 v5 版本新增

grouped_mm 后端是关键的训练优化手段：它不再逐个遍历专家，而是将 token 按其分配到的专家进行排序，然后执行单次融合的分组矩阵乘法。

NeMo AutoModel 则更进一步。对于具有自定义实现的模型，它使用 DeepEP 融合的全对全分发，结合分组 GEMM 内核和 TransformerEngine 线性层。其演进过程如下：

v4 (eager for-loop) → v5 (grouped_mm) → NeMo AutoModel (DeepEP + GMM + TE)

在 NeMo AutoModel 中，专家后端通过 BackendConfig 进行配置：

from nemo_automodel.components.models.common.utils import BackendConfig

backend = BackendConfig( attn="te", linear="te", experts="torch_mm", dispatcher="deepep", )

专家并行与 DeepEP

Transformers v5 还提供了一条专家并行路径。它将专家权重分片到多个 GPU 上。GroupedGemmParallel 风格仅加载每个设备的本地专家，而 RouterParallel 则路由 token 并通过 all_reduce 合并结果。它巧妙地构建在 v5 现有的张量并行机制之上。启用该功能后，模型的 tp_plan 会返回其专家计划，因此专家并行与数据并行共享设备预算（ep × dp = world_size）。对于此处单节点 30B 的基准测试，我们发现纯数据并行的 v5（dp=8, ep=1）是速度最快的 v5 配置，因此这是我们报告的 v5 设置。

NeMo AutoModel 采用了一种互补的方法，专门针对多 GPU MoE 训练进行了优化。它将 EP 作为独立的并行维度，即一个专用的 moe_mesh，与数据并行网格并列（而非从中划分出来），并使用 PyTorch 的 DTensor 配合 Shard(0)。由于专家网格与数据并行是正交的，两者可以在同一设备上组合使用。在 8 个 GPU 上，NeMo AutoModel 同时运行 ep=8 和 dp=8，因此每个 GPU 都在自己的数据分片上训练，同时仅持有 1/8 的专家。专家权重在物理上沿专家维度分片到各个 GPU 上。

from torch.distributed.tensor import Shard, distribute_tensor

distribute_tensor(param, device_mesh, [Shard(0)])

在 8 块 GPU 上设置 ep_size=8 时，每块 GPU 仅持有 1/8 的专家参数。对于像 Nemotron-3-Nano-30B-A3B 这样专家权重约 55 GiB 的模型，专家并行将每块 GPU 的专家占用从约 55 GiB 降至约 6.8 GiB，从而使得仅靠 FSDP 方式会内存溢出的训练成为可能。

在专家并行基础上，NeMo AutoModel 集成了 DeepEP，它将 token 路由融合到优化的 GPU 内核中，并在结合分组 GEMM 进行分组专家计算时带来显著的加速效果。在我们的大规模 MoE 基准测试中，与 all-gather 加循环专家基线相比，DeepEP 加分组 GEMM 在完整 DeepSeek V3 671B 模型上将每次迭代的成本降低了 47%。

动态权重加载

Transformers v5 还通过 WeightConverter 和 WeightRenaming 引入了动态权重加载系统。这使得 MoE 检查点能够以融合的 3D 张量形式存储，从而实现更高效的执行。WeightConverter 应用可组合的操作，在 from_pretrained() 过程中即时转换检查点张量。

NeMo AutoModel 是此 v5 API 的直接使用者。超过 20 种模型类型通过 MODELS_REQUIRING_TENSOR_MERGING 机制使用此功能，包括 Mixtral、Qwen2 MoE、Qwen3 MoE、DeepSeek V2/V3、OLMoE 等。这些转换是完全可逆的：save_pretrained() 会生成标准 HF 格式的检查点，任何下游工具都可以加载。

快速上手

要试用 NeMo AutoModel，请访问我们的官方文档页面。

更多详情，请参阅：

NeMo AutoModel HuggingFace API 兼容性指南

NeMo AutoModel 模型覆盖范围

NeMo AutoModel 性能总结

HuggingFace 上的 NeMo AutoModel

结论

NVIDIA NeMo AutoModel 是 HuggingFace 用户扩展模型训练规模的必然下一步。通过直接构建在 Transformers v5 之上，AutoModel 提供了一条零摩擦的升级路径：只需更改一行导入代码，即可获得一个速度提升超过三倍的模型实例。

在 Qwen3-30B-A3B 和 Nemotron 3 Nano 30B-A3B 上，与最佳 Transformers v5 配置相比，该方案实现了 3.4 至 3.7 倍的训练吞吐量提升，同时 GPU 内存占用减少 29% 至 32%。由于真正的专家并行机制将专家模型分布在多个 GPU 上，同样的路径可扩展至对 Nemotron 3 Ultra 这类 550B 模型进行全量微调，仅需 16 个节点——这正是专家并行对于将模型装入内存至关重要的场景。由于 NeMo AutoModel 检查点采用标准 HF 格式的 safetensors，你可以将其部署在 vLLM 和 SGLang 等推理框架上。

代码、配置文件和基准测试脚本均已发布在 NeMo AutoModel 仓库中。

致谢

本工作的核心贡献者（按姓氏字母顺序排列）：Adil Asif、Hemil Desai、Alexandros Koumparoulis 和 Huiying Li。
