FlashAttention-2 (PL)
FlashAttention-2 — to ulepszony algorytm przeznaczony do obliczania mechanizmu uwagi (attention) w dużych modelach językowych (LLM). Algorytm został opracowany przez Tri Dao i badaczy ze Uniwersytetu Stanforda i przedstawiony w lipcu 2023 roku[1]. Jego kluczowym celem jest znaczące przyspieszenie trenowania i inferencji modeli-transformerów dzięki efektywniejszemu wykorzystaniu zasobów sprzętowych GPU, przy jednoczesnym zachowaniu pełnej identyczności obliczeń ze standardowym mechanizmem uwagi, to znaczy bez utraty dokładności.
FlashAttention-2 jest logiczną kontynuacją algorytmu FlashAttention przedstawionego przez ten sam zespół w 2022 roku. Nowa wersja rozwiązuje problem niepełnego wykorzystania GPU, który był obserwowany u poprzednika, i osiąga niemal dwukrotny wzrost szybkości w porównaniu z pierwszą wersją.
Przesłanki: problem mechanizmu uwagi w transformerach
Standardowy mechanizm samouwagi (self-attention) stanowi wąskie gardło podczas pracy z długimi sekwencjami tekstu w transformerach. Jego złożoność obliczeniowa i zużycie pamięci rosną kwadratowo (O(N²)) w zależności od długości sekwencji (N), co nakłada poważne ograniczenia na maksymalną długość kontekstu i skalowalność LLM[1].
Dla rozwiązania tego problemu w 2022 roku przedstawiono algorytm FlashAttention[2]. Jego kluczowe idee:
- Uwzględnienie hierarchii pamięci GPU (IO-awareness): Algorytm minimalizuje kosztowne operacje odczytu/zapisu między wolną pamięcią GPU (HBM) a szybką pamięcią statyczną (SRAM) na chipie.
- Przetwarzanie blokowe (tiling): Obliczenia są podzielone na małe bloki (kafelki), które są przetwarzane w szybkiej SRAM, co pozwala uniknąć materializacji pełnej macierzy uwagi w pamięci.
Pozwoliło to osiągnąć liniowy wzrost zużycia pamięci (O(N)) i przyspieszenie 2–4-krotne w porównaniu ze standardowymi implementacjami[2]. FlashAttention zyskał szerokie zastosowanie i przyczynił się do pojawienia się modeli ze znacznie zwiększonym kontekstem, na przykład z 2–4 tys. tokenów (GPT-3) do 128 tys. (GPT-4) i więcej[3]. Na przykład w modelu Falcon-40B zastosowanie FlashAttention przyspieszyło inferencję 3-krotnie, a ogólną wydajność generowania — 5-krotnie w porównaniu z GPT-3[4].
Rozwój i cele FlashAttention-2
Niemimo sukcesu, pierwsza wersja FlashAttention nie wykorzystywała w pełni zasobów obliczeniowych GPU. Na kartach graficznych NVIDIA A100 wydajność osiągała jedynie 25–40% teoretycznego maksimum (FLOPs/s)[1]. Główną przyczyną było nieoptymalne obciążenie procesorów strumieniowych (Streaming Multiprocessors) i nadmiarowe operacje na pamięci współdzielonej[5].
Celem FlashAttention-2 stało się dalsze przyspieszenie obliczeń poprzez efektywniejsze zrównoleglenie pracy i minimalizację operacji pomocniczych. Algorytm został całkowicie przepisany z użyciem niskopoziomowych prymitywów biblioteki NVIDIA CUTLASS 3.x w celu osiągnięcia maksymalnej wydajności[6].
Architektura techniczna i zasady działania
FlashAttention-2 wprowadza trzy kluczowe usprawnienia w celu zwiększenia równoległości i efektywności[1]:
1. Minimalizacja operacji nie-macierzowych
Algorytm ogranicza liczbę pomocniczych operacji zmiennoprzecinkowych niebędących mnożeniem macierzy (non-matmul FLOPs). Ponieważ rdzenie tensorowe GPU są zoptymalizowane właśnie pod operacje macierzowe (GEMM) i wykonują je nawet 16 razy szybciej, zmiana ta pozwala przez większość czasu wykorzystywać najbardziej wydajne bloki GPU.
2. Ulepszony równoległość
W oryginalnym FlashAttention praca nad jedną "głową" uwagi nie była zrównoleglana, co prowadziło do przestojów przy długich sekwencjach i małych rozmiarach batcha. FlashAttention-2 wprowadza równoległość między blokami: teraz obliczenia dla jednej głowy uwagi są rozdzielane między różne procesory strumieniowe GPU, co znacznie zwiększa ich obciążenie.
3. Zoptymalizowany podział pracy wewnątrz bloku
Na poziomie jednego bloku obliczeniowego praca została redystrybuowana między grupy wątków (warps) w celu zmniejszenia wymiany danych przez pamięć współdzieloną (shared memory). Zmniejsza to liczbę nadmiarowych operacji odczytu/zapisu potrzebnych do normalizacji Softmax.
Wydajność i efektywność
Dzięki ulepszeniom architektonicznym FlashAttention-2 wykazuje znaczący wzrost wydajności:
- Dwukrotne przyspieszenie: Algorytm działa około 2 razy szybciej w porównaniu z pierwszą wersją FlashAttention[1].
- Wysokie wykorzystanie GPU: Na GPU NVIDIA A100 osiągana jest 50–73% teoretycznej maksymalnej przepustowości (TFLOPs), co zbliża się do efektywności zoptymalizowanych operacji mnożenia macierzy (GEMM)[1].
- Rekordowa szybkość obliczeń:
Taki wzrost wydajności pozwala na przykład trenować model z oknem kontekstowym 16k tokenów w tym samym czasie, jaki wcześniej był potrzebny dla okna 8k tokenów[5]. Co istotne, algorytm pozostaje dokładny i deterministyczny, więc jego zastosowanie nie wpływa na jakość predykcji modelu[8].
Zastosowanie i integracja z ekosystemem
FlashAttention-2 szybko stał się standardowym narzędziem w ekosystemie LLM. Jest zintegrowany z wieloma popularnymi frameworkami i bibliotekami:
- PyTorch: Natywne wsparcie.
- Hugging Face Transformers: Wsparcie włączane jest parametrem `attn_implementation="flash_attention_2"` podczas ładowania modelu[9]. Kompatybilny z dziesiątkami architektur (GPT, Llama, Falcon, BERT i inne)[10].
- TensorRT-LLM, xFormers i Triton: Algorytm jest zaimplementowany dla tych platform, co zapewnia szerokie zastosowanie[7].
Integracja pozwala łatwo łączyć FlashAttention-2 z innymi metodami optymalizacji, takimi jak kwantyzacja (GPTQ, QLoRA) i efektywne fine-tuning (PEFT)[9].
Porównanie z kolejnymi wersjami
FlashAttention-3
Badania w dziedzinie optymalizacji mechanizmu uwagi są kontynuowane. W lipcu 2024 roku Tri Dao przedstawił FlashAttention-3, nastawiony na wykorzystanie możliwości architektury GPU NVIDIA Hopper (H100/H200). Kluczowe nowości[3]:
- Wsparcie FP8: Wykorzystuje 8-bitowe obliczenia zmiennoprzecinkowe w celu dalszego przyspieszenia.
- Operacje asynchroniczne: Efektywniej wykorzystuje asynchroniczne możliwości GPU.
FlashAttention-3 zapewnia przyspieszenie 1,5–2 razy w porównaniu z FlashAttention-2 na GPU H100, osiągając wydajność do 740 TFLOP/s (75% teoretycznego maksimum)[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.
Przypisy
- ↑ 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]