产品NVIDIA Technical Blog·原文 2026年9月24日本站收录 2026年9月25日

NVIDIA发布BioNeMo MoE配方:八卡B200训练Mixtral-8x7B吞吐提升至Hugging Face基线 2.21 倍

NVIDIA技术博客介绍BioNeMo MoE配方与Transformer Engine的配合方式:用GroupedLinear合并专家计算、MXFP8降低显存、GroupedMLP融合量化与SwiGLU,在八块B200上的Mixtral-8x7B训练基准中达到Hugging Face基线最高 2.21 倍吞吐。

AI解读:NVIDIA这篇技术博客的目标读者不是普通用户,而是正在训练生物基础模型的工程团队。它把MoE(混合专家)训练里三个常见瓶颈拆开讲:专家计算碎片化、长序列带来的激活显存压力、以及低精度训练中的量化开销,并给出基于Transformer Engine和BioNeMo配方的具体写法。

最值得看的数字是吞吐:在八块NVIDIA B200 Tensor Core GPU上跑Mixtral-8x7B训练基准,该配方达到Hugging Face基线最高 2.21 倍。不过这是NVIDIA自己发布的基准,没有附第三方复现,适用条件是Blackwell GPU、MXFP8和专家并行配置。

对相关团队的直接影响是可选方案的边界变清楚了:想要融合的MXFP8 GroupedMLP内核必须用Blackwell GPU;专家并行至少需要两块GPU。如果硬件不满足,部分优化就用不上,只能退回常规路径或BF16。

文章也暗示了MoE的取舍:专家矩阵本身仍然保留,代码只是把它们的计算提交方式从逐个Python循环改成一次分组操作。这减少的是启动和调度开销,不是专家数量或参数量,所以显存和通信压力依然需要靠并行策略解决。

目前公开的只是实现说明和基准数字,没有第三方在真实基因组数据上的效果对比,也没有说明精度损失具体多少。对普通读者来说不需要立即行动;真正相关的是做长序列生物模型训练、手里有Blackwell集群的团队,他们可以按L0_sanity、L1_8x7B_ep两级配置去验证自己的负载。

NVIDIA于 2025 年 2 月 14 日在开发者博客发布Efficient MoE Training for Biological Foundation Models,介绍如何用NVIDIA Transformer Engine(TE)与BioNeMo MoE recipe训练生物基础模型,并给出以Mixtral-8x7B为例的训练基准:在八块NVIDIA B200 Tensor Core GPU上,该recipe的吞吐最高达到Hugging Face基线的 2.21 倍。

博客作者为Michelle Horton,文章定位为教程(tutorial),附带可运行的配置与命令。

MoE训练的瓶颈与TE的对应能力

博客把MoE训练中的问题归为三类。第一,专家计算碎片化:朴素实现会为每个专家单独触发kernel。文章以Hugging Face基线为例,指出其实现用Python循环遍历所有专家(for expert_idx, expert_layer in enumerate(self.experts)),每个专家触发独立的kernel launch。

第二,模型体积与激活显存:MoE提高总参数量,基因组工作负载常用长序列,给训练时的激活显存带来压力。BF16用 16 位表示每个权重和激活,BioNeMo recipe借助TE支持FP8与MXFP8,把权重和激信用 8 位表示。FP8与MXFP8的主要区别在缩放粒度:MXFP8为每 32 个连续值分配一个缩放因子,以帮助保留数值范围和精度。在NVIDIA Blackwell GPU上,MXFP8有硬件加速,MXFP8 GEMM可使用专门的Tensor Core指令。

第三,低精度训练中的量化开销:虽然大部分训练计算用 8 位精度,模型仍以 16 位保留主权重,训练框架因此需要额外的量化和反量化步骤在格式间转换。量化在低精度GEMM之前把BF16权重和激活转成MXFP8,反量化把结果转回更高精度格式;朴素路径把这些步骤当作独立操作执行。

  • TE用grouped expert computation、kernel fusion和低精度训练原语应对上述瓶颈。
  • 文章称这些原语可在扩大模型容量的同时改善GPU效率,但收益高度依赖实现。

GroupedLinear:把逐专家循环改成一次分组GEMM

博客给出的核心改进是用TE的GroupedLinear替代逐专家调用。GroupedLinear通过收集专家权重和输入token,在一次调用中应用多个线性变换。由于每个专家收到的token数可以不同,GroupedLinear接受按专家区分的token计数(split_sizes)。它把本地专家提交到TE的grouped GEMM路径,而不是为每个专家启动一次PyTorch Linear操作,从而减少启动和调度开销。

代码示例中,每个专家保留自己的权重张量(weight0、weight1等),调用时额外传入按专家的token计数:experts_gate_up = GroupedLinear(num_groups=num_local_experts, in_features=hidden_size, out_features=2 * intermediate_size, bias=False, dtype=torch.bfloat16, device="cuda");gate_up_output = experts_gate_up(tokens, split_sizes)。

博客承认Hugging Face Transformers也提供了grouped_mm,但表示TE能把GroupedLinear与MXFP8量化、激活、路由权重缩放和中间数据移动融合进GroupedMLP kernel。

  • 朴素实现:每个专家一次kernel launch,代码里是Python循环。
  • TE实现:所有专家GEMM合并为一次分组操作,保留各自权重矩阵。
  • 每个专家的token数不同,因此接口需要split_sizes。

MXFP8与融合MLP:减少显存并跳过独立量化步骤

BioNeMo recipe使用TE支持FP8和MXFP8训练,以减少显存占用。文章说明,训练中大部分计算使用 8 位精度,但模型保留 16 位主权重,量化与反量化在格式间转换。MXFP8的缩放粒度为每 32 个连续值一个缩放因子。

为把量化路径也合并,recipe使用TE Sequential API串联gate_up、ScaledSwiGLU和down,并把反量化折进融合路径。ScaledSwiGLU把路由概率(scales)与专家前馈网络计算结合在一起。示例代码:experts_ffn = Sequential(GroupedLinear(gate_up), ScaledSwiGLU(), GroupedLinear(down))。

当TE Sequential API扫描到匹配模式时,会把GroupedLinear → ScaledSwiGLU → GroupedLinear序列替换为融合操作对象:前向为ForwardGroupedMLP_CuTeGEMMSwiGLU_MXFP8,反向有对应的融合操作。文章称这可减少框架开销、把SwiGLU和概率缩放并入分组MLP路径,并避免物化部分中间结果。

  • MXFP8每 32 个连续值一个缩放因子,区别于FP8的缩放粒度。
  • Blackwell GPU对MXFP8有硬件加速,MXFP8 GEMM使用专门Tensor Core指令。
  • 融合路径把量化、SwiGLU和路由权重缩放合并,避免独立的反量化操作。

运行要求、基准与验证步骤

博客列出了前置条件:熟悉Python、PyTorch和分布式训练概念;具备NVIDIA CUDA环境,可使用文中链接的Dockerfile或安装recipe依赖;专家并行至少需要两块GPU;使用融合的MXFP8 GroupedMLP kernel必须使用NVIDIA Blackwell GPU。

文章中给出的训练基准是在八块NVIDIA B200 Tensor Core GPU上,使用Mixtral-8x7B配置,recipe吞吐最高为Hugging Face基线的 2.21 倍。文章同时说明,可根据GPU和显存需求选择BF16或MXFP8,并设置数据并行和专家并行大小,使二者乘积等于GPU总数。

博客给出的上手命令为:先用双卡配置L0_sanity确认专家并行和训练环境正确,torchrun --nproc_per_node=2 train_fsdp2_ep.py --config-name L0_sanity;验证后扩展到Mixtral-8x7B配置(EP=8,MXFP8,八卡),torchrun --nproc_per_node=8 train_fsdp2_ep.py --config-name L1_8x7B_ep checkpoint.ckpt_dir=/path/to/ckpt。

  • 专家并行至少两块GPU;MXFP8融合kernel要求Blackwell GPU。
  • 基准配置:八块B200、Mixtral-8x7B、MXFP8、专家并行EP=8。
  • 数据并行与专家并行大小乘积需等于总GPU数。
  • recipe README包含启动、checkpoint和基准命令。
  • 文章致谢Sudhakar Singh、Varun Thumbe、Santosh Santosh、Timur Rvachov、Chris Hoge。

信息来源