arXiv cs.AI精选82

FuTransformer:面向 Hopper 上 Llama 风格推理的 FP8 预填充与 INT4 解码

FuTransformer: FP8 prefill and INT4 decode for Llama-style inference on Hopper

· 2天前

精选理由

为Hopper上的Llama推理提供高效FP8预填充与INT4解码方案,显著提速并量化精度代价。

AI 摘要

Transformer 预填充会在多个 token 间复用权重,主要受矩阵乘法和激活数据移动限制;单 token 解码的复用有限,主要受权重和 KV-cache 读取限制。我们提出 FUTRANSFORMER,这是一个面向 NVIDIA Hopper GPU、实现 Llama 风格 Transformer 模块的 CUDA 实现。它将 CODA 的 GEMM 加 epilogue 方法应用于推理,并加入直接放置 KV-cache、将固定的 RMSNorm 增益折叠进权重、通过延迟缩放直接写入 FP8 输出,以及无需填充的预填充支持。解码使用 INT4 投影权重和 INT4 KV-cache 拷贝。权重和键采用 Tensor Core fragment 布局,从而无需完整的中间 tile,即可直接反量化为 MMA 操作数。块对角 Hadamard 变换降低了离群通道带来的缓存量化误差。在一张 H100 上,预填充速度最高可达编译版 PyTorch FP8 的 1.48 倍,达到 1.29 PFLOP/s。在 8B 规模、使用 SwiGLU 的 gate/up projection 中,我们的 BF16 路径比 CODA 快 1.13 倍。我们的 FP8 路径比评测中的 BF16 CODA 路径快 2.02–2.18 倍。在 8B 和 70B 规模、批大小为 1–32 的情况下,INT4 解码速度是各点上 PyTorch BF16 和 INT4 模块中较快者的 1.3–2.4 倍:比编译并使用 CUDA graph 的 BF16 实现快 2.1–3.3 倍,比使用 PyTorch INT4 投影内核的同一模块快 1.3–6.3 倍;后者面向单个查询行,在批大小为 32 时性能反而不如 BF16。它也比我们的 FP8 路径快 31–51%。完整的 Llama-3.1-8B 解码在批大小为 1 时每步耗时 2.8 ms,而编译版 transformers 实现为 8.1 ms。通过 INT4 权重路径解码 WikiText-2 的每个 token,使用最近舍入权重时困惑度从 6.24 升至 7.23,使用相同格式的 GPTQ 时升至 6.99;旋转后的 INT4 cache 额外增加 0.20。各内核与量化参考计算的结果一致,困惑度差异在 0.001 以内。

查看原文(arXiv cs.AI)