作者:Edison_G

Transformer 对计算和存储的高要求阻碍了其在 GPU 上的大规模部署。在本文中,来自快手异构计算团队的研究者分享了如何在 GPU 上实现基于 Transformer 架构的 AI 模型的极限加速,介绍了算子融合重构、混合精度量化、先进内存管理、Input Padding 移除以及 GEMM 配置等优化方法。

gpu调试层有什么用 gpu底层调试_计算机视觉

gpu调试层有什么用 gpu底层调试_人工智能_02

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_03

图 1:基于 Transformer 架构的 NLP 模型规模

gpu调试层有什么用 gpu底层调试_人工智能_04

gpu调试层有什么用 gpu底层调试_算法_05

图 2:基于 Transformer 架构的应用

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_06

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_07

图 3:Transformer 模型的架构

gpu调试层有什么用 gpu底层调试_算法_08

gpu调试层有什么用 gpu底层调试_计算机视觉_09

图 4:Beam Search Decoding (Decoder + Beam Search) 流程图

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_10

Transformer 家族模型

根据具体模型架构和应用的不同,研究者将 Transformer 家族的模型分为四大类(如图 5):

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_11

图 5:经典的基于 Transformer 结构的 AI 模型

gpu调试层有什么用 gpu底层调试_算法_12

gpu调试层有什么用 gpu底层调试_计算机视觉_13

gpu调试层有什么用 gpu底层调试_计算机视觉_14

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_15

图 6:Transformer 架构中 Self-attention 和 Feedforward 模块的 CUDA kernel 融合和重构,参见[14]

gpu调试层有什么用 gpu底层调试_人工智能_16

gpu调试层有什么用 gpu底层调试_算法_17

图 7:Transformer FP16 版本的几个关键 CUDA kernel 采用的量化精度

gpu调试层有什么用 gpu底层调试_计算机视觉_18

gpu调试层有什么用 gpu底层调试_算法_19

图 8:Transformer CUDA 实现的内存管理

gpu调试层有什么用 gpu底层调试_人工智能_20

gpu调试层有什么用 gpu底层调试_gpu调试层有什么用_21

gpu调试层有什么用 gpu底层调试_算法_22

图 9:输入 Padding 移除的方案 - 通过引入 Offset Mask,移除 Padding 的 Sequence 和原始的 Sequence 可以互相转换重建

gpu调试层有什么用 gpu底层调试_算法_23

gpu调试层有什么用 gpu底层调试_算法_24

图 10:通过对 CUDA Kernel 的分类判断是否可以移除 Padding

gpu调试层有什么用 gpu底层调试_人脸识别_25

gpu调试层有什么用 gpu底层调试_人工智能_26

图 11:Transformer GEMM 配置的优化

总结

gpu调试层有什么用 gpu底层调试_算法_27