Zyphra 开源 ZYFA:面向 AMD MI355X 的 FP8 FlashAttention,最高提速 1.76 倍
Zyphra 以 Apache 2.0 许可开源 ZYFA,一套面向 AMD Instinct MI355X 的 FP8/BF16 prefill 注意力 kernel,在真实模型激活上比 AMD 默认的 AITER 快 1.16-1.76 倍。
MarkTechPost· Michal Sutter·2026-11-07 01:28· 1 小时前AI 评分46
Zyphra ZYFA:面向 AMD MI355X 的 FP8 FlashAttention,最高提速 1.76 倍
AI 导读
Zyphra 开源了 ZYFA,一套面向 AMD Instinct MI355X 的 FP8/BF16 prefill 注意力 kernel,采用 Apache 2.0 许可。
正文 · 原文
Zyphra 发布了 ZYFA(Zyphra FlashAttention on AMD),这是一套面向 AMD Instinct MI355X GPU 的 FP8 和 BF16 prefill 注意力 kernel。ZYFA 是 Zyphra 面向长上下文 prefill 的 FP8 注意力引擎,代码以 Apache 2.0 许可开源。在真实模型激活值上,其 FP8 kernel 比 AMD 默认 kernel 库 AITER 快 1.16-1.76 倍。在 head dimension 为 128 时,ZYFA 的 FP8 误差比 AITER 低 62-78%。
TL;DR
- 框架:这是一个 kernel 库。支持 FP8 e4m3 和 BF16 的因果前向(prefill)注意力,head dim 为 128,以及 MLA 形状(192/128)。
- 运行平台:仅限 AMD Instinct MI355X(CDNA4,gfx950)、ROCm 7.2.3、PyTorch 2.12。可直接替换
flash_attn_func接口。 - 性能:在真实激活值上,FP8 吞吐量是 AITER 的 1.16-1.76 倍;BF16 大致持平(1.01-1.02 倍)。
- 最佳:32K tokens 时达到 2,672 TFLOP/s FP8,为 FP8 规格峰值的 53%(AITER:39%)。
- 最差:在 Mistral-7B 激活值上仅快 1.16 倍;FP8 时钟降至 1,628 MHz,而 AITER 为 2,108 MHz。
什么是 ZYFA?
ZYFA 以技术论文和 Zyphra 代码的形式发布。它为运行 Zyphra Cloud 的 Zyphra Optimization Engine (ZOE) 提供注意力引擎。BF16 kernel 用 HIP 编写。FP8 kernel 是由 Python 生成器生成的手工调度汇编。
为什么 FP8 注意力在 MI355X 上表现不佳?
FP8 矩阵指令的运行速度是 BF16 峰值的 2 倍。但 FP8 只能加速 QKᵀ 和 PV 这 2 个矩阵乘法。两者之间的 softmax 在向量单元上运行,两种精度的速度相同。
对于 32 个 query 对 128 个 key,FP8 矩阵运算需要 1,024 个周期。精确 FP8 softmax 需要 896 个向量周期。因此 kernel 需要近乎完美的重叠才能让矩阵单元保持忙碌。Zyphra 的线程跟踪显示,AITER 的矩阵流水线有 31.7% 的周期处于空闲状态。
MI355X 不在硬件层面跟踪矩阵指令的完成情况,因此必须通过指令顺序来创造这种重叠。
ZYFA 如何工作?
ZYFA 使用 3 项技术:
Lean P:用一次乘加代替指数运算
e4m3 位模式按整数读取时,值每翻倍一次就增加 8。因此 2^x 的编码大致是 8x 加一个常数。Lean P 用 1 次乘加和 1 次整数转换写出每个 FP8 概率。这将每个块的 softmax 向量周期从 896 减少到 384。
双波乒乓调度
2 个波共享每个 SIMD。一个波发出矩阵指令,另一个波计算概率,然后两者交换。使用 lean P 时,矩阵流水线在稳态周期中有 86% 的时间处于忙碌状态,而使用精确 P 时为 60%。
逐块缩放与舍入行和
每个 64-key 的概率块在舍入前按 2 的幂缩放。CDNA4 的缩放矩阵指令可以零成本消除该因子。ZYFA 还除以舍入后概率之和,每个块用 1 条额外矩阵指令计算。
ZYFA 有多快?
在 16K 和持续时钟下,真实激活的 FP8 加速比为 1.16x(Mistral-7B)、1.17x(Qwen3-8B)和 1.76x(DeepSeek-V2-Lite)。在 32K 的高斯基准测试中,head-dim-128 FP8 内核达到 2,672 TFLOP/s,而 AITER 为 1,944。在 MLA 形状下,它达到 2,464,而 AITER 为 1,237,比值为 1.99x。
在捕获的 Mistral-7B 和 Qwen3-8B 层上,ZYFA 分别达到 1.94 和 1.91 TFLOP/J。AITER 分别为 1.60 和 1.56。
为什么真实模型的增益小于基准测试增益?
MI355X 的时钟取决于有多少操作数位发生翻转。AITER 让更多小概率变成零或次正规数。这些切换的位更少,因此其时钟运行得更高。在 Mistral-7B 层上,ZYFA 运行在 1,628 MHz,而 AITER 运行在 2,108 MHz。ZYFA 总体上仍然需要更少的周期。Zyphra 团队建议在持续时钟下对真实激活进行基准测试。
ZYFA 的 FP8 注意力有多准确?
与 fp64 注意力相比,ZYFA 的 FP8 误差在 Mistral-7B 上是 AITER 的 0.22x,在 Qwen3-8B 上是 0.38x。它与 Composable Kernel 和 Triton 相差在几个百分点以内。在完整的 Mistral-7B 中,与 fp64 的 KL 散度在 ZYFA 下为 3.4×10⁻³,在 AITER 下为 5.9×10⁻³。ZYFA 的输出在 7,200 次启动中也逐位相同。
大多数全模型 FP8 误差来自对 Q、K 和 V 的量化。对 Q 和 K 进行 Hadamard 旋转可将该输入误差大约减半。在 Mistral-7B 上,它使注意力时间增加约 0.1%。
ZYFA 与其他注意力内核相比如何?
| 特性 | ZYFA FP8 | AITER FP8 | FlashAttention-3 | FlashAttention-4 |
|---|---|---|---|---|
| 开发者 | Zyphra | AMD | Dao-AILab 等 | Dao-AILab 等 |
| 目标 GPU | AMD MI355X | AMD MI300X 至 MI355X | NVIDIA H100/H800 | NVIDIA B200(外加 Hopper) |
| 标志性吞吐量 | 2,672 TFLOP/s FP8 | 1,944 TFLOP/s FP8(Zyphra 测量) | 接近 1.2 PFLOP/s FP8 | 1,613 TFLOP/s BF16 |
| 峰值占比 | 53% FP8 | 39% FP8(Zyphra 测量) | 未披露(FP8) | 71% BF16 |
| Softmax 方法 | Lean P,无指数 | 硬件指数 | 通过异步 Tensor Cores 重叠 | 软件模拟指数 |
| FP8 准确率声明 | 误差比 AITER 低 62-78% | 基线 | 误差比基线 FP8 低 2.6x | 未披露 |
| 范围 | 仅因果预填充前向 | 预填充、解码、MLA、分页 | 前向和反向,FP8 前向 | 前向和反向 |
| 许可证 | Apache 2.0 | MIT | BSD-3-Clause | BSD-3-Clause |
跨厂商数字来自不同的输入和时钟。Zyphra 未测量 NVIDIA GPU。
关键要点
- MI355X 上的 FP8 注意力受 softmax 限制,而非矩阵限制。
- Lean P 用 1 次乘加替换指数。
- 真实模型增益为 1.16-1.76x,小于基准测试显示的水平。
- 在 head dim 128 下,FP8 误差比 AITER 降低 62-78%。
- 仅预填充:无解码、无分页 KV,仅 MI355X。
查看论文、Zyphra 博客文章和 GitHub 仓库。另外,欢迎在 Twitter 上关注我们,别忘了加入我们的 150k+ML SubReddit 并订阅我们的 Newsletter。等等!你在 Telegram 上吗?现在你也可以在 Telegram 上加入我们。
需要与我们合作推广您的 GitHub 仓库或 Hugging Face 页面或产品发布或网络研讨会等?联系我们
文章 Zyphra ZYFA:面向 AMD MI355X 的 FP8 FlashAttention,最高提速 1.76 倍 首次发布于 MarkTechPost。
来源:MarkTechPost · marktechpost.com
来源:RadarAI · aihot.news