VUDA: Vulkan-Implementierung von CUDA
(github.com/jgbit)- VUDA ist eine Header-only-Bibliothek auf Vulkan-Basis, die eine CUDA Runtime API-Schnittstelle zum Schreiben GPU-beschleunigter Anwendungen bereitstellt
- Die Funktionen folgen, soweit möglich, der Spezifikation der CUDA Runtime; für die allgemeine Nutzung kann die Referenzdokumentation zur NVIDIA CUDA Runtime API herangezogen werden
- Auf alle Funktionen kann durch Einbinden von
vuda.hppund Verwendung desvuda::-Namespace zugegriffen werden;vuda_runtime.hppkapselt und leitet CUDA-Funktionen um - Der Beispiel-Workflow verwendet CUDA Runtime API-Aufrufe wie
cudaSetDevice,cudaMalloc,cudaMemcpy,cudaFree; wenn nicht mit NVCC gearbeitet wird, wird mitvuda::launchKernel("add.spv", "main", ...)ein Vulkan-Shader-Modul ausgeführt - Als Dokumentationsabschnitte werden Change List, Setup and Compilation, Deviations from CUDA und Implementation Details bereitgestellt
1 Kommentare
Hacker-News-Kommentare
Es ist keine CUDA-Implementierung, sondern eine Implementierung der CUDA Runtime API
Diese API wird für die Gerätekonfiguration, Speicherallokation und -kopie sowie zum Starten von Kerneln verwendet
Wichtig ist: Damit kann man keinen Kernel-Code schreiben, der tatsächlich auf der GPU läuft
Sonst kommt man bei vielen Workloads gar nicht erst vom Fleck
Es gibt auch einen Modern-C++-API-Wrapper mit automatischer Fehlerprüfung, RAII-Ressourcenkontrolle usw.: https://github.com/eyalroz/cuda-api-wrappers
Zur Einordnung: Ich bin der Autor
Für Dinge wie Kontextisolierung oder das dynamische Hinzufügen neu kompilierter JIT-Kernel als Module ist die Implementierung der Driver API entscheidend
Um die gesamte zentrale CUDA-API abzudecken, also Driver, Runtime, NVTX, CUDA-C++ und PTX-JIT-Kompilierung, waren mehr als 14.000 Zeilen nötig
Ich frage mich, wie das zu George Hotz’ Ziel passt, maschinelles Lernen auf AMD-Chips zu ermöglichen und die Nvidia-Dominanz zu brechen
Ich bin kein Experte, aber dieser Ansatz wirkt stark und wichtig
Allerdings ist das System so komplex, dass ich bezweifle, dass eine Einzelperson das bauen kann, und es sieht so aus, als bräuchte man zum Start Unterstützung durch Unternehmen
Vielleicht hätte AMD Interesse daran, direkt Ingenieurskapazität zu finanzieren und das iterativ zu verbessern
Jetzt fühle ich mich mit meinen Erfahrungen mit AMD etwas beruhigter
Es schien große Probleme mit den GPU-Treibern zu geben, und nun weiß ich, dass ich damit nicht allein war
Wer auf Windows eine AMD-GPU nutzt und damit Machine-Learning-Modelle trainieren oder ausführen will, sollte sich torch-directml und tensorflow-directml ansehen
CUDA und DirectX wirken beide zu Low-Level, um sie als kompatible APIs auf sehr unterschiedlicher Hardware, nämlich AMD und Nvidia, ohne große Leistungseinbußen zu verwenden
cuDNN ist höher angesiedelt, sodass eher Spielraum besteht, Kompatibilität ohne Leistungsverlust zu bieten, indem man getrennte Kernel-Implementierungen für AMD- und Nvidia-Hardware pflegt
Allerdings basiert ein großer Teil dessen, was Frameworks wie PyTorch tun, nicht nur auf cuDNN, sondern auf benutzerdefinierten Kerneln
Für AMD scheint die beste Wahl eine absolut robuste Low-Level-API zu sein, plus Unterstützung für hochoptimierende Machine-Learning-Compiler, damit Framework-Anbieter wie PyTorch, TensorFlow und JAX darauf leicht Support aufbauen können
Letztlich profitieren davon die Framework-Anbieter, daher sollte AMD sehr eng mit ihnen zusammenarbeiten
Es ist seltsam, dass AMD die Unterstützung für Machine Learning jahrelang wie eine Nebensache behandelt hat
Vielleicht hielt man den Consumer-Markt für Machine Learning im Vergleich zu Grafik und Gaming für zu klein, um den Aufwand zu rechtfertigen, aber wie Nvidia gezeigt hat, ist das der Weg zu deutlich profitableren Rechenzentrumsaufträgen
Als ich DirectML zuletzt ausprobiert habe, war die Unterstützung schwach und es gab nur wenig Software dafür
Auch die Performance sah nicht besonders gut aus
Inzwischen nutze ich eine Linux-Installation und kann dank ROCm populäre Tools wie Automatic111 webui und oobabooga verwenden
Wenn AMD zu einem vernünftigen Preis GPUs herausbringt, die Nvidia im Machine Learning schlagen, würde ich vielleicht eine neue GPU kaufen
Gute Nvidia-GPUs sind einfach zu teuer, um den Kauf zu rechtfertigen
Sieht nach einem toten Projekt aus
Der letzte Commit war im Februar 2022
Der Großteil des Codes ist 3 bis 5 Jahre alt
Ich frage als jemand, der nie direkt GPUs programmiert hat: Wie verhält sich das im Vergleich zu HIP?
Könnte es eine effiziente Abstraktionsschicht über Nvidia- und AMD-GPUs hinweg sein?
Es wandelt CUDA-Quellcode in einen abstrakten Syntaxbaum um, dann durchlaufen Transformations-Matcher diesen und geben anschließend HIP-Quellcode aus
Außerdem gibt es hier eine Liste der von hipify-clang unterstützten CUDA-APIs: https://rocm.docs.amd.com/projects/HIPIFY/en/latest/supporte...
Von AMD erwarte ich da nichts
Solche Kompatibilitätswerkzeuge hätten sie schon viel früher bauen müssen
Solche Projekte tauchen ziemlich regelmäßig auf, gewinnen aber nie wirklich an Fahrt, und ich nutze immer noch Nvidia-GPUs
Ich glaube nicht, dass das hier groß anders sein wird
Ziemlich interessant
Bedeutet das also, dass mein CUDA-beschleunigtes Programm auch auf AMD- und Intel-Geräten laufen können sollte?