31 points par GN⁺ 2025-06-10 | 2 commentaires | Partager sur WhatsApp
  • Je me demande quels livres/cours/projets suivre pour apprendre la programmation CUDA (car beaucoup d’entreprises où je voudrais travailler demandent une expérience en CUDA)

Synthèse des réponses de HN

  • Ressources d’apprentissage et premiers pas

    • Recommandation du CUDA Programming Guide officiel de NVIDIA et des ouvrages archivés de NVIDIA
    • Commencer par de petits programmes d’exemple, puis s’exercer progressivement à la parallélisation ; les connaissances existantes en C/C++ sont très importantes
    • Utiliser du code open source (GitHub, etc.) et des LLM (par ex. ChatGPT) pour analyser la structure du code et pratiquer
    • Approche recommandée sur environ 6 à 8 semaines, centrée sur la pratique
  • Matériel et environnement nécessaires

    • Une carte graphique NVIDIA des 10 dernières années suffit en général (notamment Turing/RTX 20xx, Ampere/RTX 30xx ou plus récent) ; les anciens modèles (avant Maxwell) ont des limites en termes de support et de performances
    • Utiliser la dernière version du CUDA Toolkit et vérifier impérativement la Compute Capability du GPU (tableau de compatibilité)
    • Windows comme Linux conviennent, et selon l’environnement, Docker et des VPS peuvent aussi être utiles
    • Sans GPU, il est possible d’essayer via un émulateur en ligne comme leetgpu.com
  • Bases de la programmation parallèle

    • Plus que la syntaxe CUDA elle-même, il est essentiel de comprendre les algorithmes parallèles et l’architecture matérielle
    • Ouvrages de référence :
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, gratuit)
    • Dans la pratique professionnelle, la demande autour de CUDA se concentre souvent sur l’utilisation de bibliothèques basées sur CUDA comme cuBLAS, cuDNN, et l’optimisation maximale des performances parallèles
  • Méthodologie d’apprentissage

    • Plutôt qu’un simple apprentissage de la syntaxe, il est recommandé de porter un petit code CPU vers CUDA → mesurer les performances → optimiser progressivement
    • Commencer par viser la correction, puis appliquer par étapes l’optimisation des performances (gestion mémoire, shared memory, usage des registres, etc.)
    • Exemples pratiques recommandés : prefix scan, GEMM, n-body simulation et autres algorithmes parallèles classiques
    • Mieux vaut d’abord apprendre des bibliothèques d’abstraction de haut niveau comme CUDA Thrust, CUTLASS ou cub, et ne tenter l’implémentation directe qu’ensuite
  • Pratique professionnelle et carrière

    • Les exigences d’expérience en CUDA apparaissent surtout dans le deep learning, la data engineering, le HPC (calcul scientifique), les graphismes de jeux, etc.
    • Certains postes demandent non seulement PyTorch/TensorFlow, mais aussi une expérience d’optimisation de kernels CUDA ou de bibliothèques cœur
    • Pour développer une vraie expertise professionnelle, il est aussi important de maîtriser des outils bas niveau comme PTX, nvcc, cuobjdump, Nsight Systems/Compute
    • Participation à la communauté : gpumode Discord, GPU Puzzles et d’autres communautés actives pour des revues de code concrètes et des discussions techniques
  • Points d’attention et conseils réalistes

    • Il est facile de commencer, mais l’optimisation et la compatibilité selon le matériel (architecture/jeu d’instructions) sont très difficiles, avec une barrière à l’entrée élevée
    • En réalité, l’expérience professionnelle et le réseau comptent beaucoup, et l’autoformation seule ne remplace pas une expérience métier
    • CUDA étant un domaine où s’entrecroisent matériel, calcul parallèle, algorithmes et optimisation, il est recommandé de se concentrer d’abord sur un axe précis et de l’approfondir

2 commentaires

 
ahwjdekf 2025-06-12

Eh bien. Je me demande s’il m’arrivera vraiment d’utiliser directement CUDA. Surtout en Corée.

 
GN⁺ 2025-06-10
Commentaires Hacker News
  • En tant que participant au concours NVidia cudacontest en 2008, et comme l’une des rares personnes à avoir soumis un projet depuis l’Inde, avec en plus un prix de participation BlackEdition Card, voici la méthode que j’ai suivie

    • Consulter le NVidia CUDA Programming Guide
    • Utiliser les ouvrages sur la programmation CUDA publiés par NVidia (voir developer.nvidia.com/cuda-books-archive)
    • Commencer par écrire de petits programmes à partir d’implémentations existantes (une solide maîtrise du C est indispensable, donc mieux vaut réviser si nécessaire)
    • En supposant que la toolchain, le compilateur et le matériel de travail nécessaires soient déjà installés et disponibles
    • Analyser le code des projets CUDA sur Github et, aujourd’hui, utiliser aussi des LLM pour demander des explications sur le code
    • Commencer par de petits programmes basés sur le parallélisme, puis élargir progressivement
    • En avançant calmement pendant 1 à 2 mois, il est tout à fait possible de démarrer la programmation CUDA
    • Aujourd’hui, il y a bien plus de documentation et de ressources qu’en 2007/08
    • Je recommande d’établir puis d’exécuter un plan d’apprentissage sur 6 à 8 semaines
    • Vous pouvez poser des questions à tout moment, je pourrai aider autant que possible
      • Je me demande concrètement quel matériel est nécessaire. Est-ce qu’une carte graphique Nvidia sortie il y a environ 5 ans suffit, ou faut-il quelque chose de plus spécifique ?
      • Je suis aussi curieux de connaître l’environnement de développement utilisé. Est-ce que Windows reste l’environnement principal pour CUDA ?
  • En regardant directement le code CUDA de Leela Chess Zero, il m’a semblé d’un niveau compréhensible

    • À l’époque, Leela utilisait une architecture DCNN plutôt que des transformers, et j’ai facilement appris les bases des DCNN via des vidéos fast.ai
    • Les transformers sont plus complexes, donc je n’ai pas encore commencé à les étudier
    • Le langage CUDA lui-même est basé sur C++, donc avec de l’expérience en C++, on peut l’aborder sans trop de difficulté
    • En revanche, si l’objectif est de devenir développeur CUDA, il est souvent nécessaire d’atteindre aussi un niveau en programmation IA — l’IA est un domaine bien plus vaste et profond que CUDA, et demande beaucoup de temps et d’expérience pratique
    • Mais une fois le niveau acquis, la demande du marché est très forte
    • Je recommande vivement les vidéos fast.ai
    • Si l’on va vers le jeu vidéo, la discussion mène aussi à la 3D graphique, mais c’est devenu bien plus complexe récemment, donc je ne sais pas quel serait aujourd’hui le meilleur parcours d’entrée
      • Est-ce que chercher un emploi comme développeur CUDA est aujourd’hui moins contraignant que dans d’autres domaines du software engineering ? Je suis actuellement développeur middleware Java, et CUDA ainsi que l’IA me semblent être une bonne piste de reconversion
      • Est-ce que c’est bien ce code ici ? Et j’ai deux questions de débutant
        • Pourquoi avoir écrit directement en C++/CUDA ? Est-ce que PyTorch ou TensorFlow ne suffisaient pas en termes de vitesse d’entraînement pour Leela ?
        • Et il y a aussi du code TensorFlow : pourquoi ?
  • Si l’argent est la motivation, je recommande d’éviter le HPC et les domaines très mathématiques

    • Dans ce secteur, sans niveau doctorat, il est difficile d’attirer l’attention, même avec un très bon niveau
    • Les compétences qui rapportent vraiment, c’est de maîtriser des outils comme PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute, ainsi que d’analyser des codebases open source comme CUTLASS
    • Je recommande aussi ces notes pratiques
    • Surtout, ne restez pas uniquement sur HN : rejoignez plutôt la communauté discord de vrais développeurs, gpu mode
      • C’est impressionnant et concret, mais cela semble être un domaine très de niche
      • L’entrée est difficile, et cela semble n’être utilisé que dans des secteurs limités comme le jeu vidéo ou les drivers
      • Il est mentionné qu’il faut beaucoup de talent pour atteindre directement ce niveau dès le départ
  • Les ressources de gpumode.com et sa communauté Discord offrent largement de quoi étudier pendant plusieurs mois

    • Le livre Programming massively parallel processors
    • La documentation officielle nvidia cuda est extrêmement complète
    • Je recommande aussi de se frotter à GPU-Puzzles
      • En regardant l’exemple de code ThunderKittens flashattention-2, on perçoit une complexité de code difficile à décrire avec des mots
      • J’ai l’impression que ces puzzles relèvent d’une logique de « winner takes all », où l’écart réel de réussite est inférieur à 1 %, donc que les exercices eux-mêmes n’ont pas une grande utilité
  • Je recommande de découper le périmètre d’apprentissage pour le rendre plus accessible

      1. Apprendre CUDA lui-même (frameworks/bibliothèques/couches d’abstraction)
      1. Les bases du calcul haute performance (cela dépasse les seuls concepts de GPU et Nvlink et s’applique à l’architecture HPC en général)
      1. Une spécialisation par domaine d’application (pour les transformers, commencer depuis des abstractions haut niveau modernes comme Torch, TensorFlow, etc.)
    • Si l’on veut vraiment maîtriser CUDA, l’essentiel est d’expérimenter et de comprendre les principes de la programmation massivement parallèle, qui sont en grande partie des compétences transférables
      • En tant qu’ancien développeur GPU, je donne le même conseil, en insistant surtout sur les points 2 et 3
      • Cela dépendra de l’objectif professionnel, mais ce dont vous avez vraiment besoin est peut-être plutôt d’expérience avec les bibliothèques CUDA (cuDNN, cuBLAS, cuFFT, etc.)
      • Comprendre les principes de la programmation parallèle passe avant tout
      • Cette approche est la bonne ; commencer directement par le point 1 sans le point 2 ne ferait qu’ajouter de la confusion
      • Voir ce livre recommandé
  • Partage d’une expérience personnelle d’apprentissage de CUDA

    • Ce n’était pas très structuré, mais cette méthode m’a aidé dans le monde académique et dans la recherche
    • J’ai dû apprendre CUDA moi-même à cause de mon projet de doctorat
    • Personne dans le laboratoire n’avait d’expérience, donc j’ai acquis les bases avec les cours NVIDIA (Getting Started with Accelerated Computing with CUDA C/C++ et la version Python)
    • Au-delà des tutoriels officiels, l’apprentissage a surtout reposé sur beaucoup d’essais et d’erreurs
    • J’ai utilisé des tutoriels en ligne et des livres, mais les fonctions et API changeaient vite, ce qui créait souvent une confusion entre anciennes et nouvelles versions, sans compter les problèmes de compatibilité avec mon GPU et mon environnement réel
    • La plus grande difficulté a été que j’ai passé l’essentiel de mon temps à déboguer (trouver pourquoi c’était plus lent que prévu) et à utiliser des outils (par exemple compute-sanitizer, Nsight)
    • Ne soyez pas pressé : je recommande de prendre un projet simple qui fonctionne sur CPU, de le porter vers CUDA, puis d’accumuler de l’expérience d’optimisation à l’aide de benchmarks
    • L’optimisation vient tout à la fin ; la priorité doit d’abord être d’obtenir un comportement correct
    • Un kernel lent mais sans corruption mémoire a plus de valeur qu’un kernel optimisé
      • Je partage une expérience de doctorat similaire — voici le résultat pratique sur flashrnn
      • Si vous comprenez les principes de base et l’architecture GPU, voici le workflow que je recommande
        1. Mettre en place un environnement où l’on peut tester les kernels, puis comparer avec une baseline écrite dans un langage de plus haut niveau
        2. S’il n’y a pas de projet urgent, revoir ou réimplémenter des problèmes classiques déjà connus (MatMul, etc.) — sans chercher à tout couvrir, mais en se concentrant par fonctionnalité
        3. Augmenter progressivement la complexité — boucles, parallélisation par grille, puis utilisation de la mémoire globale/partagée/des registres, jusqu’à passer d’une simple multiplication matricielle aux TensorCore (MMA)
        4. Relire encore et encore le CUDA C Programming Guide — on ne l’assimile vraiment qu’en pratiquant
        5. Des abstractions de plus haut niveau comme CUTLASS ou ThunderKitten peuvent aussi être recommandées selon les cas ; dans un environnement JAX/Torch, commencer plutôt par triton
      • Maîtriser jusqu’au PTX prend encore plus de temps, mais l’accent est mis sur l’apprentissage par la pratique
      • Je compatis profondément à la douleur du débogage des performances CUDA
  • Présentation de ressources utilisées pour enseigner CUDA à des lycéens — insuffisantes pour tout maîtriser seul, mais utiles pour bien démarrer

  • Je ne l’ai pas encore utilisé, mais la plateforme leetgpu.com me semble assez bonne, donc je la recommande

  • Demande d’avis de terrain sur les métiers, postes et types d’entreprises qui recrutent des ingénieurs CUDA

    • Aujourd’hui, beaucoup d’entreprises utilisent des bibliothèques basées sur CUDA comme PyTorch, mais je ne sais pas si beaucoup d’entre elles ont réellement besoin de développement CUDA natif
    • J’aimerais identifier des organisations ou des rôles qui travaillent directement autour de CUDA
      • Dans notre équipe, nous utilisons directement CUDA pour l’analyse de données géospatiales
      • Nous rastérisons des tuiles de slippy map et effectuons des traitements de synthèse raster sur GPU
      • Comme il s’agit en grande partie de traitements indépendants au niveau du pixel, c’est bien adapté au GPU
      • Nous parallélisons les agrégations par ligne, puis rassemblons le tout à la fin
      • En revanche, la copie des données vers le GPU est actuellement le goulot d’étranglement
  • Avec l’évolution de l’époque, on peut aussi utiliser des LLM comme Claude pour poser des questions et obtenir à la fois le code résultat et les explications

    • En 2025, cela peut encore fonctionner ainsi, mais en 2026, il faudra probablement aller un cran plus loin, selon un avis exprimé ici