专栏名称: NVIDIA企业开发者社区
NVIDIA 英伟达开发者社区是NVIDIA GPU开发者交流平台,通过此平台可第一时间获取NVIDIA GPU 开发相关的新产品、新工具、线上/线下活动的资讯。
目录
相关文章推荐
润农畜牧报价  ·  2025年3月3日 ... ·  17 小时前  
润农畜牧报价  ·  2025年3月2日 ... ·  昨天  
润农畜牧报价  ·  2025年3月2日 ... ·  昨天  
润农畜牧报价  ·  2025年2月28日 ... ·  3 天前  
51好读  ›  专栏  ›  NVIDIA企业开发者社区

最新 FasterTransformer 4.0 发布,全球首次支持 GPT-3 大规模多 GPU 多机推理

NVIDIA企业开发者社区  · 公众号  ·  · 2021-04-09 13:00

正文

01

介绍

自从 2018 年推出 FasterTransformer 之后,我们团队持续的对 FasterTransformer 进行开发与优化。从 1.0 版本针对 BERT 的优化、2.0, 2.1 版本针对 decoder 的优化、3.0 与 3.1 的版本中追加了 encoder INT8 的支持,让许多使用者能够顺利地在 transformer 的各种应用场景当中,更有效地使用 GPU。
在最新的 4.0 版本中,我们更提供了全球首个 在千亿级参数规模 的 GPT-3 模型上进行多机多卡的推理支持。由于 GPT-3 有多达 1750 亿的参数,即使使用 FP16 来储存模型,也需要 350 GBs 的 GPU 显存。面对这么巨大的模型,使用多卡推理势在必行。虽然目前有一些框架可以支持多卡的推理,如 Megatron-LM 与 DeepSpeed,但这些框架主要都是为了训练而设计的,缺少针对推理的优化。因此,在这次的更新当中,我们结合了 MPI 与 NCCL,让 FasterTransformer 可以透过张量并行 (tensor parallel) 和流水线并行 (pipeline parallel) 进行多 GPU 的推理,推出了 FasterTransformer-GPT (FT-GPT)。针对 GPT-3,我们测试了使用单机 8 卡的 DGX-A100-80GB 以及四机 32 卡的 DGX-1。此外,我们团队更提供了Triton backend,让使用者能够轻松地将 GPT-3 的推理部署到 Triton serving 上面。不过需要注意的是,目前的 Triton backend 只支持单机多卡的功能。如果必须使用多机多卡的话,还是必须使用 C 或是 PyTorch 的接口。
除了上述的重大新功能之外,我们也持续对现有的功能进行优化。例如,在 3.1 的时候,encoder 里面的 fused multi-head attention kernel 只支持 FP16 精度、并且要求 Turing 以上的架构。而在 4.0 的更新中,我们追加了 INT8 的 fused multi-head attention kernel;同时,Volta 架构在 FP16 精度下也可以使用 fused multi-head attention 的 kernel。
第三个优化点则是针对解码端 kernel 的优化。由于解码端的一个 batch 当中,有些句子可能已经先解码完成了,而有些句子还没有。这个情况下,我们可以省略这些已经完成的句子的计算。因此,我们在所有的自定义 kernel 当中都加入了这个机制来避免这些计算资源的浪费。在我们的测试当中,batch size 大的情况下,最多可以带来接近2倍的加速。
FasterTransformer 4.0 目前已经开源到新的独立项目当中,可以访问https://github.com/NVIDIA/FasterTransformer 获取项目全部源代码,最新的性能数据以及支持的特性。欢迎大家前往使用、加星及反馈。


02

性能

由于目前没有针对 GPT-3 这种超大模型的推理框架,而 GPT-3 的开发团队也没有公开模型与代码,因此我们采用了 Megatron-LM (https://github.com/NVIDIA/Megatron-LM/tree/main/megatron) 这个训练框架作为标准,比较对象则是 FT-GPT 在 Triton 服务上的性能。
测试硬件参数:
· CPU: AMD EPYC 7742 64-Core Processor
· NVIDIA DGX-A100 (with mclk 1593MHz, pclk 1410MHz)

测试软件环境:
· nvcr.io/nvidia/pytorch:20.12-py3 以及 nvcr.io/nvidia/tritonserver:21.02-py3 的镜像

超参数设定:
· head_num = 96
· size_per_head = 128
· vocabulary_size = 51200
· top p = 0.9
· GPU number = 8xA100
· data type = FP16
由于 GPT-3 完整模型在一些task下无法满足 1 秒钟的时延需求,我们提供了 96 层的GPT-3 (1750 亿参数) 以及 48 层的 GPT (约 890 亿参数)两个模型在不同输入/输出长度上,使用 8 张 A100 GPU 在张量并行下的结果。这里,GPT-175B 表示拥有 1750 亿参数的模型、GPT-89B 表示拥有 890 亿参数的模型。由于推理时的 batch size 通常不够大,这边并没有展示使用流水线并行的测试结果。
表1. FasterTransformer Megatron GPT-175B 上的时延与加速比。

Batch size

Input SeqLen

Output SeqLen

Megatron (ms)

FT* (ms)

FT* speedup

1

128

8

660.38

488.86

1.35

2

128

8

687.34

509.47

1.35

4

128

8

1004.88

629.64

1.6

8

128

8

1705.07

749.86

2.27

16

128

8

3111.57

1037.47

3







1

512

32

2384.78

1719.96

1.39

2

512

32

2503.24

1830.56

1.37

4

512

32

3658.65

2092.56

1.75

8

512

32

6238.79

2629.97

2.37

16

512

32

11409.53

3706.23

3.08

*  FT FasterTransformer 使用 triton backend


表2. FasterTransformer Megatron GPT-89B 上的时延与加速比。

Batch size

Input SeqLen

Output SeqLen

Megatron (ms)

FT* (ms)

FT* speedup

1

128

8

342.86

279.44

1.23

2

128

8

369.43

280.24

1.32

4

128

8

540.97

317.71

1.7

12

128

8

1263.39

445.46

2.84

16

128

8

1663.39

524.8

3.17







1

512

32

1244.81

887.52

1.4

2

512

32

1357.54

940.11

1.44

4

512

32

1970.08

1133.22

1.74

8

512

32

3341.66

1415.02

2.36

16

512

32

6090.07

1952.2

3.12

*  FT:FasterTransformer使用triton backend

从上面的测试结果当中 ,我们可以看到 FasterTransformer 带来的加速效果在两个模型上很接近。在 batch size 1, 2 下大概能带来 1.3 倍左右的加速;而 batch size 32时能带来 3 倍左右的加速。此外,还可以发现,在 GPT-89B 的模型上,当输入长度为512、输出长度为 32 时,Megatron 并无法满足时延小于1秒的要求。而FasterTransformer 在 batch size 2 的情况下仍然可以满足。

除了速度上的优势外,FasterTransformer 需要的显存也比较少。例如在总句子长度为2048的情况下,使用8张A100-80GB 的话,FasterTransformer 最多能使用batch size 16;相较之下,Megatron即使在batch size 1的情况下,也会显存溢出。

更多的性能数据以及4.0其他优化当中带来的效果欢迎参考 https://github.com/NVIDIA/FasterTransformer 里面的文檔。



03







请到「今天看啥」查看全文