
MoonMath AI publie en open source un kernel d'attention HIP pour AMD MI300X surpassant AITER v3 sur toutes les configurations
MoonMath AI, une équipe de recherche spécialisée en optimisation GPU, a publié en open source un noyau de calcul d'attention en bf16 pour le GPU AMD MI300X, sous licence MIT. Écrit en HIP (le langage de programmation GPU d'AMD), ce noyau implémente l'opération d'attention centrale des transformers, le calcul softmax(QKᵀ/√d)·V, et surpasse sur tous les cas testés AITER v3, le propre noyau optimisé d'AMD. Les gains géométriques mesurés atteignent 1,18×, 1,15× et 1,08× selon les modes d'arrondi, avec un pic à 1,26× sur certaines configurations. Les tests ont été conduits sur du matériel bare-metal fourni par HotAisle, un fournisseur cloud AMD. Le noyau cible exclusivement l'architecture CDNA3 du MI300X (ISA gfx942), avec une dimension de tête fixée à 128 et une prise en charge de longueurs de séquence arbitraires, y compris l'attention croisée. Une pull request concrète dans SGLang a utilisé ce noyau pour accélérer la génération vidéo par le modèle Wan2.1 de 1,23× sans aucune régression de qualité.
Ce résultat est significatif pour l'écosystème AMD, longtemps considéré comme en retard sur NVIDIA en matière de performance logicielle pour l'inférence de modèles de langage. Battre AMD sur son propre terrain, avec un noyau non assembleur, donc lisible et maintenable, démontre qu'il est possible d'extraire des performances compétitives du MI300X sans recourir à du code machine manuscrit opaque. Pour les équipes qui déploient des LLMs ou des modèles de diffusion vidéo sur infrastructure AMD, ce noyau représente un gain immédiat et vérifiable. La précision numérique est soigneusement préservée : chaque sortie finie reste dans une unité bf16 ULP d'AITER, les comportements NaN et Inf sont bit-identiques, et les résultats sont déterministes.
Sur le plan technique, la performance provient de deux innovations principales. D'abord, une astuce d'assemblage inline qui enveloppe exactement une instruction dans une fonction forceinline, laissant le compilateur gérer l'allocation des registres tout en gardant le contrôle de l'opcode, évitant ainsi les copies de registres inutiles qui pénalisent les approches naïves. Ensuite, un placement mémoire rigoureux : K est chargé depuis la HBM vers la mémoire partagée locale (LDS) en double-buffering, V reste chaud dans le cache L1, et Q avec les accumulateurs résident dans les registres. La stratégie d'ordonnancement des vagues, huit vagues par bloc, en deux groupes de quatre décalés en phase, permet au cœur matriciel de ne jamais rester inactif, en alternant calcul et softmax à la manière de FlashAttention-3, mais adaptée aux spécificités de CDNA3 où toute opération mémoire est déjà asynchrone. Ce travail s'inscrit dans une tendance plus large de la communauté open source qui, faute de support logiciel mature d'AMD, prend elle-même en charge l'optimisation bas niveau de ces GPUs.
Dans nos dossiers
Vu une erreur factuelle dans cet article ? Signalez-la. Toutes les corrections valides sont publiées sur /corrections.




