NVIDIA/TransformerEngine

GitHub: NVIDIA/TransformerEngine

NVIDIA 推出的用于在 Hopper、Ada 和 Blackwell GPU 上通过 FP8/MXFP8/NVFP4 等低精度格式加速 Transformer 模型训练与推理的专用库。

Stars: 3435 | Forks: 776

.. 版权所有 (c) 2022-2026,NVIDIA CORPORATION & AFFILIATES. 保留所有权利。 ``` See LICENSE for license information. ``` |License| # Transformer Engine `快速入门 <#examples>`_ | `安装 <#installation>`_ | `用户指南 `_ | `示例 `_ | `收敛性 <#convergence>`_ | `集成 <#integrations>`_ | `发布说明 `_ # 最新新闻 * [12/2025] `NVIDIA Nemotron 3: 高效且开放的智能 `_ - 使用 NVFP4 在 Transformer Engine 上训练 * [11/2025] `NVIDIA Blackwell 架构横扫 MLPerf Training v5.1 基准测试 `_ * [11/2025] `使用 PyTorch 和 NVIDIA BioNeMo Recipes 扩展生物 Transformer 模型 `_ * [11/2025] `大规模 RL 模型的 FP8 训练 `_ * [09/2025] `使用 NVFP4 预训练大语言模型 `_ * [09/2025] `Ling 2.0 的原生 FP8 混合精度训练,已开源! `_ * [09/2025] `使用 NVIDIA NeMo 在 FP8 精度下实现更快的训练吞吐量 `_ * [08/2025] `我们如何使用 FP8 构建 DeepL 下一代 LLM 用于训练和推理 `_ * [08/2025] `NVFP4 以 16 位的精度和 4 位的速度与效率进行训练 `_ `以往新闻 <#previous-news>`_ # 什么是 Transformer Engine? .. overview-begin-marker-do-not-remove Transformer Engine (TE) 是一个用于在 NVIDIA GPU 上加速 Transformer 模型的库,包括在 Hopper、Ada 和 Blackwell GPU 上使用 8-bit floating point (FP8) 精度,从而在训练和推理中以更低的内存消耗提供更好的性能。在 Blackwell GPU 上,TE 还支持 MXFP8 (Microscaling FP8) 和 NVFP4 格式,以实现更高的效率。TE 为流行的 Transformer 架构提供了一系列高度优化的构建块,以及一个类似于自动混合精度的 API,可以与你的框架特定代码无缝结合使用。TE 还包含一个框架无关的 C++ API,可以与其他深度学习库集成,为 Transformer 启用 FP8 支持。 随着 Transformer 模型在大语言模型、MoE 架构和多模态模型中扩展到数千亿参数,训练和推理变得日益消耗内存和计算资源。混合精度训练将单精度 (FP32) 与较低精度格式相结合,在几乎不影响准确性的情况下带来了显著的加速。FP8 随 Hopper GPU 架构引入,比 FP16 提供了进一步的性能提升且准确性毫无下降,而 Blackwell 上更新的 MXFP8 和 NVFP4 格式更是将效率推向新高度。 TE 与流行的 LLM 框架集成,并提供各种优化,使低精度训练能够与 MoE、张量/序列/上下文并行以及融合算子等高级功能无缝协作。它提供了一个由模块组成的 Python API,可轻松构建 Transformer 层,同时还包含一个框架无关的 C++ 库,其中包含 FP8 支持所需的结构体和内核。TE 提供的模块在内部维护 FP8 训练所需的缩放因子和其他值,极大地简化了用户的混合精度训练。 # 亮点 * 易于使用的模块,用于构建支持 FP8 的 Transformer 层 * 针对 Transformer 模型的优化(例如融合内核) * 在 NVIDIA Hopper、Ada 和 Blackwell GPU 上支持 FP8 * 在 NVIDIA Blackwell GPU 上支持 MXFP8 和 NVFP4 * 在 NVIDIA Ampere GPU 架构及更新世代上支持跨所有精度 (FP16, BF16) 的优化 # 示例 ## PyTorch .. code-block:: python import torch import transformer_engine.pytorch as te from transformer_engine.common import recipe # 设置维度。 in_features = 768 out_features = 3072 hidden_size = 2048 # 初始化模型和输入。 model = te.Linear(in_features, out_features, bias=True) inp = torch.randn(hidden_size, in_features, device="cuda") # 创建 FP8 recipe。注意:所有输入参数均为可选。 fp8_recipe = recipe.DelayedScaling(margin=0, fp8_format=recipe.Format.E4M3) # 为 forward pass 启用 autocasting with te.autocast(enabled=True, recipe=fp8_recipe): out = model(inp) loss = out.sum() loss.backward() ## JAX ### Flax .. code-block:: python import flax import jax import jax.numpy as jnp import transformer_engine.jax as te import transformer_engine.jax.flax as te_flax from transformer_engine.common import recipe BATCH = 32 SEQLEN = 128 HIDDEN = 1024 # 初始化 RNG 和输入。 rng = jax.random.PRNGKey(0) init_rng, data_rng = jax.random.split(rng) inp = jax.random.normal(data_rng, [BATCH, SEQLEN, HIDDEN], jnp.float32) # 创建 FP8 recipe。注意:所有输入参数均为可选。 fp8_recipe = recipe.DelayedScaling(margin=0, fp8_format=recipe.Format.HYBRID) # 为 forward pass 启用 autocasting with te.autocast(enabled=True, recipe=fp8_recipe): model = te_flax.DenseGeneral(features=HIDDEN) ``` def loss_fn(params, other_vars, inp): out = model.apply({'params':params, **other_vars}, inp) return jnp.mean(out) # Initialize models. variables = model.init(init_rng, inp) other_variables, params = flax.core.pop(variables, 'params') # Construct the forward and backward function fwd_bwd_fn = jax.value_and_grad(loss_fn, argnums=(0, 1)) for _ in range(10): loss, (param_grads, other_grads) = fwd_bwd_fn(params, other_variables, inp) ``` 如需更全面的教程,请查看我们的 `入门指南 `_。 .. overview-end-marker-do-not-remove # 安装说明 ## 系统要求 * **硬件:** Blackwell, Hopper, Grace Hopper/Blackwell, Ada, Ampere * **操作系统:** Linux(官方支持),WSL2(有限支持) * **软件:** * CUDA:12.1+ (Hopper/Ada/Ampere),12.8+ (Blackwell) 以及兼容的 NVIDIA 驱动程序 * cuDNN:9.3+ * 编译器:支持 C++17 的 GCC 9+ 或 Clang 10+ * Python:推荐 3.12 * **源码构建要求:** CMake 3.18+,Ninja,Git 2.17+,pybind11 2.6.0+ * **注意:** FP8 功能要求计算能力在 8.9 以上 (Ada/Hopper/Blackwell) ## 安装方法 ## Docker (推荐) 开始使用 Transformer Engine 最快的方法是使用 `NVIDIA GPU Cloud (NGC) Catalog `_ 上的 Docker 镜像。 例如,要以交互方式使用 NGC PyTorch 容器, .. code-block:: bash ``` docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:26.01-py3 ``` 例如,要以交互方式使用 NGC JAX 容器, .. code-block:: bash ``` docker run --gpus all -it --rm nvcr.io/nvidia/jax:26.01-py3 ``` 这里的 26.01(对应于 2026 年 1 月发布)是容器版本。 我们建议更新到此处提供的最新 NGC 容器: * https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch * https://catalog.ngc.nvidia.com/orgs/nvidia/containers/jax 如果你运行任何示例,请确保使用匹配版本的 TransformerEngine。TransformerEngine 已预构建并打包在容器内,示例可在 ``/opt/transformerengine`` 或 ``/opt/transformer-engine`` 中找到。 **使用 NGC 容器的好处:** * 所有依赖项均已预装,且版本兼容并经过优化配置 ## pip 安装 **pip 安装的前提条件:** * 兼容的 C++ 编译器 * 带有 cuDNN 和 NVCC (NVIDIA CUDA Compiler) 的 CUDA Toolkit(如果从源码安装)。 使用 pip 安装最新的稳定版本: .. code-block:: bash ``` # 对于 PyTorch 集成 pip install --no-build-isolation transformer_engine[pytorch] # 对于 JAX 集成 pip install --no-build-isolation transformer_engine[jax] # 对于两种框架 pip install --no-build-isolation transformer_engine[pytorch,jax] ``` 或者,直接从 GitHub 仓库安装: .. code-block:: bash ``` pip install --no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@stable ``` 从 GitHub 安装时,你可以使用环境变量显式指定框架: .. code-block:: bash ``` NVTE_FRAMEWORK=pytorch,jax pip install --no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@stable ``` ## conda 安装 使用 conda 从 conda-forge 安装最新的稳定版本: .. code-block:: bash ``` # 对于 PyTorch 集成 conda install -c conda-forge transformer-engine-torch # JAX 集成(即将推出) ``` ## 源码安装 `查看安装指南 `_ ## 环境变量 在安装之前可以设置这些环境变量以自定义构建过程: * **CUDA_PATH**:CUDA 安装路径 * **CUDNN_PATH**:cuDNN 安装路径 * **CXX**:C++ 编译器路径 * **NVTE_FRAMEWORK**:要为其构建的框架的逗号分隔列表(例如 ``pytorch,jax``) * **MAX_JOBS**:限制并行构建作业的数量(默认值因系统而异) * **NVTE_BUILD_THREADS_PER_JOB**:控制每个构建作业的线程数 * **NVTE_CUDA_ARCHS**:要为其编译的 CUDA 计算架构的分号分隔列表(例如 ``80;90`` 对应 A100 和 H100)。如果未设置,将根据 CUDA 版本自动确定。设置此项可以显著减少构建时间和二进制文件大小。 ## 使用 FlashAttention 编译 Transformer Engine 在 PyTorch 中同时支持 FlashAttention-2 和 FlashAttention-3 以提升性能。FlashAttention-3 在 v1.11 版本中加入,并在环境中同时存在两者时优先于 FlashAttention-2 使用。 你可以通过设置这些环境变量来验证正在使用的 FlashAttention 版本: .. code-block:: bash ``` NVTE_DEBUG=1 NVTE_DEBUG_LEVEL=1 python your_script.py ``` 众所周知,FlashAttention-2 编译非常消耗资源,并且需要大量 RAM(参见 `bug `_),这可能导致在安装 Transformer Engine 期间出现内存溢出错误。请尝试在环境中设置 **MAX_JOBS=1** 以规避此问题。 .. troubleshooting-begin-marker-do-not-remove ## 故障排除 **常见问题与解决方案:** 1. **ABI 兼容性问题:** * **症状:** 导入 transformer_engine 时出现带有未定义符号的 ``ImportError`` * **解决方案:** 确保 PyTorch 和 Transformer Engine 使用相同的 C++ ABI 设置构建。从源码重新构建 PyTorch 以匹配 ABI。 * **背景:** 如果你使用的 PyTorch 构建所用的 C++ ABI 与系统默认值不同,你可能会遇到这些未定义符号错误。这在容器外使用 pip 安装的 PyTorch 中尤为常见。 2. **缺少头文件或库:** * **症状:** CMake 关于缺少头文件(``cudnn.h``, ``cublas_v2.h``, ``filesystem`` 等)的错误 * **解决方案:** 安装缺少的开发包或设置环境变量以指向正确的位置: .. code-block:: bash export CUDA_PATH=/path/to/cuda export CUDNN_PATH=/path/to/cudnn * 如果 CMake 找不到 C++ 编译器,请设置 ``CXX`` 环境变量。 * 确保在安装前正确设置了所有路径。 3. **构建资源问题:** * **症状:** 编译挂起、系统卡死或内存溢出错误 * **解决方案:** 限制并行构建: .. code-block:: bash MAX_JOBS=1 NVTE_BUILD_THREADS_PER_JOB=1 pip install ... 4. **详细构建日志:** * 获取详细的构建日志以帮助诊断问题: .. code-block:: bash cd transformer_engine pip install -v -v -v --no-build-isolation . **使用 UV 或虚拟环境的问题:** 1. **导入错误:** * **症状:** 无法导入 ``transformer_engine`` * **解决方案:** 确保你的 UV 环境已激活,并且你使用了 ``uv pip install --no-build-isolation ``,而不是常规的 pip 安装到你的系统环境。 2. **cuDNN 子库加载失败:** * **症状:** 运行时出现 ``CUDNN_STATUS_SUBLIBRARY_LOADING_FAILED`` 错误 * **解决方案:** 当 TE 是基于容器的系统级 cuDNN 安装进行构建,但虚拟环境内的 pip 包引入了 ``nvidia-cudnn-cu12/cu13`` 的 pip 包时,可能会发生这种情况。要解决此问题,从源码构建 TE 时,请指定以下环境变量以指向你虚拟环境中的 cuDNN。 .. code-block:: bash export CUDNN_PATH=$(pwd)/.venv/lib/python3.12/site-packages/nvidia/cudnn export CUDNN_HOME=$CUDNN_PATH export LD_LIBRARY_PATH=$CUDNN_PATH/lib:$LD_LIBRARY_PATH 3. **构建 Wheels:** * **症状:** 常规 TE 安装正常,但 UV wheel 构建在运行时失败。 * **解决方案:** 确保在 wheel 构建以及该 wheel 的 pip 安装过程中都使用了 ``uv build --wheel --no-build-isolation -v``。使用 ``-v`` 获取详细输出,以验证 TE 没有引入与 UV 环境版本不匹配的 PyTorch 或 JAX 版本。 **特定于 JAX 的常见问题与解决方案:** 1. **FFI 问题:** * **症状:** ``No registered implementation for custom call to for platform CUDA`` * **解决方案:** 确保在安装期间使用了 ``--no-build-isolation``。如果预构建 wheels,请确保该 wheel 的构建和安装都使用了 ``--no-build-isolation``。如果使用 UV,请参阅上文的“使用 UV 或虚拟环境的问题”。 .. troubleshooting-end-marker-do-not-remove # 重大变更 ## v1.7:PyTorch 的 Padding mask 定义 为了统一 Transformer Engine 中所有三个框架的 attention mask 定义和用法,在我们的 PyTorch 实现中,padding mask 已从 `True` 表示包含对应位置于 attention 中,更改为表示排除该位置。自 v1.7 起,所有 attention mask 类型均遵循相同的定义:`True` 表示屏蔽对应位置,而 `False` 表示在 attention 计算中包含该位置。 此更改的示例为, .. code-block:: bash ``` # 对于一个包含 3 个 sequences 的 batch,其中 `a`、`b` 和 `c` 是有用的 tokens # 并且 `0` 是 padding tokens, [a, a, a, 0, 0, b, b, 0, 0, 0, c, c, c, c, 0] # 此 batch 在 v1.7 之前的 padding mask 为, [ True, True, True, False, False, True, True, False, False, False, True, True, True, True, False] # 而对于 v1.7 及更高版本,它应该是, [False, False, False, True, True, False, False, True, True, True, False, False, False, False, True] ``` # 收敛性 FP8 和 MXFP8 已在不同的模型架构和配置中进行了广泛测试,我们发现 FP8/MXFP8 和 BF16 训练损失曲线之间**没有显著差异**。FP8 和 MXFP8 的准确性也在下游 LLM 任务(例如 LAMBADA 和 WikiText)中得到了验证。以下是跨不同框架测试收敛性的模型示例。 +------------+------------------+---------------------------------------------------------------------------------------------------------+ | 模型 | 框架 | 来源 | +============+==================+=========================================================================================================+ | MPT-1.3B | Mosaic Composer | https://www.databricks.com/blog/coreweave-nvidia-h100-part-1 | +------------+------------------+---------------------------------------------------------------------------------------------------------+ | LLama2-7B | Alibaba Pai | https://mp.weixin.qq.com/s/NQT0uKXLbXyh5031zBdeBQ | +------------+------------------+---------------------------------------------------------------------------------------------------------+ | LLM-8B | Megatron Core | https://arxiv.org/abs/2506.08027 | +------------+------------------+---------------------------------------------------------------------------------------------------------+ | MPT-13B | Mosaic Composer | https://www.databricks.com/blog/turbocharged-training-optimizing-databricks-mosaic-ai-stack-fp8 | +------------+------------------+---------------------------------------------------------------------------------------------------------+ | MoE-16B | Megatron Core | https://arxiv.org/abs/2506.08027 | +------------+------------------+---------------------------------------------------------------------------------------------------------+ | LLama2-70B | Alibaba Pai | https://mp.weixin.qq.com/s/NQT0uKXLbXyh5031zBdeBQ | +------------+------------------+---------------------------------------------------------------------------------------------------------+ # 集成 Transformer Engine 已与流行的 LLM 框架集成,例如: * `DeepSpeed `_ * `Hugging Face Accelerate `_ * `Lightning `_ * `MosaicML Composer `_ * `NVIDIA JAX Toolbox `_ * `NVIDIA Megatron-LM `_ * `NVIDIA NeMo Megatron Bridge `_ * `Amazon SageMaker Model Parallel Library `_ * `Levanter `_ * `GPT-NeoX `_ * `Hugging Face Nanotron `_ # 贡献 我们欢迎对 Transformer Engine 的贡献!要为 Transformer Engine 做出贡献并提交 pull request, 请遵循 ``_ 指南中概述的准则。 # 论文 * `Attention 原始论文 `_ * `Megatron-LM 张量并行 `_ * `Megatron-LM 序列并行 `_ * `用于深度学习的 FP8 格式 `_ # 视频 * `Blackwell 上稳定且可扩展的 FP8 深度学习训练 | GTC 2025 `_ * `面向 AI 的 Blackwell 数值计算 | GTC 2025 `_ * `构建 LLM:以 FP8 精度加速基础模型预训练 | GTC 2025 `_ * `从 FP8 LLM 训练到推理:大规模语言 AI | GTC 2025 `_ * `Transformer Engine 和 FP8 训练的新功能 | GTC 2024 `_ * `使用 Transformer Engine 进行 FP8 训练 | GTC 2023 `_ * `用于深度学习的 FP8 | GTC 2023 `_ * `深入 Hopper 架构 | GTC 2022 `_ .. |License| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg :target: https://opensource.org/licenses/Apache-2.0 # 以往新闻 * [06/2025] `浮点数 8:高效、低精度 AI 训练简介 `_ * [05/2025] `NVIDIA Grace Hopper 上 LLM 训练的高级优化策略 `_ * [03/2025] `Blackwell 上稳定且可扩展的 FP8 深度学习训练 | GTC 2025 `_ * [03/2025] `使用 NVIDIA DGX Cloud Benchmarking 测量和改善 AI 工作负载性能 `_ .. image:: docs/examples/comparison-fp8-bf16-training-nvidia-dgx-cloud-benchmarking-performance-explorer.jpg :width: 600 :alt: Comparison of FP8 versus BF16 training, as seen in NVIDIA DGX Cloud Benchmarking Performance Explorer * [02/2025] `使用 Evo 2 在新尺度上理解生命生物分子进化的语言 `_ * [02/2025] `NVIDIA DGX Cloud 推出即用型模板以对 AI 平台性能进行基准测试 `_ * [01/2025] `iGenius 与 NVIDIA DGX Cloud 协作,为主权 AI 和受监管行业持续预训练最先进的 LLM `_ * [11/2024] `使用 NVIDIA Megatron-LM 开发具备强大日语能力的 172B LLM `_ * [11/2024] `FP8 如何在 Amazon SageMaker P5 实例上将 LLM 训练提升 18% `_ * [11/2024] `使用 Amazon SageMaker 模型并行高效训练具有长序列长度的模型 `_ * [09/2024] `只需一行代码升级 FP8 混合精度训练,即可将 AI 大模型训练成本降低 30% `_ * [05/2024] `使用 NVIDIA cuDNN 9 加速 Transformer `_ * [03/2024] `涡轮增压器式训练:使用 FP8 优化 Databricks Mosaic AI 技术栈 `_ * [03/2024] `SageMaker 模型并行库中的 FP8 训练支持 `_ * [12/2023] `全新 NVIDIA NeMo 框架特性与 NVIDIA H200 `_ .. image:: docs/examples/H200-NeMo-performance.png :width: 600 :alt: H200 * [11/2023] `Inflection-2:迈上新台阶 `_ * [11/2023] `使用 NVIDIA Transformer Engine 释放 Transformer 的力量 `_ * [11/2023] `使用 FP8 加速 PyTorch 训练工作负载 `_ * [09/2023] `Transformer Engine 已添加到用于 PyTorch 训练的 AWS DL Container 中 `_ * [06/2023] `使用 NVIDIA H100 GPU 打破 MLPerf 训练记录 `_ * [04/2023] `使用 CoreWeave 在 NVIDIA H100 GPU 上对大语言模型进行基准测试(第 1 部分) `_
标签:FP8, NVIDIA GPU, Transformer, Vectored Exception Handling, 凭据扫描, 推理优化, 模型加速, 深度学习, 混合精度训练, 逆向工具