1 points par GN⁺ 2023-07-03 | 1 commentaires | Partager sur WhatsApp
  • VUDA est une bibliothèque header-only basée sur Vulkan qui fournit une interface compatible avec la CUDA Runtime API pour écrire des applications accélérées par GPU
  • Ses fonctionnalités suivent la spécification du runtime CUDA dans la mesure du possible, et la documentation de référence de la NVIDIA CUDA Runtime API peut être utilisée pour l’usage général
  • Toutes les fonctionnalités sont accessibles en incluant vuda.hpp et en utilisant l’espace de noms vuda::, tandis que vuda_runtime.hpp encapsule et redirige les fonctionnalités CUDA
  • Le workflow d’exemple utilise des appels à la CUDA Runtime API comme cudaSetDevice, cudaMalloc, cudaMemcpy, cudaFree, et lorsque NVCC n’est pas utilisé, exécute un module de shader Vulkan avec vuda::launchKernel("add.spv", "main", ...)
  • La documentation propose les sections Change List, Setup and Compilation, Deviations from CUDA et Implementation Details

1 commentaires

 
GN⁺ 2023-07-03
Avis sur Hacker News
  • Ce n’est pas une implémentation de CUDA, mais de l’API runtime CUDA
    Cette API sert à configurer la carte, allouer/copier la mémoire et lancer des kernels
    Le point important, c’est qu’avec ça on ne peut pas écrire de code kernel qui s’exécute réellement sur le GPU

    • J’ai brièvement espéré que cela signifie qu’on pourrait exécuter du code CUDA sur des GPU AMD, mais d’après l’explication ce n’est pas le cas
    • Du coup, je me demande à quoi cela peut être utile
    • Si l’objectif est de se présenter comme une alternative à CUDA, il faut une prise en charge de PTX et le support du développement dans plusieurs langages
      Sinon, pour beaucoup de charges de travail, on ne peut même pas commencer
    1. Il s’agit d’une implémentation d’une API de style C assez rustique
      Il existe aussi un wrapper d’API Modern C++ qui fournit la vérification automatique des erreurs, la gestion des ressources via RAII, etc. : https://github.com/eyalroz/cuda-api-wrappers
      Pour information, j’en suis l’auteur
    2. Implémenter l’API runtime n’est pas un choix très pertinent
      Si l’on veut gérer l’isolation des contextes ou l’ajout dynamique de kernels JIT fraîchement compilés sous forme de modules, c’est surtout l’implémentation de l’API driver qui est importante
    3. Ce projet fait moins de 3 000 lignes
      Il a fallu plus de 14 000 lignes pour couvrir l’ensemble essentiel de l’API CUDA, c’est-à-dire le driver, le runtime, NVTX, CUDA-C++ et la compilation JIT de PTX
  • Je me demande quel est le lien entre cela et l’objectif évoqué par George Hotz de rendre le machine learning possible sur les puces AMD et de briser la domination de Nvidia
    Je ne suis pas expert, mais cette approche semble puissante et importante
    Cela dit, le système est tellement complexe que je doute qu’une seule personne puisse le construire, et il semble qu’il faille un soutien d’entreprise pour démarrer
    Je me dis qu’AMD pourrait peut-être être intéressé par le fait de financer des ingénieurs pour itérer dessus directement

    • Hotz ne parle pas seulement de bibliothèques en espace utilisateur, mais aussi du driver

      The software is terrible! There’s kernel panics in the driver. You have to run a newer kernel than the Ubuntu default to make it remotely stable. I’m still not sure if the driver supports putting two cards in one machine, or if there’s some poorly written global state. When I put the second card in and run an OpenCL program, half the time it kernel panics and you have to reboot.
      Il traite aussi de l’espace utilisateur, mais il est clair qu’il considère qu’il y a beaucoup à reprendre dans toute la pile, au-dessus comme au-dessous de ce type de bibliothèques

    • J’ai trouvé https://www.youtube.com/watch?v=Mr0rWJhv9jU et https://geohot.github.io/blog/jekyll/update/2023/06/07/a-div...
      Je me sens un peu rassuré maintenant à propos du parcours qu’il a vécu avec AMD
      Il semblait y avoir de gros problèmes avec les drivers GPU, et j’ai découvert que je n’étais pas le seul à le penser
  • Si vous utilisez un GPU AMD sous Windows et cherchez à entraîner ou exécuter des modèles de machine learning, cela vaut le coup de regarder torch-directml et tensorflow-directml

    • Je ne sais pas vraiment si DirectML est plus pertinent qu’AMD poursuivant la compatibilité CUDA via ROCm/MiOpen/HIP
      CUDA et DirectX semblent tous deux trop bas niveau pour servir d’API compatibles sur des matériels très différents, AMD et Nvidia, sans sacrifier beaucoup de performances
      cuDNN est plus haut niveau, donc il y a davantage de marge pour fournir de la compatibilité sans perte de performances en ayant des implémentations de kernels distinctes adaptées aux matériels AMD et Nvidia
      Mais une grande partie de ce que fait un framework comme PyTorch repose non seulement sur cuDNN, mais aussi sur des kernels personnalisés
      La meilleure option pour AMD semble être une API bas niveau solide et inébranlable, ainsi qu’un support pour des compilateurs d’optimisation machine learning de haut niveau permettant aux éditeurs de frameworks comme PyTorch, TensorFlow et JAX de bâtir facilement leur support dessus
      Au final, ce sont les éditeurs de frameworks qui en bénéficient, donc AMD doit collaborer très étroitement avec eux
      Il est étrange qu’AMD ait traité le support du machine learning comme une priorité secondaire pendant des années
      Ils ont peut-être estimé que le marché grand public du machine learning était trop petit par rapport à celui du graphisme et du jeu pour justifier l’effort, mais comme Nvidia l’a montré, c’est la voie vers des contrats de datacenter bien plus rentables
    • Je me demande comment cela fonctionne concrètement
      La dernière fois que j’ai essayé DirectML, le support n’était pas bon et peu de logiciels le prenaient en charge
      Les performances ne semblaient pas formidables non plus
      J’utilise maintenant une installation Linux, et grâce à ROCm, je peux utiliser des outils populaires comme Automatic111 webui et oobabooga
    • Est-ce que ça fonctionne vraiment ?
      Si AMD sortait un GPU qui batte Nvidia en machine learning à un prix raisonnable, je pourrais acheter un nouveau GPU
      Les bons GPU Nvidia sont beaucoup trop chers pour justifier l’achat
  • Cela ressemble à un projet mort
    Le dernier commit date de février 2022

    • Et en plus, ce commit n’ajoutait qu’une seule ligne
      La majeure partie du code date d’il y a 3 à 5 ans
  • Je n’ai jamais programmé directement pour GPU, donc je pose la question : comment cela se compare-t-il à HIP ?
    Est-ce que cela pourrait constituer une couche d’abstraction efficace sur les GPU Nvidia et AMD ?

  • Je n’ai pas beaucoup d’espoir pour AMD
    Ils auraient dû créer des outils de compatibilité depuis longtemps

  • Ce genre de projet revient assez souvent, mais n’a jamais pris d’élan, et j’utilise toujours des GPU Nvidia
    Je ne pense pas que celui-ci sera très différent

  • C’est assez intéressant
    Donc cela voudrait dire que mon programme accéléré par CUDA devrait aussi pouvoir tourner sur des appareils AMD et Intel ?