Guide de programmation pour la programmation GPU par tuiles de NVIDIA : de cuTile et des noyaux Triton à Flash Attention

Les développements se succèdent à un rythme impressionnant dans l’IA.

Guide de programmation pour la programmation GPU par tuiles de NVIDIA : de cuTile et des noyaux Triton à Flash Attention

Dans ce tutoriel, nous explorons la programmation TileGymGPU en créant un workflow Colab concret capable de fonctionner sur différents types de matériel. Nous commençons par analyser l’environnement CUDA disponible, en vérifiant si NVIDIA cuTile s’exécute directement, et en recourant à Triton lorsque les GPU Colab standard ne disposent pas de la pile cuTile requise. Grâce à cette configuration, nous découvrons le principe fondamental de la programmation par tuiles : au lieu d’écrire du code pour un thread à la fois, nous traitons des tuiles de informations entières, les chargeons dans le noyau, effectuons des calculs dessus de manière efficient, puis réenregistrons les résultats. Nous utilisons ce modèle pour implémenter l’addition vectorielle, la fonction GELU fusionnée, la fonction softmax ligne par ligne, la multiplication matricielle par tuiles et l’attention flash, tout en comparant chaque résultat à celui de PyTorch pour en vérifier l’exactitude et réaliser des tests de performance.

Notons par ailleurs, nous commençons par configurer l’environnement, importer les bibliothèques nécessaires et vérifier si CUDA est disponible sur le runtime actuel. Nous examinons les capacités du GPU, la version de CUDA et la configuration de PyTorch afin de déterminer si le backend cuTile réel est utilisable. Nous sélectionnons ensuite le backend d’exécution actif, expliquons le modèle de programmation par tuiles et stockons des chaînes de source de noyaux cuTile de référence à des fins de comparaison.

Dans le même temps, nous définissons les implémentations Triton pour l’addition vectorielle, la fonction GELU fusionnée, le softmax par ligne, la multiplication matricielle en mosaïque et l’attention flash. Nous exprimons chaque opération à l’aide de chargements, de calculs, de réductions, de produits scalaires et de stockages au niveau des tuiles, afin que le GPU puisse traiter efficacement les blocs de données. Nous fournissons également des fonctions de repli en PyTorch pur afin que le tutoriel puisse toujours s’exécuter lorsque Triton ou un backend GPU pris en charge n’est pas disponible.

Nous développons des outils d’analyse comparative et de vérification de l’exactitude qui comparent chaque noyau personnalisé à une implémentation de référence de PyTorch. Nous exécutons ensuite le noyau d’addition vectorielle et vérifions que le résultat, calculé par tuiles, correspond à l’addition standard de PyTorch. Nous testons également le noyau GELU fusionné, en montrant comment la multiplication, l’ajout d’un biais et l’activation GELU sont combinés en un seul passage efficace.

Précisons, nous exécutons le noyau softmax ligne par ligne et le comparons à celui de PyTorch afin de vérifier l’exactitude numérique. Nous effectuons ensuite une multiplication matricielle par tuiles, en multipliant des blocs de matrices et en accumulant les retombées le long de la dimension K. Nous comparons ces noyaux à ceux de PyTorch afin d’observer les résultats de l’exécution par tuiles sur le backend actif.

Nous terminons par le noyau d’attention « flash », qui utilise la fonction softmax en ligne pour calculer l’attention sans matérialiser la matrice d’attention complète. Nous comparons ses retombées à ceux de l’attention par produit scalaire de PyTorch et évaluons les performances techniques en termes de temps d’exécution lorsqu’un backend GPU est accessible. Nous terminons ce tutoriel en résumant le backend que nous avons utilisé et les principaux concepts de programmation des tuiles que nous avons appris.

En conclusion, nous avons compris comment les noyaux basés sur des tuiles transposent des opérations mathématiques de haut niveau en schémas d’exécution efficaces sur le GPU. Nous avons vu comment la fusion réduit le trafic mémoire, comment les réductions par tuile stabilisent et optimisent le softmax, comment la multiplication matricielle par tuiles s’accumule sur des blocs K, et comment l’attention flash utilise le softmax en ligne pour éviter de matérialiser la matrice d’attention complète. Nous avons également ouvert la voie à l’expérimentation : nous avons exécuté des noyaux Triton sur des GPU Colab courants aujourd’hui, tout en observant comment ces mêmes concepts se traduisent en noyaux cuTile réels sur des systèmes plus récents équipés de CUDA 13.1+ : Ampere, Ada ou Blackwell.

Vous souhaitez collaborer avec nous pour promouvoir votre dépôt GitHub, votre page Hugging Face, le lancement d’un produit, un webinaire, etc. ? Contactez-nous.

Une affaire qui méritera assurément d’être suivie de près.

À découvrir aussi :


Information publiée en premier lieu par MarkTechPost : MarkTechPost