FlashAttention-2 (FR)
FlashAttention-2 est un algorithme avancé conçu pour le calcul du mécanisme d'attention (attention) dans les grands modèles de langage (LLM). L'algorithme a été développé par Tri Dao et des chercheurs de l'Université de Stanford, et a été présenté en juillet 2023[1]. Son objectif principal est d'accélérer considérablement l'entraînement et l'inférence des modèles Transformer en utilisant plus efficacement les ressources matérielles des GPU, tout en conservant une identité de calcul complète avec le mécanisme d'attention standard, c'est-à-dire sans aucune perte de précision.
FlashAttention-2 est la suite logique de l'algorithme FlashAttention, présenté par la même équipe en 2022. La nouvelle version résout le problème de la sous-utilisation du GPU observé chez son prédécesseur et atteint une vitesse presque deux fois supérieure à celle de la première version.
Contexte : le problème de l'attention dans les Transformers
Le mécanisme d'auto-attention (self-attention) standard constitue un goulot d'étranglement lors du traitement de longues séquences de texte dans les Transformers. Sa complexité de calcul et sa consommation de mémoire augmentent de manière quadratique (O(N²)) en fonction de la longueur de la séquence (N), ce qui impose de sérieuses limitations à la longueur maximale du contexte et à la scalabilité des LLM[1].
Pour résoudre ce problème, l'algorithme FlashAttention a été introduit en 2022[2]. Ses idées clés sont :
- Prise en compte de la hiérarchie mémoire du GPU (IO-awareness) : L'algorithme minimise les opérations coûteuses de lecture/écriture entre la mémoire lente du GPU (HBM) et la mémoire statique rapide (SRAM) sur la puce.
- Traitement par blocs (tiling) : Les calculs sont divisés en petits blocs (tuiles) qui sont traités dans la SRAM rapide, ce qui évite de matérialiser la matrice d'attention complète en mémoire.
Cela a permis d'atteindre une consommation de mémoire à croissance linéaire (O(N)) et une accélération de 2 à 4 fois par rapport aux implémentations standard[2]. FlashAttention a été largement adopté et a contribué à l'émergence de modèles avec un contexte considérablement étendu, passant par exemple de 2 000 à 4 000 tokens (GPT-3) à 128 000 (GPT-4) et plus[3]. Ainsi, dans le modèle Falcon-40B, l'utilisation de FlashAttention a accéléré l'inférence par 3 et les performances globales de génération par 5 par rapport à GPT-3[4].
Développement et objectifs de FlashAttention-2
Malgré son succès, la première version de FlashAttention n'utilisait pas pleinement les ressources de calcul du GPU. Sur les cartes graphiques NVIDIA A100, les performances n'atteignaient que 25 à 40 % du maximum théorique (FLOPs/s)[1]. La raison principale était une charge non optimale des multiprocesseurs de flux (Streaming Multiprocessors) et des opérations redondantes avec la mémoire partagée[5].
L'objectif de FlashAttention-2 était d'accélérer davantage les calculs grâce à une parallélisation plus efficace du travail et à la minimisation des opérations auxiliaires. L'algorithme a été entièrement réécrit en utilisant les primitives de bas niveau de la bibliothèque NVIDIA CUTLASS 3.x pour atteindre une performance maximale[6].
Architecture technique et principes de fonctionnement
FlashAttention-2 introduit trois améliorations clés pour augmenter le parallélisme et l'efficacité[1] :
1. Minimisation des opérations non matricielles
L'algorithme réduit le nombre d'opérations auxiliaires en virgule flottante qui ne sont pas des multiplications de matrices (non-matmul FLOPs). Étant donné que les cœurs Tensor des GPU sont spécifiquement optimisés pour les opérations matricielles (GEMM) et les exécutent jusqu'à 16 fois plus vite, cette modification permet d'utiliser les unités les plus performantes du GPU la plupart du temps.
2. Parallélisme amélioré
Dans la version originale de FlashAttention, le travail sur une seule « tête » d'attention n'était pas parallélisé, ce qui entraînait des temps d'inactivité pour les longues séquences et les petites tailles de lot (batch). FlashAttention-2 introduit une parallélisation inter-blocs : désormais, les calculs pour une seule tête d'attention sont répartis entre différents multiprocesseurs de flux du GPU, ce qui augmente considérablement leur taux d'utilisation.
3. Répartition optimisée du travail au sein d'un bloc
Au niveau d'un seul bloc de calcul, le travail a été redistribué entre les groupes de threads (warps) pour réduire les échanges de données via la mémoire partagée (shared memory). Cela diminue le nombre d'opérations de lecture/écriture redondantes nécessaires à la normalisation Softmax.
Performance et efficacité
Grâce à ses améliorations architecturales, FlashAttention-2 démontre une augmentation significative des performances :
- Accélération par deux : L'algorithme est environ 2 fois plus rapide que la première version de FlashAttention[1].
- Utilisation élevée du GPU : Sur le GPU NVIDIA A100, il atteint 50 à 73 % du débit théorique maximal (TFLOPs), ce qui est proche de l'efficacité des opérations de multiplication de matrices (GEMM) optimisées[1].
- Vitesse de calcul record :
- Sur le GPU A100, une vitesse allant jusqu'à 225 TFLOP/s est atteinte dans le cycle d'entraînement de bout en bout d'un modèle de type GPT, ce qui correspond à 72 % d'utilisation des unités de calcul. En comparaison, l'attention standard dans les mêmes conditions chargeait le GPU à moins de 100 TFLOP/s[7].
- Sur le GPU H100, la performance atteint 335 TFLOP/s[7].
Un tel gain de performance permet, par exemple, d'entraîner un modèle avec une fenêtre de contexte de 16k tokens dans le même temps qu'il fallait auparavant pour une fenêtre de 8k tokens[5]. Il est important de noter que l'algorithme reste exact et déterministe, son application n'affecte donc pas la qualité des prédictions du modèle[8].
Application et intégration dans l'écosystème
FlashAttention-2 est rapidement devenu un outil standard dans l'écosystème des LLM. Il est intégré dans de nombreux frameworks et bibliothèques populaires :
- PyTorch : Prise en charge native.
- Hugging Face Transformers : Le support est activé avec le paramètre `attn_implementation="flash_attention_2"` lors du chargement du modèle[9]. Il est compatible avec des dizaines d'architectures (GPT, Llama, Falcon, BERT, etc.)[10].
- TensorRT-LLM, xFormers et Triton : L'algorithme est implémenté pour ces plateformes, assurant une large application[7].
L'intégration permet de combiner facilement FlashAttention-2 avec d'autres méthodes d'optimisation, telles que la quantification (GPTQ, QLoRA) et le fine-tuning efficace (PEFT)[9].
Comparaison avec les versions ultérieures
FlashAttention-3
La recherche dans le domaine de l'optimisation de l'attention se poursuit. En juillet 2024, Tri Dao a présenté FlashAttention-3, visant à exploiter les capacités de l'architecture GPU NVIDIA Hopper (H100/H200). Les principales innovations sont[3] :
- Support de FP8 : Utilise des calculs en virgule flottante 8 bits pour une accélération supplémentaire.
- Opérations asynchrones : Utilise plus efficacement les capacités asynchrones du GPU.
FlashAttention-3 offre une accélération de 1,5 à 2 fois par rapport à FlashAttention-2 sur les GPU H100, atteignant des performances allant jusqu'à 740 TFLOP/s (75 % du maximum théorique)[11].
Littérature
- 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.
Références
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Dao, Tri. « FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning ». arXiv:2307.08691 [cs.LG], 17 juillet 2023. [1]
- ↑ 2.0 2.1 « Optimizing LLMs for Speed and Memory ». Hugging Face Documentation. [2]
- ↑ 3.0 3.1 Dao, Tri. « 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 Dao, Tri. « FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning » (PDF). arXiv:2307.08691. [7]
- ↑ Raschka, Sebastian. « Llama 2 and FlashAttention 2 ». Ahead of AI Magazine. [8]
- ↑ 9.0 9.1 Belkada, Younes. « Faster and more memory efficient models with Flash Attention 2! ». LinkedIn. [9]
- ↑ « GPU inference ». Hugging Face Documentation. [10]
- ↑ Dao, Tri, et al. « FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision ». arXiv:2407.08608 [cs.LG], 11 juillet 2024. [11]