Installation et utilisation de FlashAttention

Prérequis et compatibilité

  • Version CUDA et PyTorch : Assurez-vous que votre version de PyTorch est compatible avec la version de FlashAttention que vous installez. La version 2.0 de FlashAttention requiert des GPU NVIDIA de la série 30 ou supérieure (les cartes comme la 2080 ne sont pas supportées).
  • Version Python : Les versions Python 3.10 et 3.11 sont généralement bien supportées.

Installation sous Linux

L'installation directe via pip peut parfois échouer ou être très longue. Une méthode recommandée consiste à télécharger le fichier Wheel (.whl) précompilé correspondant à votre configuration.

Téléchargement du fichier Wheel

Vous pouvez trouver les versions appropriées sur la page des releases de FlashAttention. Choisissez la version qui correspond à votre version de PyTorch, CUDA et Python.

Exemple de commande pour installer un fichier Wheel spécifique (remplacez le nom du fichier par celui que vous avez téléchargé) :

pip install flash_attn-2.7.4.post1+cu12torch2.5cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
 

Configuration de PyTorch avec des miroirs

Pour accélérer le téléchargement de PyTorch, vous pouvez utiliser des miroirs comme ceux d'Alibaba :

pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 \
   --index-url https://mirrors.aliyun.com/pytorch-wheels/cu124/ \
   --extra-index-url https://mirrors.aliyun.com/pypi/simple/ \
   --no-cache-dir
 

Compatibilité des versions

Il est crucial de faire correspondre les versions de FlashAttention et de PyTorch :

  • v2.8.2 supporte jusqu'à PyTorch 2.7.
  • v2.8.0.post2 supporte jusqu'à PyTorch 2.7.
  • v2.8.1 supporte PyTorch 2.8 et 2.9, mais requiert Python 3.12.
  • v2.8.3 supporte PyTorch 2.9.

Notez que certaines versions de bibliothèques comme vLLM peuvent avoir des contraintes sur la version de FlashAttention supportée (par exemple, vLLM 0.11 pourrait ne pas supporter v2.8.3).

Vérification de l'installation

Une fois l'installation terminée, vous pouvez vérifier qu'elle a réussi.

Test d'importation

Exécutez la commande suivante dans votre terminal Python :

import flash_attn
 

Test d'utilisation

Ce script crée des tenseurs aléatoires et utilise la fonction FlashAttention pour un test rapide.

import torch
 import flash_attn
 
 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
 batch_size = 2
 seq_len = 16
 embed_dim = 128
 
 # Génération des tenseurs Q, K, V
 q = torch.randn(batch_size, seq_len, embed_dim, device=device, dtype=torch.float16)
 k = torch.randn(batch_size, seq_len, embed_dim, device=device, dtype=torch.float16)
 v = torch.randn(batch_size, seq_len, embed_dim, device=device, dtype=torch.float16)
 
 # Concaténation pour la fonction qkvpacked
 qkv_feats = torch.cat([q, k, v], dim=-1).half()
 
 # Appel de la fonction d'attention
 out = flash_attn.flash_attn_qkvpacked_func(qkv_feats)
 
 print('Output shape:', out.shape)
 

Si le script s'exécute sans erreur et affiche la forme de sortie attendue, l'installation est réussie.

Fonctionnement de FlashAttention

FlashAttention est une implémentation optimisée du mécanisme d'attention. Elle améliore l'efficacité en termes de mémoire et de calcul, particulièrement pour les longues séquences, grâce à des techniques telles que :

  • Calcul par blocs : L'attention est calculée sur des sous-ensembles de la séquence, réduisant ainsi la consommation mémoire maximale.
  • Rétrocalcul : Certaines valeurs intermédiaires sont recalculées à la demande plutôt que d'être stockées, économisant de la mémoire.
  • Optimisation des accès mémoire : Réduction des transferts de données entre les différents niveaux de mémoire de l'unité de calcul.

Cela permet de traiter des séquences beaucoup plus longues avec des ressources matérielles plus limitées par rapport aux implémentations d'attention standard.

Étiquettes: flash-attention PyTorch CUDA LLM Transformers

Publié le 8 juillet à 21h02