Apa itu FlashAttention?
FlashAttention adalah algoritma attention eksak yang menghitung softmax(QKᵀ/√d)V dalam tile kecil yang disimpan di memori GPU di dalam chip, sehingga matriks skor N×N penuh tidak pernah ditulis ke memori lambat di luar chip. Output-nya sama dengan attention standar. Keuntungannya datang dari byte yang dipindahkan lebih sedikit, bukan dari aritmetika yang lebih sedikit.
Attention adalah bagian transformer yang biayanya tumbuh seiring kuadrat panjang sequence, dan di GPU bentuk standarnya dibatasi oleh lalu lintas memori. FlashAttention mempercepat training GPT-2 sekitar 3× pada 1K token dan memangkas memori tambahan attention dari kuadratik menjadi linear terhadap panjang sequence. Kernel-nya kini dipakai di balik scaled_dot_product_attention milik PyTorch, Hugging Face Transformers, vLLM, dan sebagian besar stack training LLM.
Ide utama
- Attention standar dibatasi oleh lalu lintas memori, karena ia menulis dan membaca matriks skor N×N lewat HBM beberapa kali.
- FlashAttention memecah Q, K, dan V menjadi tile yang muat di SRAM dalam chip, lalu menggabungkan seluruh attention ke dalam satu kernel.
- Online softmax menyimpan maksimum dan jumlah berjalan per baris, sehingga softmax bisa dihitung per tile dan di-rescale di akhir.
- Akses HBM turun dari Θ(Nd + N²) ke Θ(N²d²/M), dan memori tambahan turun dari O(N²) ke O(N).
- FlashAttention eksak: output-nya sama dengan attention standar, kecuali pembulatan floating-point.
- FlashAttention-2 memperbaiki paralelisme dan pembagian kerja, dan FlashAttention-3 menyasar GPU Hopper dengan asinkroni dan FP8.
Pertanyaan umum
Apakah model harus di-train ulang untuk memakai FlashAttention?
Tidak. FlashAttention menghitung fungsi yang sama dengan attention standar, jadi weight yang ada tetap berfungsi tanpa perubahan. Mengganti kernel attention adalah pilihan saat runtime, sering kali cukup dengan satu flag. Output-nya bisa berbeda di bit terakhir karena urutan penjumlahannya berbeda.
Kenapa FlashAttention lebih cepat padahal FLOP-nya lebih banyak?
Di GPU modern, attention standar menghabiskan sebagian besar waktunya menunggu memori, bukan mengerjakan aritmetika. FlashAttention menghitung ulang matriks skor di backward pass, bukan menyimpannya. Ini menambah FLOP, tetapi menghapus jauh lebih banyak byte lalu lintas HBM. Karena memori yang menjadi hambatan, total waktunya turun.
Apakah FlashAttention membantu saat decoding LLM?
Prefill, saat seluruh prompt diproses sekaligus, paling diuntungkan karena membangun matriks skor besar. Saat decode, setiap langkah punya satu query per sequence, jadi matriks skornya hanya satu baris dan biaya utamanya adalah membaca KV cache. Varian seperti Flash-Decoding memecah pembacaan itu ke banyak thread block agar seluruh GPU terpakai.
GPU apa saja yang mendukung FlashAttention?
FlashAttention-2 berjalan di GPU NVIDIA Ampere, Ada, dan Hopper seperti A100, RTX 4090, dan H100, dan versi aslinya juga mencakup kartu Turing yang lebih lama. FlashAttention-3 ditulis untuk Hopper. GPU AMD punya port ROCm, dan PyTorch beralih ke kernel lain ketika tidak ada kernel FlashAttention yang berlaku.
Penjelasan terkait
- Cara Kerja Self-Attention · Query, key, dan value, inti dari self-attention
- KV Cache · Kenapa LLM menyimpan key dan value di cache, dan berapa biayanya
- Softmax, Logit, dan Temperature · Mengubah skor mentah menjadi probabilitas
- Multi-Head Attention · Attention head paralel yang mempelajari pola berbeda
- Arsitektur Transformer · Panduan visual untuk paper "Attention Is All You Need"
- Quantization · Mengecilkan weight model menjadi 8 dan 4 bit
Referensi
- Dao et al. (2022), "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness"
- Dao (2023), "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning"
- Shah et al. (2024), "FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision"
- Milakov and Gimelshein (2018), "Online normalizer calculation for softmax"
Terakhir diperbarui