跳到主要内容
返回时间线
NVIDIA 开发者技术博客来源发表:

NVIDIA 团队用 BioNeMo MoE 配方与 Transformer Engine 在八块 B200 上把生物基础模型训练吞吐提升至 Hugging Face 基线的 2.21 倍

核心概要

NVIDIA 的 Sudhakar Singh、Varun Thumbe、Santosh Santosh、Timur Rvachov 和 Chris Hoge 发布了一篇教程,说明如何用 NVIDIA BioNeMo MoE 配方与 Transformer Engine 训练基于 MoE 的生物基础模型:用 GroupedLinear 把逐专家的 Python 循环改为一次分组 GEMM,用 MXFP8(每 32 个连续值一个缩放因子)把权重和激活从 16 位降到 8 位,并用 Sequential API 把 GroupedLinear→ScaledSwiGLU→GroupedLinear 融合为 ForwardGroupedMLP_CuTeGEMMSwiGLU_

AI-generated editorial illustration: Efficient MoE Training for Biological Foundation Models

深度剖析

教程给出用 GroupedLinear 替代逐专家 Python 循环的具体做法:每个专家保留自己的权重张量,调用时额外传入每个专家的 token 数 split_sizes,由 TE 的 grouped GEMM 路径一次性提交本地专家的 gate-up 投影。 相对文中展示的 Hugging Face 基线实现——用 for expert_idx, expert_layer in enumerate(self.experts) 逐个专家触发独立 kernel 启动——这里把多个线性变换合并为一次分组调用,减少启动与调度开销。 文中给出了可直接运行的代码片段(GroupedLinear 的构造与调用)以及基线循环代码,属于实现层面的对照说明,未给出单独的 kernel 级计时数据。

教程说明 BioNeMo 配方用 TE 支持 FP8 与 MXFP8 训练,把权重和激活从 BF16 的 16 位降到 8 位,其中 MXFP8 为每 32 个连续值分配一个缩放因子以保留数值范围和精度,并在 NVIDIA Blackwell GPU 上由硬件加速、使用专用 Tensor Core 指令。 相对 BF16 表示,这一路径直接针对 MoE 参数量增大与基因组学长序列带来的激活内存压力;文中同时指出主权重仍保留 16 位,因此训练框架需要额外的量化与反量化步骤。 文中给出 MXFP8BlockScaling 配方对象与 te.autocast 的用法代码,并说明量化/反量化在朴素路径中是分离操作;内存收益以机制说明为主,未列出具体显存数值。

教程展示用 TE Sequential API 把 GroupedLinear → ScaledSwiGLU → GroupedLinear 序列在模式匹配时替换为融合算子 ForwardGroupedMLP_CuTeGEMMSwiGLU_MXFP8 及匹配的反向算子,从而把 SwiGLU、路由概率缩放和反量化折进分组 MLP 路径,并避免物化部分中间结果。 相对 Hugging Face Transformers 也提供的 grouped_mm,文中强调 TE 能把 GroupedLinear 与 MXFP8 量化、激活、路由权重缩放和中间数据搬运融合进一个 GroupedMLP kernel。 文中给出 Sequential(GroupedLinear(gate_up), ScaledSwiGLU(), GroupedLinear(down)) 的代码与融合算子名称,属于框架行为说明,未提供逐算子的性能拆解。

在八块 NVIDIA B200 Tensor Core GPU 的训练基准中,该配方吞吐最高达到 Hugging Face 基线的 2.21 倍;教程还给出从两块 GPU 的 L0_sanity 配置验证专家并行,到八块 GPU 上 Mixtral-8x7B、EP=8 加 MXFP8 的 L1_8x7B_ep 配置的启动命令。 相对只描述优化原理的说明,这里给出了端到端吞吐倍数与可复现的启动路径,并提示数据并行与专家并行规模之积需等于 GPU 总数。 吞吐数字来自作者自述的八卡 B200 基准,文中未给出基线配置细节、序列长度或误差范围;使用融合 MXFP8 GroupedMLP kernel 需要 Blackwell GPU。

启示与展望

这篇教程面向已经熟悉 Python、PyTorch 与分布式训练概念、并拥有 NVIDIA CUDA 环境的工程读者;专家并行至少需要两块 GPU,而使用融合 MXFP8 GroupedMLP kernel 必须使用 NVIDIA Blackwell GPU。它给出的是一条可复现的落地路径:先用两块 GPU 的 L0_sanity 配置确认专家并行与训练环境,再扩展到八块 GPU 上 Mixtral-8x7B、EP=8 加 MXFP8 的 L1_8x7B_ep 配置,并按 GPU 与显存需求在 BF16 与 MXFP8 之间选择,同时保证数据并行与专家并行规模之积等于 GPU 总数。适用场景是 MoE 架构的生物基础模型训练,尤其是基因组学这类长序列、激活内存压力大的工作负载。

吞吐倍数 2.21 倍来自作者自述的八卡 B200 基准,文中未说明基线配置、序列长度、模型规模细节或测量误差范围,因此该数字在自有硬件与工作负载上的可复现程度仍是开放问题。MXFP8 每 32 个连续值一个缩放因子对训练收敛与最终精度的影响,文中只说明其“有助于保留数值范围和精度”,未给出收敛曲线或下游任务结果。此外,教程以机制与代码说明为主,未提供逐算子性能拆解,读者若想判断收益来自分组 GEMM、低精度还是融合 kernel,需要自行做消融。

来源