OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  代码  ›  FasterTransformer — NVIDIA 加速库

FasterTransformer — NVIDIA 加速库

 
  benchmark ·  2026-02-28 01:06:37 · 3 次点击  · 0 条评论  

注意:FasterTransformer 的开发已转向 TensorRT-LLM。鼓励所有开发者使用 TensorRT-LLM 以获取大语言模型(LLM)推理的最新改进。NVIDIA/FasterTransformer 仓库将保持存在,但不再进行后续开发。

FasterTransformer

本仓库提供了一个脚本和配方,用于运行高度优化的基于 Transformer 的编码器和解码器组件,并由 NVIDIA 进行测试和维护。

目录

模型概述

在自然语言处理(NLP)中,编码器和解码器是两个重要组件,而 Transformer 层已成为这两个组件的流行架构。FasterTransformer 为推理实现了高度优化的编码器和解码器 Transformer 层。在 Volta、Turing 和 Ampere GPU 上,当数据和权重的精度为 FP16 时,会自动利用 Tensor Cores 的计算能力。

FasterTransformer 构建在 CUDA、cuBLAS、cuBLASLt 和 C++ 之上。我们至少提供以下框架之一的 API:TensorFlow、PyTorch 和 Triton 后端。用户可以直接将 FasterTransformer 集成到这些框架中。对于支持的框架,我们还提供了示例代码来演示如何使用,并展示在这些框架上的性能。

支持矩阵

模型 框架 FP16 INT8 (Turing 之后) 稀疏性 (Ampere 之后) 张量并行 流水线并行 FP8 (Hopper 之后)
BERT TensorFlow - - - -
BERT PyTorch -
BERT Triton 后端 - - -
BERT C++ - - -
XLNet C++ - - - - -
编码器 TensorFlow - - - -
编码器 PyTorch - - -
解码器 TensorFlow - - - - -
解码器 PyTorch - - - - -
解码 TensorFlow - - - - -
解码 PyTorch - - - - -
GPT TensorFlow - - - - -
GPT/OPT PyTorch - -
GPT/OPT Triton 后端 - - -
GPT-MoE PyTorch - - -
BLOOM PyTorch - - -
BLOOM Triton 后端 - - -
GPT-J Triton 后端 - - -
Longformer PyTorch - - - - -
T5/UL2 PyTorch - - -
T5 TensorFlow 2 - - - - -
T5/UL2 Triton 后端 - - -
T5 TensorRT - - -
T5-MoE PyTorch - - -
Swin Transformer PyTorch - - - -
Swin Transformer TensorRT - - - -
ViT PyTorch - - - -
ViT TensorRT - - - -
GPT-NeoX PyTorch - - -
GPT-NeoX Triton 后端 - - -
BART/mBART PyTorch - - -
WeNet C++ - - - - -
DeBERTa TensorFlow 2 - - 进行中 进行中 -
DeBERTa PyTorch - - 进行中 进行中 -
  • 请注意,FasterTransformer 在 C++ 上支持上述模型,因为所有源代码都构建在 C++ 之上。

特定模型的更多详细信息放在 docs/ 目录下的 xxx_guide.md 文件中,其中 xxx 表示模型名称。一些常见问题及其答案放在 docs/QAList.md。请注意,编码器和 BERT 的模型相似,我们将解释一起放在 bert_guide.md 中。

高级信息

以下代码列出了 FasterTransformer 的目录结构:

/src/fastertransformer: FasterTransformer 的源代码
    |--/cutlass_extensions: cutlass gemm/kernels 的实现。
    |--/kernels: 不同模型/层和操作的 CUDA 内核,如 addBiasResiual。
    |--/layers: 层模块的实现,如注意力层、前馈网络层。
    |--/models: 不同模型的实现,如 BERT、GPT。
    |--/tensorrt_plugin: 将 FasterTransformer 封装到 TensorRT 插件中。
    |--/tf_op: 自定义 Tensorflow OP 实现
    |--/th_op: 自定义 PyTorch OP 实现
    |--/triton_backend: 自定义 triton 后端实现
    |--/utils: 包含常见的 cuda 工具,如 cublasMMWrapper、memory_utils
/examples: C++、tensorflow 和 pytorch 接口示例
    |--/cpp: C++ 接口示例
    |--/pytorch: PyTorch OP 示例
    |--/tensorflow: TensorFlow OP 示例
    |--/tensorrt: TensorRT 示例
/docs: 解释不同模型实现细节并展示基准测试的文档
/benchmark: 包含运行不同模型基准测试的脚本
/tests: 单元测试
/templates: 解释如何将新模型/示例添加到 FasterTransformer 仓库的文档

请注意,许多文件夹包含许多子文件夹以拆分不同的模型。量化工具已移至 examples,例如 examples/tensorflow/bert/bert-quantization/examples/pytorch/bert/bert-quantization-sparsity/

全局环境变量

FasterTransformer 提供了一些方便的环境变量用于调试和测试。

  1. FT_LOG_LEVEL: 此环境变量控制调试消息的日志级别。更多详细信息在 src/fastertransformer/utils/logger.h 中。请注意,当级别低于 DEBUG 时,程序将打印大量消息,并且程序会变得非常慢。
  2. FT_NVTX: 如果设置为 ON,例如 FT_NVTX=ON ./bin/gpt_example,程序将插入 nvtx 标签以帮助分析程序性能。
  3. FT_DEBUG_LEVEL: 如果设置为 DEBUG,则程序将在每个内核之后运行 cudaDeviceSynchronize()。否则,内核默认异步执行。这在调试时定位错误点很有帮助。但此标志会显著影响程序性能。因此,应仅用于调试。

性能

硬件设置:

  • 8xA100-80GBs (mclk 1593MHz, pclk 1410MHz) 搭配 AMD EPYC 7742 64-Core Processor
  • T4 (mclk 5000MHz, pclk 1590MHz) 搭配 Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz

为了运行以下基准测试,我们需要通过以下命令安装 Unix 计算工具 "bc":

apt-get install bc

BERT base 性能

TensorFlow 的 FP16 结果通过运行 benchmarks/bert/tf_benchmark.sh 获得。

TensorFlow 的 INT8 结果通过运行 benchmarks/bert/tf_int8_benchmark.sh 获得。

PyTorch 的 FP16 结果通过运行 benchmarks/bert/pyt_benchmark.sh 获得。

PyTorch 的 INT8 结果通过运行 benchmarks/bert/pyt_int8_benchmark.sh 获得。

更多基准测试放在 docs/bert_guide.md

FasterTransformer 新特性的 BERT base 性能

下图比较了 T4 上 FasterTransformer 不同特性与 FP16 下 FasterTransformer 的性能。

对于大批量大小和序列长度,EFF-FT 和 FT-INT8-v2 都带来了约 2 倍的加速。同时使用 Effective FasterTransformer 和 int8v2 可以为大场景带来约 3.5 倍的加速(相比 FasterTransformer FP16)。

TensorFlow 上的 BERT base 性能

下图比较了 T4 上 FasterTransformer 不同特性与 TensorFlow XLA 在 FP16 下的性能。

对于小批量大小和序列长度,使用 FasterTransformer 可以带来约 3 倍的加速。

对于大批量大小和序列长度,使用带有 INT8-v2 量化的 Effective FasterTransformer 可以带来约 5 倍的加速。

PyTorch 上的 BERT base 性能

下图比较了 T4 上 FasterTransformer 不同特性与 PyTorch TorchScript 在 FP16 下的性能。

对于小批量大小和序列长度,使用 FasterTransformer CustomExt 可以带来约 4 倍 ~ 6 倍的加速。

对于大批量大小和序列长度,使用带有 INT8-v2 量化的 Effective FasterTransformer 可以带来约 5 倍的加速。

解码与解码器性能

TensorFlow 的结果通过运行 benchmarks/decoding/tf_decoding_beamsearch_benchmark.shbenchmarks/decoding/tf_decoding_sampling_benchmark.sh 获得。

PyTorch 的结果通过运行 benchmarks/decoding/pyt_decoding_beamsearch_benchmark.sh 获得。

在解码实验中,我们更新了以下参数:

  • head_num = 8
  • size_per_head = 64
  • 编码器和解码器的 num_layers = 6
  • TensorFlow 示例代码的 vocabulary_size = 32001,PyTorch 示例代码的 vocabulary_size = 31538
  • memory_hidden_dim = 512
  • max sequence length = 128

更多基准测试放在 docs/decoder_guide.md

TensorFlow 上解码器与解码的端到端翻译性能

下图显示了在 T4 上 FP16 下,FT-Decoder op 和 FT-Decoding op 相比 TensorFlow 的加速比。这里,我们使用翻译测试集的吞吐量来防止不同方法的总令牌数可能不同。与 TensorFlow 相比,FT-Decoder 提供 1.5 倍 ~ 3 倍的加速;而 FT-Decoding 提供 4 倍 ~ 18 倍的加速。

PyTorch 上解码器与解码的端到端翻译性能

下图显示了在 T4 上 FP16 下,FT-Decoder op 和 FT-Decoding op 相比 PyTorch 的加速比。这里,我们使用翻译测试集的吞吐量来防止不同方法的总令牌数可能不同。与 PyTorch 相比,FT-Decoder 提供 1.2 倍 ~ 3 倍的加速;而 FT-Decoding 提供 3.8 倍 ~ 13 倍的加速。

GPT 性能

下图比较了 A100 上 Megatron 和 FasterTransformer 在 FP16 下的性能。

在解码实验中,我们更新了以下参数:

  • head_num = 96
  • size_per_head = 128
  • GPT-89B 模型的 num_layers = 48,GPT-175B 模型的 num_layers = 96
  • data_type = FP16
  • vocab_size = 51200
  • top_p = 0.9
  • tensor parallel size = 8
  • input sequence length = 512
  • output sequence length = 32

发布说明

更新日志

2023年5月
- 修复生成提前停止的 bug

2023年1月
- 支持 GPT MoE
- 支持 Bert 和 GPT 的 FP8(实验性
- 在 TensorFlow 2 和 PyTorch 上支持 DeBERTa

2022年12月
- 发布 FasterTransformer 5.2
- 支持最小长度惩罚

2022年11月
- 支持 T5 Tensorflow 2 自定义 op。
- 支持 T5 MoE
- 支持 WeNet
- 支持 BART & mBART
- 支持 SwinV2
- 初步支持 GPT 的 w8a8 int8 模式(预览)
- 支持 GPT 中的融合多头注意力

2022年10月
- 支持 BLOOM

2022年9月
- 在 GPT 中支持事实采样(链接
- 在 T5 中支持 IA3 适配方案

2022年8月
- 在 GPT 中支持返回上下文令牌嵌入
- 发布 FasterTransformer 5.1
- 支持交互式生成
- 支持注意力时间限制内存
- 支持 mt5 和 t5-v1.1

2022年7月
- 支持 UL2 huggingface 检查点。(链接
- 修复 bfloat16 下 T5 的 bug。
- 添加 ViT INT8 TensorRT 插件
- 支持批量采样
- 在 GPT 模型中支持共享上下文优化

2022年6月
- 支持 Triton 后端的流式生成。
- 支持 OPT。
- 在 FP32、FP16 和 BF16 下支持多节点多 GPU BERT。

2022年5月
- 在大多数模型上支持 bfloat16。
- 为 GPT-J 支持前缀提示
- 支持 GPT-NeoX。
- 现在,LayerNorm 中使用的 epsilon

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor