Makalah · arXiv 2205.14135
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
Ringkasan tiga baris
- 🎯 Exact attention standar mematerialisasi matriks perhatian di HBM GPU yang lambat, menjadikannya memory-bound dan sulit diskalakan ke konteks panjang.
- 🔧 FlashAttention menghitung exact attention di dalam satu kernel CUDA terfusi dengan men-tile input pada SRAM on-chip yang cepat, memperbarui softmax secara inkremental, dan menghitung ulang perhatian secara on-chip pada backward pass.
- 📈 FlashAttention menghasilkan percepatan pelatihan end-to-end hingga 3x pada GPT-2, 15% lebih cepat daripada rekor MLPerf 1.1 BERT-large, dan mampu meningkatkan konteks hingga 64K token.
Abstrak
Model Transformer bekerja lambat dan boros memori pada sekuens panjang, karena kompleksitas waktu dan memori dari self-attention bersifat kuadratik terhadap panjang sekuens. Metode approximate attention telah berupaya mengatasi masalah ini dengan mengorbankan kualitas model demi memangkas kompleksitas komputasi, tetapi sering kali gagal memberikan percepatan wall-clock secara nyata. Kami berpendapat bahwa prinsip penting yang terlewatkan adalah membuat algoritma perhatian bersifat IO-aware -- yakni memperhitungkan operasi baca dan tulis antar-tingkatan memori GPU. Kami mengusulkan FlashAttention, sebuah algoritma exact attention yang IO-aware dan memanfaatkan teknik tiling untuk meminimalkan jumlah baca/tulis memori antara high bandwidth memory (HBM) GPU dan SRAM on-chip GPU. Kami menganalisis kompleksitas IO FlashAttention, membuktikan bahwa metode ini membutuhkan lebih sedikit akses HBM dibandingkan attention standar, serta optimal untuk berbagai ukuran SRAM. Kami juga memperluas FlashAttention ke block-sparse attention, menghasilkan algoritma approximate attention yang lebih cepat daripada metode pendekatan yang ada saat ini. FlashAttention melatih Transformer lebih cepat dibandingkan baseline yang ada: percepatan wall-clock end-to-end sebesar 15% pada BERT-large (panjang sekuens 512) dibandingkan rekor kecepatan pelatihan MLPerf 1.1, percepatan 3 pada GPT-2 (panjang sekuens 1K), dan percepatan 2,4 pada long-range arena (panjang sekuens 1K-4K). FlashAttention dan block-sparse FlashAttention memungkinkan konteks yang lebih panjang pada Transformer, menghasilkan model dengan kualitas lebih tinggi (peningkatan perplexity 0,7 poin lebih baik pada GPT-2 dan kenaikan 6,4 poin pada klasifikasi dokumen panjang) serta kapabilitas yang sepenuhnya baru: Transformer pertama yang meraih performa di atas peluang acak pada tantangan Path-X (panjang sekuens 16K, akurasi 61,4%) dan Path-256 (panjang sekuens 64K, akurasi 63,1%).
Abstrak asli (bahasa Inggris)
Transformers are slow and memory-hungry on long sequences, since the time and memory complexity of self-attention are quadratic in sequence length. Approximate attention methods have attempted to address this problem by trading off model quality to reduce the compute complexity, but often do not achieve wall-clock speedup. We argue that a missing principle is making attention algorithms IO-aware -- accounting for reads and writes between levels of GPU memory. We propose FlashAttention, an IO-aware exact attention algorithm that uses tiling to reduce the number of memory reads/writes between GPU high bandwidth memory (HBM) and GPU on-chip SRAM. We analyze the IO complexity of FlashAttention, showing that it requires fewer HBM accesses than standard attention, and is optimal for a range of SRAM sizes. We also extend FlashAttention to block-sparse attention, yielding an approximate attention algorithm that is faster than any existing approximate attention method. FlashAttention trains Transformers faster than existing baselines: 15% end-to-end wall-clock speedup on BERT-large (seq. length 512) compared to the MLPerf 1.1 training speed record, 3 speedup on GPT-2 (seq. length 1K), and 2.4 speedup on long-range arena (seq. length 1K-4K). FlashAttention and block-sparse FlashAttention enable longer context in Transformers, yielding higher quality models (0.7 better perplexity on GPT-2 and 6.4 points of lift on long-document classification) and entirely new capabilities: the first Transformers to achieve better-than-chance performance on the Path-X challenge (seq. length 16K, 61.4% accuracy) and Path-256 (seq. length 64K, 63.1% accuracy).
Panduan membaca
Masalah dan Motivasi
Transformer memiliki kompleksitas waktu dan memori kuadratik terhadap panjang sekuens . Meskipun metode approximate attention mampu memangkas jumlah FLOP teoretis, metode tersebut sering kali gagal memberikan percepatan wall-clock karena komputasi GPU modern utamanya terhambat oleh transfer memori (IO), bukan operasi aritmetika.
Pada attention standar, komputasi , , dan menulis matriks perantara berukuran ke High Bandwidth Memory (HBM) yang lambat lalu membacanya kembali berulang kali. Hal ini menimbulkan akses HBM dan jejak memori , yang membatasi panjang context window secara praktis.
Ide Utama
- IO-Awareness: Memperhitungkan hierarki memori GPU secara eksplisit: SRAM on-chip yang cepat namun berukuran kecil (misalnya, 192 KB/SM dengan bandwidth ~19 TB/s pada A100) versus HBM yang besar namun lambat (40–80 GB dengan bandwidth 1,5–2,0 TB/s).
- Tiling (Komputasi Softmax Per Blok): Membagi input ke dalam blok-blok yang muat seluruhnya di SRAM. Dengan mencatat statistik running row-max dan normalisasi softmax, reduksi softmax dihitung secara bertahap antar-blok tanpa mematerialisasi matriks penuh di HBM.
- Komputasi Ulang pada Backward Pass: Menghindari penyimpanan matriks perhatian perantara untuk backpropagation. Sebagai gantinya, hanya output dan statistik softmax yang disimpan, lalu dan dihitung ulang secara on-chip blok demi blok di dalam SRAM selama backward pass.
- Kernel Fusion: Memfusikan operasi perkalian matriks, masking, softmax, dan dropout ke dalam satu kernel CUDA tunggal untuk mengeliminasi transfer bolak-balik yang redundan ke HBM.
Metode (beserta Persamaan Utama)
Untuk , FlashAttention menentukan ukuran blok dan , di mana adalah kapasitas SRAM.
Pelacakan Softmax Inkremental
Untuk vektor yang dipecah menjadi sub-vektor dan , pembaruan statistik berjalannya adalah:
Untuk blok keys/values ke- dan blok queries ke-:
- Hitung skor tanpa normalisasi pada SRAM: .
- Hitung statistik lokal blok: , , dan .
- Perbarui normalisasi global berjalan:
- Perbarui blok output berjalan :
Analisis Kompleksitas
- Kompleksitas IO: Attention standar membutuhkan akses HBM. FlashAttention membutuhkan akses HBM. Penulis membuktikan bahwa tidak ada algoritma exact attention yang secara asimtotik dapat mencapai akses untuk semua .
- FLOPs dan Memori: FlashAttention melakukan FLOPs (dengan sedikit tambahan FLOPs pada backward pass akibat komputasi ulang) dan hanya memerlukan memori tambahan di luar input dan output.
Ekstensi: Block-Sparse FlashAttention
Membatasi evaluasi hanya pada blok-blok bukan-nol berdasarkan mask sparsity yang telah ditentukan menghasilkan kompleksitas IO sebesar , di mana merepresentasikan proporsi blok bukan-nol.
Hasil (beserta Angka Terpenting)
- Percepatan Pelatihan:
- BERT-large (panjang sekuens 512): Melampaui rekor kecepatan pelatihan MLPerf 1.1 sebesar 15% (17,4 menit vs. 20,0 menit pada A100).
- GPT-2 (panjang sekuens 1K): Meraih percepatan hingga 3,5x dibanding HuggingFace dan hingga 1,8x dibanding Megatron-LM.
- Long-Range Arena (LRA): Memberikan percepatan 2,4x dibanding attention standar; Block-sparse FlashAttention meraih percepatan 2,8x.
- Kapabilitas Konteks Lebih Panjang:
- GPT-2 dengan konteks 4K: Berlatih lebih cepat daripada Megatron-LM pada konteks 1K sembari meningkatkan perplexity validasi sebesar 0,7 poin (17,5 vs. 18,2).
- Klasifikasi Dokumen Panjang: Penskalaan konteks dari 512 ke 16K meningkatkan micro- sebesar 4,3 poin pada MIMIC-III (52,8 ke 57,1) dan hingga 8,5 poin pada ECtHR (72,2 ke 80,7 pada 8K).
- Path-X dan Path-256: FlashAttention merupakan Transformer pertama yang mampu menyelesaikan Path-X (panjang sekuens 16K) dengan akurasi 61,4%. Block-sparse FlashAttention meraih akurasi 63,1% pada Path-256 (panjang sekuens 64K).
Keterbatasan dan Pertanyaan Terbuka
- Beban Rekayasa CUDA: Mengimplementasikan kernel IO-aware membutuhkan pemrograman CUDA tingkat rendah (low-level) khusus daripada sekadar menggunakan abstraksi PyTorch standar atau compiler, sehingga portabilitas antar-arsitektur perangkat keras menjadi tantangan tersendiri.
- Multi-GPU Attention: Jadwal IO optimal untuk satu node tidak langsung otomatis dapat diterapkan pada distributed multi-GPU attention melalui interkoneksi (NVLink, InfiniBand).
- Batas Bawah Exact Attention: Meskipun terbukti optimal untuk rentang secara umum, pembuktian batas bawah kompleksitas terparameterisasi (parameterized complexity) yang detail terhadap masih menjadi masalah terbuka.
Istilah kunci
- IO-awareness
- Prinsip algoritmik dalam merancang operasi komputasi dengan memperhitungkan proses baca dan tulis antar-tingkatan memori perangkat keras (misalnya, SRAM on-chip yang cepat vs. HBM yang lebih lambat).
- High Bandwidth Memory (HBM)
- Memori utama GPU berkapasitas besar yang menawarkan kapasitas total tinggi namun dengan bandwidth yang jauh lebih rendah dibandingkan cache on-chip.
- SRAM
- Memori scratchpad on-chip yang sangat cepat pada GPU modern, terletak di dalam setiap Streaming Multiprocessor (SM).
- Tiling
- Restrukturisasi komputasi dengan membagi matriks input menjadi blok-blok kecil yang muat di dalam SRAM dan mengakumulasikan hasilnya di setiap tahapan.
- Selective gradient checkpointing
- Teknik yang menghindari penyimpanan matriks perhatian perantara berukuran besar selama forward pass dengan cara menghitungnya kembali secara on-chip pada backward pass memakai statistik softmax yang disimpan di cache.
- Kernel fusion
- Penggabungan beberapa operasi terpisah (perkalian matriks, masking, softmax, dropout) ke dalam satu eksekusi kernel GPU untuk mengeliminasi operasi baca/tulis berulang ke HBM.
- Block-sparse FlashAttention
- Ekstensi dari FlashAttention yang hanya menghitung blok-blok bukan-nol berdasarkan mask sparsity blok, sehingga memangkas kompleksitas IO sebanding dengan rasio sparsity.
- Path-X / Path-256
- Tolok ukur penalaran visual sekuens panjang dari Long-Range Arena (panjang sekuens 16K dan 64K) di mana model Transformer sebelumnya gagal melampaui akurasi tebakan acak.
Pertanyaan
Apakah FlashAttention melakukan aproksimasi terhadap matriks perhatian?
Tidak. FlashAttention menghitung exact self-attention dengan hasil matematis yang identik dengan attention standar hingga batas presisi floating-point numerik.
Mengapa FlashAttention lebih cepat padahal melakukan lebih banyak FLOPs pada backward pass?
Karena attention standar bersifat memory-bound; mentransfer matriks bolak-balik antara HBM dan SRAM memakan waktu wall-clock yang jauh lebih besar dibandingkan menjalankan operasi aritmetika tambahan langsung pada SRAM yang cepat.
Memori tambahan apa saja yang disimpan oleh FlashAttention untuk backward pass?
FlashAttention hanya menyimpan output forward pass , faktor normalisasi softmax dan (hanya membutuhkan memori tambahan ), serta state dari pseudo-random number generator untuk mereproduksi mask dropout secara on-chip.
Bagaimana perbandingan kompleksitas IO FlashAttention terhadap attention standar?
Attention standar membutuhkan akses HBM, sedangkan FlashAttention hanya memerlukan akses, di mana adalah ukuran SRAM dan adalah dimensi head.
Ulasan di halaman ini ditulis oleh AI dari makalah dan mungkin mengandung kesalahan. Baca makalahnya untuk detail.