FlashAttention-2 (CS)
FlashAttention-2 — je zdokonalený algoritmus určený pro výpočet mechanismu attention ve velkých jazykových modelech (LLM). Algoritmus byl vyvinut Tri Dao a výzkumníky ze Stanfordské univerzity a představen v červenci 2023[1]. Jeho hlavním cílem je výrazně urychlit trénování a inferenci (odvozování) transformer modelů prostřednictvím efektivnějšího využití hardwarových zdrojů GPU při zachování plné identity výpočtů se standardním mechanismem attention, tedy bez ztráty přesnosti.
FlashAttention-2 je logickým pokračováním algoritmu FlashAttention, který stejný tým představil v roce 2022. Nová verze řeší problém neúplného vytížení GPU, který byl pozorován u předchůdce, a dosahuje téměř dvojnásobného nárůstu rychlosti ve srovnání s první verzí.
Předpoklady: problém attention v transformerech
Standardní mechanismus self-attention představuje úzké místo při práci s dlouhými textovými sekvencemi v transformerech. Jeho výpočetní složitost a spotřeba paměti rostou kvadraticky (O(N²)) v závislosti na délce sekvence (N), což klade vážná omezení na maximální délku kontextu a škálovatelnost LLM[1].
Pro řešení tohoto problému byl v roce 2022 představen algoritmus FlashAttention[2]. Jeho klíčové myšlenky:
- Zohledňování hierarchie paměti GPU (IO-awareness): Algoritmus minimalizuje nákladné operace čtení/zápisu mezi pomalou pamětí GPU (HBM) a rychlou statickou pamětí (SRAM) na čipu.
- Blokové zpracování (tiling): Výpočty jsou rozděleny do malých bloků (dlaždic), které jsou zpracovávány v rychlé SRAM, čímž se zabraňuje materializaci celé matice attention v paměti.
To umožnilo dosáhnout lineárního růstu spotřeby paměti (O(N)) a zrychlení 2–4× ve srovnání se standardními implementacemi[2]. FlashAttention se rozšířil a přispěl ke vzniku modelů s výrazně zvětšeným kontextem, například z 2–4 tisíc tokenů (GPT-3) na 128 tisíc (GPT-4) a více[3]. Například v modelu Falcon-40B použití FlashAttention urychlilo inferenci 3×, a celkový výkon generování 5× ve srovnání s GPT-3[4].
Vývoj a cíle FlashAttention-2
Navzdory úspěchu první verze FlashAttention nevyužívala výpočetní zdroje GPU plně. Na grafických kartách NVIDIA A100 výkon dosahoval pouze 25–40 % teoretického maxima (FLOPs/s)[1]. Hlavní příčinou bylo neoptimální vytížení Streaming Multiprocessorů a nadbytečné operace se sdílenou pamětí[5].
Cílem FlashAttention-2 bylo další zrychlení výpočtů prostřednictvím efektivnějšího paralelizování práce a minimalizace pomocných operací. Algoritmus byl kompletně přepsán s využitím nízkoúrovňových primitiv knihovny NVIDIA CUTLASS 3.x pro dosažení maximálního výkonu[6].
Technická architektura a principy fungování
FlashAttention-2 zavádí tři klíčová vylepšení pro zvýšení paralelismu a efektivity[1]:
1. Minimalizace nematricových operací
Algoritmus snižuje počet pomocných operací s plovoucí desetinnou čárkou, které nejsou maticovým násobením (non-matmul FLOPs). Jelikož tensorová jádra GPU jsou optimalizována právě pro maticové operace (GEMM) a provádějí je až 16× rychleji, tato změna umožňuje většinu času využívat nejvýkonnější bloky GPU.
2. Vylepšený paralelismus
V originálním FlashAttention nebyla práce na jedné „hlavě" attention paralelizována, což vedlo k prostojům při dlouhých sekvencích a malých velikostech dávky. FlashAttention-2 zavádí meziblokový paralelismus: výpočty pro jednu hlavu attention jsou nyní distribuovány mezi různé Streaming Multiprocessory GPU, což výrazně zvyšuje jejich vytížení.
3. Optimalizované rozdělení práce uvnitř bloku
Na úrovni jednoho výpočetního bloku byla práce přerozdělena mezi skupiny vláken (warps) za účelem snížení výměny dat přes sdílenou paměť (shared memory). To snižuje počet nadbytečných operací čtení/zápisu potřebných pro normalizaci Softmax.
Výkon a efektivita
Díky architektonickým vylepšením FlashAttention-2 vykazuje výrazný nárůst výkonu:
- Dvojnásobné zrychlení: Algoritmus pracuje přibližně 2× rychleji ve srovnání s první verzí FlashAttention[1].
- Vysoké vytížení GPU: Na GPU NVIDIA A100 je dosaženo 50–73 % teoretické maximální propustnosti (TFLOPs), což se blíží efektivitě optimalizovaných operací maticového násobení (GEMM)[1].
- Rekordní rychlost výpočtů:
Takový nárůst výkonu umožňuje například trénovat model s kontextovým oknem 16 k tokenů za stejný čas, který byl dříve potřeba pro okno 8 k tokenů[5]. Důležité je, že algoritmus zůstává přesný a deterministický, takže jeho použití nemá vliv na kvalitu předpovědí modelu[8].
Využití a integrace do ekosystému
FlashAttention-2 se rychle stal standardním nástrojem v ekosystému LLM. Je integrován do mnoha populárních frameworků a knihoven:
- PyTorch: Nativní podpora.
- Hugging Face Transformers: Podpora se aktivuje parametrem `attn_implementation=\"flash_attention_2\"` při načítání modelu[9]. Kompatibilní s desítkami architektur (GPT, Llama, Falcon, BERT a dalšími)[10].
- TensorRT-LLM, xFormers a Triton: Algoritmus je implementován pro tyto platformy, což zajišťuje jeho široké využití[7].
Integrace umožňuje snadno kombinovat FlashAttention-2 s dalšími metodami optimalizace, jako je kvantizace (GPTQ, QLoRA) a efektivní fine-tuning (PEFT)[9].
Srovnání s následnými verzemi
FlashAttention-3
Výzkum v oblasti optimalizace attention pokračuje. V červenci 2024 Tri Dao představil FlashAttention-3, zaměřený na využití možností architektury GPU NVIDIA Hopper (H100/H200). Klíčové novinky[3]:
- Podpora FP8: Využívá 8bitové výpočty s plovoucí desetinnou čárkou pro další zrychlení.
- Asynchronní operace: Efektivněji využívá asynchronní možnosti GPU.
FlashAttention-3 poskytuje zrychlení 1,5–2× ve srovnání s FlashAttention-2 na GPU H100 a dosahuje výkonu až 740 TFLOP/s (75 % teoretického maxima)[11].
Literatura
- Dao, T. (2023). FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv:2307.08691.
- Dao, T. et al. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv:2205.14135.
- Shah, J. et al. (2024). FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision. arXiv:2407.08608.
- Kwon, W. et al. (2023). Efficient Memory Management for Large Language Model Serving with PagedAttention. arXiv:2309.06180.
- Ye, Z. et al. (2025). FlashInfer: Efficient and Customizable Attention Engine for LLM Inference Serving. arXiv:2501.01005.
- Chen, Y. et al. (2023). FlashDecoding++: Faster Large Language Model Inference on GPUs. arXiv:2311.01282.
- Liu, Y. et al. (2024). FastAttention: Extending FlashAttention-2 to NPUs and Low-Resource GPUs. OpenReview: 76NYyOrnfk.
- Dege, P. et al. (2025). FlashMLA-ETAP: Efficient Transpose Attention Pipeline for Accelerating MLA Inference on NVIDIA H20 GPUs. arXiv:2506.01969.
- Wang, G. et al. (2024). FlashMask: Efficient and Rich Mask Extension of FlashAttention. OpenReview: rog0J435OO.
- Abbott, V.; Zardini, G. (2025). FlashAttention on a Napkin: A Diagrammatic Approach to Deep Learning IO-Awareness. arXiv:2412.03317.
Poznámky
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Дао, Три. «FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning». arXiv:2307.08691 [cs.LG], 17 июля 2023 г. [1]
- ↑ 2.0 2.1 «Optimizing LLMs for Speed and Memory». Hugging Face Documentation. [2]
- ↑ 3.0 3.1 Дао, Три. «FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision». Tri Dao's Blog. [3]
- ↑ «FlashAttention vs FlashAttention-2 - an Analysis». E2E Networks Blog. [4]
- ↑ 5.0 5.1 «FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning». OpenReview. [5]
- ↑ «FlashAttention-2». Hazy Research, Stanford University. [6]
- ↑ 7.0 7.1 7.2 Дао, Три. «FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning» (PDF). arXiv:2307.08691. [7]
- ↑ Рашка, Себастьян. «Llama 2 and FlashAttention 2». Ahead of AI Magazine. [8]
- ↑ 9.0 9.1 Белькада, Юнес. «Faster and more memory efficient models with Flash Attention 2!». LinkedIn. [9]
- ↑ «GPU inference». Hugging Face Documentation. [10]
- ↑ Дао, Три, и др. «FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision». arXiv:2407.08608 [cs.LG], 11 июля 2024 г. [11]