正文
在这篇博客中,我们将介绍如何使用Triton为FP8推理设计一个高效的kernel,并针对Llama3-70B推理进行调优。我们将讨论FP8(8位浮点数),这是Hopper代GPU(SM90)支持的新数据类型,Triton支持的SM90的关键特性,以及我们如何修改并行化以便能够为内存受限(推理)问题规模最大化内存吞吐量。
我们还专门讨论了CUDA Graph,这是一项重要技术,它将有助于实现kernel级别的加速,并使希望在生产环境中使用Triton kernel的开发人员能够获得额外的性能提升。
代码仓库和源码可在以下地址获取:https://github.com/pytorch-labs/applied-ai
2.0 FP8数据类型
FP8数据类型是由Nvidia、Arm和Intel联合推出的,作为16位浮点类型的继承者。由于位数减半,它有潜力为Transformer网络提供比其前身显著的吞吐量改进。FP8数据类型包含两种格式:
E4M3
(4位指数和3位尾数)。能够存储+/-448和NaN(非数值)。
E5M2
(5位指数和2位尾数)。能够存储 +/-57,334、NaN(非数值)和inf(无穷大)。
我们在推理和前向传播训练中使用E4M3,因为它具有更高的精度;在反向传播训练中使用E5M2,因为它具有更高的动态范围。Nvidia已经设计了他们的H100 FP8 Tensor Core,可以提供高达3958 TFLOPS的峰值性能,是FP16 Tensor Core的
2倍
FLOPS。
我们在设计Triton kernel时考虑了这些硬件创新,在博客的其余部分,我们将讨论利用这些特性的方法,并验证这些特性确实被Triton编译器所使用。