NVIDIA ajoute enfin la prise en charge native de Python à CUDA
(thenewstack.io)- Après des années où la boîte à outils CUDA de NVIDIA était centrée sur C/C++, la prise en charge native de Python a été officiellement ajoutée lors de la GTC 2024
- Il est désormais possible d’exécuter directement sur GPU des calculs rapides centrés sur les algorithmes en utilisant uniquement Python
- L’architecte CUDA Stephen Jones explique que « Python CUDA n’est pas simplement une transposition de code C en syntaxe Python, mais une refonte pensée pour être naturelle pour les développeurs Python »
Nouvelles possibilités ouvertes par la prise en charge native de Python
- Jusqu’ici, les utilisateurs de CUDA devaient connaître C++ ou Fortran, mais désormais des calculs GPU haute performance sont possibles avec Python seul
- Selon l’enquête open source GitHub 2024, Python a dépassé JavaScript pour devenir le langage le plus populaire
- Le nombre d’utilisateurs de CUDA est passé de 2 millions en 2020 à 4 millions en 2023, mais les développeurs Python se comptent en dizaines de millions, ce qui représente une très bonne nouvelle, en particulier pour les développeurs des pays émergents comme l’Inde et le Brésil
- On s’attend aussi à un impact positif sur l’extension de l’infrastructure GPU à l’échelle mondiale
Comment est structuré CUDA « Pythonic »
- CUDA se compose de bibliothèques, d’un SDK, de compilateurs, d’un runtime, d’outils et d’algorithmes
- L’intégration de Python ne se limite pas à fournir des kernels ; toute la stack a été pensée pour être compatible avec Python
- Approche clé : compilation JIT (Just-In-Time), afin de minimiser la dépendance aux compilateurs
Principaux composants
- cuPyNumeric : bibliothèque Python offrant la même API que NumPy tout en prenant en charge l’accélération GPU
- CUDA Core : système basé sur un flux d’exécution repensant le runtime CUDA à la manière de Python
- NVMath Python : interface unifiée pour appeler les bibliothèques hôte/périphérique
- Une API Python conçue pour s’interfacer directement avec des bibliothèques C++ haute performance
- Des outils d’analyse des performances et du code sont également fournis
« Il est directement relié au code C++ haute performance existant, donc la perte de performance est presque nulle » — Stephen Jones
Nouveau modèle de programmation : CuTile
- Un modèle de haut niveau centré sur les tableaux conçu pour les développeurs Python
- Là où CUDA exigeait traditionnellement un contrôle détaillé basé sur les threads, CuTile propose une abstraction par tuiles offrant une structure plus concise et plus facile à comprendre
- En mappant les tableaux en tuiles GPU, CuTile facilite le débogage et l’optimisation tout en conservant les performances
- Une extension à CUDA C++ est également prévue par la suite
« Comme le compilateur comprend mieux la structure du GPU, il effectue aussi automatiquement une meilleure optimisation des performances »
En résumé
- L’intégration native de Python dans CUDA abaisse considérablement la barrière d’entrée à la programmation GPU
- Sans connaissances complexes d’autres langages, il devient possible d’effectuer des calculs IA/scientifiques sur GPU avec Python seul
- Il s’agit d’un tournant décisif ouvrant une nouvelle ère pour l’expansion de l’écosystème IA centré sur Python et l’utilisation des GPU NVIDIA
3 commentaires
Est-ce que ce sera finalement plus rapide que les wrappers CUDA existants comme CuPy ou PyTorch ? L’avantage de CuPy et de torch, c’est que leur API est presque identique à celle de NumPy, ce qui permettait de porter sans trop d’effort du code de test écrit avec NumPy ; il faudra voir à l’usage ce qu’il en est pour celui-ci.
Avis sur Hacker News
Je ne suis pas programmeur GPU, mais on dirait que même quelqu’un comme moi pourrait l’utiliser facilement. J’ai fait une petite démo simple utilisant le GPU et le CPU. Les résultats sont les suivants
Je me demande pourquoi Python devient la cible de ce genre de choses. J’ai vu beaucoup de projets ajouter un support Python. Je me demande s’il est plus facile de compiler une base de code Python vers différentes cibles que d’autres langages
Heureusement que Pytorch a pris beaucoup d’élan avant que cela n’arrive. Nous avons désormais un vrai quasi-standard réellement indépendant de la plateforme pour le calcul parallèle. Ce n’est pas limité à NVIDIA
CuTile donne à bien des égards l’impression d’être le successeur de Triton d’OpenAI. On obtient non seulement des primitives au niveau tile/bloc et TileIR, mais aussi un modèle de programmation SIMT correct dans CuPy. On dirait que peu de gens y ont vraiment prêté attention cette année à la GTC. C’est vraiment très cool
Je suis très curieux de voir comment cela se compare à JAX
C’est énorme. Plus personne ne considérera probablement AMD + ROCm comme alternative à NVIDIA dans l’IA après ça
Le support de Rust est la prochaine étape ? En ce moment, je [dé]sérialise manuellement mes structures de données en tableaux d’octets vers/depuis les kernels. Ce serait bien d’avoir des structures de données réellement partagées, comme ce que CUDA offre en C++
Python est vraiment en train de s’imposer comme la lingua franca des langages de programmation. Son adoption explose dans la renaissance du FOSS, et je pense que c’est l’outil le plus proche du couteau suisse universel que nous ayons
Cela va probablement pousser encore plus ce que Python a généralement toujours favorisé : essayer davantage de choses plus vite, puis laisser ce qui doit rester dans des langages plus rapides y rester. Dans l’ensemble, c’est une excellente décision. J’ai clairement hâte de jouer avec
CUDA est né avec C et C++. J’aurais préféré qu’ils implémentent une vraie variante C de CUDA au lieu de simplement étendre le C++ et d’appeler cela CUDA C
La première vitesse, c’est réel ? C’est beaucoup trop lent...