High-Performance FP16 General Matrix Multiplication on NVIDIA Ada Lovelace via CUTLASS and WMMA: A Benchmark and Pipeline-Depth Analysis
Cet article évalue les performances du GEMM en FP16 sur la carte NVIDIA Ada Lovelace RTX 4060 à travers cuBLAS, CUTLASS et des implémentations WMMA personnalisées, révélant qu'une profondeur de pipeline de trois avec une géométrie de tuile spécifique atteint 52,7 % du débit de crête tout en démontrant que la pression sur la mémoire partagée, plutôt que la profondeur du pipeline, est le principal goulot d'étranglement limitant toute optimisation supplémentaire.
Article original sous licence CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète
Imaginez que vous avez une cuisine ultra-rapide (un GPU) avec une équipe de chefs spécialisés appelés Tensor Cores. Ces chefs sont incroyablement rapides pour hacher et mélanger les ingrédients (la multiplication de matrices) pour un banquet géant (le deep learning). La cuisine de la nouvelle cuisinière « Ada Lovelace » (une carte graphique RTX 4060) est théoriquement capable de servir 60,55 TFLOPS (ce qui signifie 60,55 billions d'opérations mathématiques par seconde).
Mais attention : ce n'est pas parce que les chefs peuvent hacher aussi vite qu'ils le font réellement. Ils doivent souvent attendre que les ingrédients soient livrés depuis le garde-manger.
La grande expérience : comment garder les chefs occupés
Les chercheurs ont voulu découvrir la meilleure façon d'organiser la cuisine pour que les chefs ne s'arrêtent jamais de hacher. Ils ont testé trois façons différentes de faire fonctionner la cuisine :
- La boîte noire (cuBLAS) : Une recette pré-emballée et à code source fermé provenant de NVIDIA, qui fonctionne généralement très bien mais qui ne vous permet pas d'en modifier les détails.
- Le plan ouvert (CUTLASS) : Un outil flexible et open-source qui vous permet de construire votre propre agencement de cuisine à partir de zéro.
- L'approche DIY (WMMA) : Une cuisine construite sur mesure où vous contrôlez chaque mouvement des chefs, mais qui est beaucoup plus difficile à bâtir.
Ils ont mis en place un défi de cuisine colossal avec des ingrédients de taille 8192 × 8192 et ont testé différentes « profondeurs de pipeline ». Considérez la profondeur de pipeline comme le nombre de plateaux d'ingrédients que la cuisine garde prêts.
- Profondeur de pipeline 2 : Seulement 2 plateaux prêts.
- Profondeur de pipeline 3 : 3 plateaux prêts.
- Profondeur de pipeline 4 : 4 plateaux prêts.
La sagesse commune (et un modèle mathématique simple) suggérait que plus de plateaux = plus de vitesse. La logique était la suivante : « Si nous avons plus de plateaux, les chefs ne manqueront jamais d'ingrédients, donc ils travailleront plus vite. »
La surprise : plus n'est pas toujours mieux
Les chercheurs ont mesuré la vitesse, et voici ce qu'ils ont trouvé :
- Profondeur 2 : La cuisine tournait à 25,6 TFLOPS. Les chefs attendaient trop souvent.
- Profondeur 3 : La cuisine s'est accélérée pour atteindre 31,9 TFLOPS (soit 52,7 % du maximum théorique). C'était le point idéal !
- Profondeur 4 : La cuisine a en fait ralenti à 31,1 TFLOPS.
C'est la découverte principale : Ajouter un quatrième plateau n'a pas aidé ; cela a empiré les choses. Le modèle mathématique simple prédisait que la vitesse devrait bondir à 35,4 TFLOPS, mais ce ne fut pas le cas. Le modèle s'est trompé de 13,8 %.
Pourquoi l'ajout d'un plateau a-t-il été contre-productif ?
Le papier explique que la cuisine a un espace limité. Lorsqu'ils ont ajouté le 4ème plateau (augmentant l'utilisation de la mémoire partagée ou « Shared Memory » à 96 Ko), cela a forcé la cuisine à réduire le nombre d'équipes de cuisine (threadblocks) pouvant travailler en même temps.
- Avec 3 plateaux, la cuisine pouvait loger 2 équipes de chefs sur chaque cuisinière.
- Avec 4 plateaux, la cuisine ne pouvait loger qu'1 seule équipe.
Même si l'équipe unique avait plus d'ingrédients, elle devait attendre plus longtemps car il y avait moins d'équipes à alterner lorsqu'une équipe était bloquée. La cuisine est devenue « encombrée » d'ingrédients mais « vide » de travailleurs. Les chercheurs ont mesuré que l'occupation (le nombre d'équipes travaillant) a chuté, et que les chefs devaient utiliser plus de « registres » (leurs blocs-notes personnels), ce qui les a également ralentis.
Les gagnants et les perdants
- Le gagnant : L'outil CUTLASS avec 3 plateaux et une taille de tuile spécifique de 256 × 128. Il a atteint 31,9 TFLOPS. C'était si bon qu'il a battu la « Boîte Noire » standard (cuBLAS) d'une marge infime, presque imperceptible de 1,3 % (ce que les auteurs considèrent comme du bruit, mais cela prouve que le plan ouvert peut égaler le fermé).
- Le dauphin DIY : Le noyau WMMA personnalisé (la cuisine entièrement DIY) a atteint 25,1 TFLOPS sur un test légèrement plus petit. Il était plus lent car il n'utilisait pas les astuces de « double buffering » pour superposer la livraison des ingrédients et la cuisson.
- Le perdant : L'idée que « plus la profondeur du pipeline est grande, mieux c'est ». Le papier écarte explicitement cette idée pour ce matériel spécifique.
À quel point sont-ils sûrs d'eux ?
Les auteurs sont très confiants dans ces chiffres car ils les ont mesurés directement sur le matériel, en exécutant le test 10 fois et en faisant la moyenne des résultats. Ils ont même vérifié leurs calculs par rapport à un outil intégré de NVIDIA (le profiler) et ont constaté que leur code personnalisé correspondait parfaitement.
Cependant, ils admettent quelques points qu'ils n'ont pas prouvés :
- Ils n'ont testé qu'une seule taille de problème spécifique (8192). Ils ne savent pas si la règle du « 3 plateaux est le meilleur » s'applique à des problèmes plus petits ou de formes étranges.
- Ils n'ont pas pu tester des profondeurs de pipeline supérieures à 4 car la cuisine est simplement tombée à court d'espace (mémoire).
- Ils ont dû exécuter leurs tests sur Windows, où un bug de pilote a empêché de comparer leur code personnalisé et le code standard dans le même run exact (bien qu'ils l'aient fait dans des runs séparés).
Ce qu'il faut retenir
Si vous essayez de tirer le maximum d'une carte graphique grand public comme la RTX 4060 pour des tâches gourmandes en calcul, ne vous contentez pas d'ajouter sans cesse plus de tampons (buffers). Il existe une zone « Goldilocks » (ni trop, ni trop peu). Dans ce cas, 3 étapes de préparation étaient parfaites. Passer à 4 étapes a rendu la cuisine trop étroite, ralentissant tout le monde.
Les chercheurs ont publié tout leur code en open-source, afin que quiconque puisse essayer de construire sa propre cuisine et voir s'il peut battre le record de 31,9 TFLOPS. Ils suggèrent que les travaux futurs devraient examiner différentes tailles de problèmes et utiliser Linux pour obtenir des données plus propres, mais pour l'instant, ils ont montré que 31,9 TFLOPS est le sommet actuel pour cette configuration, et que 31,1 TFLOPS est ce qui arrive quand on est trop gourmand avec la mémoire.
Noyé(e) sous les articles dans votre domaine ?
Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.