Auf den Treiber kommt es an!
AVD mit NCas_T4_v3
Jan Wähner / 19. November 2021Stellt Euch folgende Situation vor: Ein Kunde möchte seinen Mitarbeitern grafisch aufwendige Anwendungen (z.B. CAD-Software) per RDP bereitstellen und entscheidet sich als Basis für eine Azure VM mit GPU Unterstützung.
Dafür gibt es in Azure die N-Familie (NC, ND, NV -> Übersicht der Typen), diese stellen GPU-Leistung von AMD oder NVIDIA bereit.
Damit bei der Bereitstellung einer VM automatisch der richtige Treiber in der Maschine installiert wird, gibt es eine Azure Erweiterung für die Treiberinstallation (sowohl für NVIDIA als auch für AMD).
Bei VMs mit NVIDIA-GPU besteht die Besonderheit, dass es zwei verschiedene Treiber für spezifische Anwendungsfälle gibt:
- CUDA: für die Berechnung komplexer mathematischer Berechnungen auf der GPU (z.B. SETI@Home oder Mining von Kryptowährungen), keine grafische Darstellung von Inhalten
- GRID: für grafische Darstellung von komplexen Inhalten (vor allem 3D-Grafik)
Die NVIDIA-Treibererweiterung installiert in Abhängigkeit der gewählten Unterfamilie den (vermeintlich) richtigen NVIDIA-Treiber:
- CUDA für VMs der Familien NC, NCv2, NCv3, NCasT4_v3, ND und NDv2
- GRID für VMs der Familien NV und NVv3
Nun gibt es Situationen bei denen für den Anwendungsfall „Remote-Grafikworkstation“ keine Maschinen der NV-Familie genutzt werden können oder sollen, z.B. können in der Azure Region „Deutschland, Westen-Mitte“ aktuell nur GPU-VMs der Familie NCasT4_v3 gebucht werden.
Diesen Fall hatte ich: Ich habe eine VM vom Typ NC4as_T4_v3 inkl. NVIDIA-Erweiterung bereitgestellt und ging davon aus, dass von nun an die Grafikausgabe über RDP mittels GPU berechnet wird, immerhin stand die GPU im Gerätemanager:
Ich warf einen kurzen Blick in den Task-Manager auf den Reiter „Performance“ und wurde kurz stutzig, dass dort die GPU nicht angezeigt wurde. Allerdings hatte ich in Erinnerung, dass diese Anzeige auch von der verwendeten Betriebssystem-Version abhängt und habe mir deswegen keine weiteren Gedanken dazu gemacht.
Leider habe ich nicht bedacht, dass bei diesem VM-Typ nur der CUDA-Treiber durch die Erweiterung installiert wird und daher die Grafikausgabe nicht von der Power der GPU profitiert.
Zur eindeutigen Prüfung des aktuell aktiven Treibers nutzte ich das NVIDIA System Management Interface (nvidia-smi.exe). Dieses Kommandozeilentool findet ihr üblicherweise hier:
'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe'
Nach Ausführung erscheint folgende Ausgabe:
Im markierten Bereich steht TCC, was für Tesla Compute Cluster steht und bedeutet, dass hier der CUDA-Treiber verwendet wird.
Damit auch bei VMs der NCasT4_v3-Familie die Grafikausgabe mit der GPU berechnet wird, muss der GRID-Treiber manuell installiert werden.
Den passenden Treiber gibt es hier (im Abschnitt NVIDIA GRID driver: https://learn.microsoft.com/en-us/azure/virtual-machines/windows/n-series-driver-setup)
Nach der Installation des GRID-Treibers und einem Neustart der VM sieht die Ausgabe von SMI aus:
Dass der GRID-Treiber verwendet wird, erkennt Ihr an der Zeichenfolge „WDDM“, das steht für Windows Display Driver Model. Ebenso taucht für die GPU auch ein Eintrag im Taskmanager auf.
Sobald ihr nun grafikintensive Programme nutzt, wird das im Taskmanager sichtbar.
Zusammenfassung:
Sollen grafikintensive Workloads in Azure auf einer VM vom Typ NCasT4_v3 per RDP bereitgestellt werden, müsst Ihr manuell den NVIDIA-GRID-Treiber installieren, da die GPU sonst nur für Berechnungen mittels CUDA genutzt werden kann.