VUDA : implémentation de CUDA sur Vulkan
(github.com/jgbit)- 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.hppet en utilisant l’espace de nomsvuda::, tandis quevuda_runtime.hppencapsule 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 avecvuda::launchKernel("add.spv", "main", ...) - La documentation propose les sections Change List, Setup and Compilation, Deviations from CUDA et Implementation Details
1 commentaires
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
Sinon, pour beaucoup de charges de travail, on ne peut même pas commencer
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
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
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
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
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
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
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
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 ?
Il convertit la source CUDA en arbre syntaxique abstrait, les matchers de transformation le parcourent, puis il génère la source HIP
En complément, la liste des API CUDA prises en charge par hipify-clang est ici : https://rocm.docs.amd.com/projects/HIPIFY/en/latest/supporte...
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 ?