Zyphra hat veröffentlicht ZYFA (Zyphra FlashAttention on AMD), eine Sammlung von FP8- und BF16-Prefill-Attention-Kernels für AMD Instinct MI355X -GPUs. ZYFA ist Zyphras FP8-Attention-Engine für lange Prefill-Kontexte, und der Code ist quelloffen unter Apache 2.0. Auf echten Modellaktivierungen laufen seine FP8-Kernels 1,16-1,76x schneller als AITER, AMDs Standard-Kernelbibliothek. Bei einer Head-Dimension von 128 ist ZYFAs FP8-Fehler 62-78% geringer als der von AITER.
TL;DR
- Framework: Es handelt sich um eine Kernelbibliothek. Causale Forward-Attention (Prefill) in FP8 e4m3 und BF16, Head-Dim 128 und MLA-Form (192/128).
- Läuft auf: Ausschließlich AMD Instinct MI355X (CDNA4, gfx950), ROCm 7.2.3, PyTorch 2.12. Drop-in-
flash_attn_funcSchnittstelle. - Leistung: 1,16-1,76x AITERs FP8-Durchsatz auf echten Aktivierungen; BF16 etwa gleichauf (1,01-1,02x).
- Bester Fall: 2,672 TFLOP/s FP8 bei 32K Token, 53% des FP8-Datenblatt-Peaks (AITER: 39%).
- Schlechtester Fall: Nur 1.16x bei Mistral-7B-Aktivierungen; der FP8-Takt sinkt auf 1,628 MHz gegenüber AITERs 2,108 MHz.
Was ist ZYFA?
ZYFA wird in Form eines technischen Papiers zusammen mit Code von Zyphra bereitgestellt. Es betreibt die Attention-Engine der Zyphra Optimization Engine (ZOE), auf der Zyphra Cloud läuft. Die BF16-Kernels sind in HIP geschrieben. Die FP8-Kernels sind handoptimierter Assembler, der von einem Python-Generator erzeugt wird.
Warum liefert FP8-Attention auf MI355X schlechtere Ergebnisse?
FP8-Matrixbefehle laufen mit dem 2-fachen des BF16-Peaks. Aber FP8 beschleunigt nur die 2 Matrixprodukte, QKᵀ und PV. Die Softmax-Berechnung dazwischen läuft auf der Vektoreinheit in beiden Präzisionen mit derselben Geschwindigkeit.
Bei 32 Queries gegen 128 Keys benötigt die FP8-Matrixarbeit 1.024 Zyklen. Das exakte FP8-Softmax benötigt 896 Vektorzyklen. Der Kernel braucht also eine nahezu perfekte Überlappung, um die Matrizeneinheiten ausgelastet zu halten. Zyphras Thread-Traces zeigen, dass AITERs Matrix-Pipeline für 31,7% der Zyklen im Leerlauf ist.
Die MI355X verfolgt den Abschluss von Matrixinstruktionen nicht in Hardware, daher muss die Instruktionsreihenfolge diese Überlappung erzeugen.
Wie funktioniert ZYFA?
ZYFA verwendet 3 Techniken:
Lean P: eine Multiplikations-Addition statt einer Exponentialfunktion
Ein e4m3-Bitmuster, als Ganzzahl gelesen, wächst bei jeder Verdoppelung des Werts um 8. Der Code von 2^x ist also ungefähr 8x plus eine Konstante. Lean P schreibt jede FP8-Wahrscheinlichkeit mit 1 Multiplikations-Addition und 1 Ganzzahlkonvertierung. Dies reduziert die Softmax-Vektorzyklen pro Block von 896 auf 384.
Ping-Pong-Zeitplan mit zwei Waves
2 Waves teilen sich jedes SIMD. Die eine issues Matrixinstruktionen, während die andere Wahrscheinlichkeiten berechnet, dann wechseln sie. Mit Lean P ist die Matrix-Pipeline 86% der Zyklen im stationären Zustand ausgelastet, gegenüber 60% mit exaktem P.
Skalierung pro Block und gerundete Zeilensumme
Jeder 64-Key-Block von Wahrscheinlichkeiten wird vor der Rundung mit einer Potenz von 2 skaliert. Die skalierte Matrixinstruktion von CDNA4 entfernt den Faktor ohne Kosten. ZYFA dividiert außerdem durch die Summe der gerundeten Wahrscheinlichkeiten, berechnet mit 1 zusätzlicher Matrixinstruktion pro Block.
Wie schnell ist ZYFA?
FP8-Beschleunigungen mit echten Aktivierungen bei 16K und anhaltenden Taktraten sind 1.16x (Mistral-7B), 1.17x (Qwen3-8B) und 1.76x (DeepSeek-V2-Lite). Bei Gaussian-Benchmarks bei 32K erreicht der FP8-Kernel mit head-dim-128 2,672 TFLOP/s gegenüber AITERs 1,944. Bei der MLA-Form erreicht er 2,464 gegenüber 1,237, ein Verhältnis von 1.99x.
Auf aufgezeichneten Mistral-7B- und Qwen3-8B-Schichten liefert ZYFA 1.94 und 1.91 TFLOP/J. AITER liefert 1.60 und 1.56.
Warum sind die Gewinne bei echten Modellen kleiner als die Benchmark-Gewinne?
Der Takt der MI355X hängt davon ab, wie viele Operandenbits kippen. AITER lässt mehr kleine Wahrscheinlichkeiten zu Nullen oder Subnormalen werden. Diese kippen weniger Bits, daher läuft ihr Takt höher. Auf der Mistral-7B-Schicht läuft ZYFA mit 1,628 MHz, während AITER mit 2,108 MHz läuft. ZYFA benötigt dennoch insgesamt weniger Zyklen. Das Zyphra-Team empfiehlt, Benchmarks mit echten Aktivierungen bei anhaltenden Taktraten durchzuführen.
Wie genau ist ZYFAs FP8-Attention?
Gegenüber fp64-Attention beträgt ZYFAs FP8-Fehler 0.22x von AITERs bei Mistral-7B und 0.38x bei Qwen3-8B. Er liegt innerhalb weniger Prozent von Composable Kernel und Triton. Im vollständigen Mistral-7B beträgt die KL-Divergenz von fp64 3.4×10⁻³ mit ZYFA und 5.9×10⁻³ mit AITER. ZYFAs Ausgaben waren auch über 7,200 Launches hinweg bitweise identisch.
Der Großteil des FP8-Fehlers im Gesamtmodell kommt aus der Quantisierung von Q, K und V. Eine Hadamard-Rotation von Q und K halbiert diesen Eingabefehler ungefähr. Bei Mistral-7B fügt sie etwa 0.1% zur Attention-Zeit hinzu.
Wie schneidet ZYFA im Vergleich zu anderen Attention-Kernels ab?
| Merkmal | ZYFA FP8 | AITER FP8 | FlashAttention-3 | FlashAttention-4 |
|---|---|---|---|---|
| Hersteller | Zyphra | AMD | Dao-AILab et al. | Dao-AILab et al. |
| Ziel-GPU | AMD MI355X | AMD MI300X bis MI355X | NVIDIA H100/H800 | NVIDIA B200 (plus Hopper) |
| Durchsatz als Kernzahl | 2,672 TFLOP/s FP8 | 1,944 TFLOP/s FP8 (von Zyphra gemessen) | Nahe 1.2 PFLOP/s FP8 | 1,613 TFLOP/s BF16 |
| Anteil am Peak | 53% FP8 | 39% FP8 (von Zyphra gemessen) | Nicht offengelegt (FP8) | 71% BF16 |
| Softmax-Ansatz | Lean P, keine Exponentialfunktion | Hardware-Exponentialfunktion | Überlappung durch asynchrone Tensor Cores | Software-emulierte Exponentialfunktion |
| FP8-Genauigkeitsbehauptung | 62-78% geringerer Fehler als AITER | Baseline | 2,6x niedrigerer Fehler als FP8-Baseline | Nicht offengelegt |
| Umfang | Nur kausaler Prefill-Forward | Prefill, Decode, MLA, Paged | Vorwärts und rückwärts, FP8 vorwärts | Vorwärts und rückwärts |
| Lizenz | Apache 2.0 | MIT | BSD-3-Clause | BSD-3-Clause |
Zahlen über verschiedene Hersteller hinweg stammen aus unterschiedlichen Eingaben und Taktraten. Zyphra hat keine NVIDIA-GPUs gemessen.
Die wichtigsten Erkenntnisse
- FP8-Attention auf der MI355X ist softmax-gebunden, nicht matrixgebunden.
- Lean P ersetzt die Exponentialfunktion durch 1 Multiply-Add.
- Die Gewinne bei echten Modellen liegen bei 1,16-1,76x, kleiner als in Benchmarks gezeigt.
- Der FP8-Fehler sinkt im Vergleich zu AITER bei Head-Dim 128 um 62-78%.
- Nur Prefill: kein Decode, kein paged KV, nur MI355X.
Seht euch die Paper, den Zyphra-Blogbeitrag und das GitHub-Repoan. Außerdem könnt ihr uns gerne auf Twitter folgen und vergesst nicht, unserem 150k+ML SubReddit beizutreten und zu abonnieren: unseren Newsletter. Moment! Sind Sie auf Telegram? jetzt können Sie uns auch auf Telegram beitreten.
Möchten Sie mit uns zusammenarbeiten, um Ihr GitHub Repo ODER Ihre Hugging Face Page ODER ein Produktrelease ODER ein Webinar usw. zu bewerben? Kontaktieren Sie uns
Der Beitrag Zyphra ZYFA: FP8 FlashAttention for AMD MI355X, Up to 1.76x Faster erschien zuerst auf MarkTechPost.