Über das Aufkommen der CUDA-Unterstützung in WSL 2

Microsoft reagierte auf zahlreiche Anfragen von Benutzern und stellte im Mai 2020 auf der Build-Konferenz eine neue Funktion des Windows-Subsystems für Linux 2 ( Windows-Subsystem für Linux 2 , WSL 2) vor - Unterstützung für Videobeschleuniger. Auf diese Weise können Sie spezielle Computeranwendungen in WSL 2 ausführen. Die GPU-Unterstützung eröffnet den Weg für professionelle Tools und hilft bei der Lösung von WSL 2-Aufgaben, die derzeit nur unter Linux gelöst werden können. Jetzt können solche Aufgaben in Windows mithilfe der Funktionen der GPU gelöst werden.



Hierbei ist es äußerst wichtig, dass die WSL die Hardware-Software-Architektur von Parallel Computing NVIDIA CUDA unterstützt .



Das Material, dessen Übersetzung wir veröffentlichen, wurde von NVIDIA-Spezialisten erstellt. Hier werden wir in der öffentlichen Vorschau der WSL 2 darüber sprechen, was Sie von CUDA erwarten können.





Ausführen von Linux AI-Frameworks in WSL 2-Containern



Was ist WSL?



WSL ist eine Windows 10-Funktion, mit der Sie Linux-Befehlszeilentools direkt unter Windows verwenden können, ohne sich mit der Komplexität der Anwendung einer Dual-Boot-Konfiguration befassen zu müssen. WSL ist eine containerisierte Umgebung, die eng in Microsoft Windows integriert ist. Auf diese Weise können Linux-Anwendungen neben herkömmlichen Windows-Anwendungen und modernen Anwendungen ausgeführt werden, die über den Microsoft Store vertrieben werden.



WSL ist in erster Linie ein Tool für Entwickler. Wenn Sie an bestimmten Projekten in Linux-Containern arbeiten, bedeutet dies, dass Sie dieselben Aufgaben lokal auf einem Windows-Computer mit vertrauten Linux-Tools ausführen können. Um solche Anwendungen unter Windows auszuführen, müssen Sie normalerweise viel Zeit für die Einrichtung des Systems aufwenden. Sie benötigen einige Frameworks und Bibliotheken von Drittanbietern. Mit der Veröffentlichung von WSL 2 hat sich nun alles geändert. Dank WSL 2 kam die volle Unterstützung für den Linux-Kernel in die Windows-Welt.



Dank der WSL 2- und GPU Paravirtualization (GPU-PV) -Technologie konnte Microsoft die Linux-Unterstützung unter Windows auf die nächste Stufe heben und so GPU-Rechen-Workloads ausführen. Im Folgenden werden wir mehr darüber sprechen, wie die GPU-Nutzung in WSL 2 aussieht.



Wenn Sie sich für das Thema Unterstützung für Videobeschleuniger in WSL 2 interessieren, schauen Sie sich dieses Material und dieses Repository an.



CUDA zu WSL



Um die GPU-Funktionen in WSL 2 nutzen zu können, muss auf dem Computer ein Grafiktreiber installiert sein, der Microsoft WDDM unterstützt . Solche Treiber werden von Herstellern von Grafikkarten wie NVIDIA erstellt.



Die CUDA-Technologie ermöglicht die Entwicklung von Programmen für NVIDIA-Videobeschleuniger. Diese Technologie wird in WDDM unter Windows seit vielen Jahren unterstützt. Der neue WSL 2-Container von Microsoft bietet GPU-beschleunigte Computerfunktionen, die von der CUDA-Technologie genutzt werden können, sodass CUDA-basierte Programme in WSL ausgeführt werden können. Weitere Informationen finden Sie im WSL CUDA- Benutzerhandbuch .



Die CUDA-Unterstützung in WSL ist in den NVIDIA-Treibern für WDDM 2.9 enthalten. Diese Treiber sind einfach genug, um unter Windows installiert zu werden. WSL CUDA-Benutzermodus-Treiber (libcuda.so) werden automatisch im Container verfügbar, und der Loader kann sie erkennen.



Das NVIDIA-Treiberentwicklungsteam hat dem CUDA-Treiber Unterstützung für WDDM und GPU-PV hinzugefügt. Dies geschieht, damit diese Treiber in einer Linux-Umgebung unter Windows funktionieren können. Diese Treiber befinden sich noch im Vorschaustatus. Ihre Veröffentlichung erfolgt nur, wenn die offizielle WSL-Veröffentlichung mit GPU-Unterstützung erfolgt. Details zur Treiberfreigabe finden Sie hier .



Die folgende Abbildung zeigt ein Diagramm zum Verbinden des CUDA-Treibers mit WDDM in einem Linux-Gast.





CUDA-fähiger WDDM-Treiber im Benutzermodus, der auf einem Linux-Gast ausgeführt wird



Angenommen, Sie sind ein Entwickler, der die WSL-Distribution auf dem neuesten Windows-Build von Fast Ring (Build 20149 oder älter) des Microsoft Windows Insider-Programms (WIP)installiert hat. Wenn Sie zu WSL 2 gewechselt sind und über eine NVIDIA-GPU verfügen, können Sie den Treiber ausprobieren und Ihren GPU-Rechencode in WSL 2 ausführen. Sie müssen lediglich den Treiber auf dem Windows-Host installieren und den WSL-Container öffnen. Hier können Sie ohne zusätzlichen Aufwand mit CUDA-Anwendungen arbeiten. Die folgende Abbildung zeigt, wie eine TensorFlow-Anwendung mit CUDA-Funktionen in einem WSL 2-Container ausgeführt wird.





TensorFlow-Container, der in WSL 2 ausgeführt wird



Die Tatsache, dass CUDA jetzt in WSL verfügbar ist, ermöglicht die Ausführung von Anwendungen in WSL, die zuvor nur in einer regulären Linux-Umgebung ausgeführt werden konnten.



NVIDIA arbeitet weiterhin aktiv an diesem Projekt und verbessert es. Unter anderem arbeiten wir daran, WDDM-APIs hinzuzufügen, die zuvor ausschließlich für Linux entwickelt wurden. Dies führt dazu, dass immer mehr Anwendungen in der WSL ausgeführt werden können, ohne dass der Benutzer zusätzliche Anstrengungen unternehmen muss.



Ein weiteres Thema, das uns interessiert, ist die Leistung. Wie bereits erwähnt, nimmt die GPU-Unterstützung in WSL 2 die GPU-PV-Technologie ernst. Dies kann sich nachteilig auf die Geschwindigkeit auswirken, mit der kleine Aufgaben auf der GPU ausgeführt werden, wenn kein Pipelining verwendet wird. Wir arbeiten gerade daran, diese Effekte so weit wie möglich zu reduzieren.



NVML



Das ursprüngliche Treiberpaket enthält keine NVML-Technologie. Wir bemühen uns, dies zu beheben, indem wir planen, NVML-Unterstützung und Unterstützung für andere Bibliotheken zur WSL hinzuzufügen.



Wir haben mit dem Haupt-CUDA-Treiber begonnen, mit dem Benutzer die meisten vorhandenen CUDA-Anwendungen bereits in den frühen Phasen der CUDA-Unterstützung in WSL ausführen können. Wie sich jedoch herausstellte, verwenden einige Container und Anwendungen NVML, um GPU-Informationen abzurufen, noch bevor CUDA geladen wird. Aus diesem Grund ist das Hinzufügen von NVML-Unterstützung zur WSL eine unserer obersten Prioritäten. Es ist durchaus möglich, dass wir bald gute Nachrichten über die Lösung dieses Problems veröffentlichen können.



GPU-Container in der WSL



Zusätzlich zur WSL 2-Unterstützung für DirectX und CUDA arbeitet NVIDIA daran, WSL 2 Unterstützung für das NVIDIA Container Toolkit (früher nvidia-docker2 genannt) hinzuzufügen. Containerisierte GPU-Anwendungen, die Data Scientists für die Ausführung in einer lokalen oder Cloud-Linux-Umgebung erstellen, können jetzt ohne Änderungen in WSL 2 auf Windows-Computern ausgeführt werden.



Hierfür sind keine speziellen WSL-Pakete erforderlich. Die NVIDIA-Laufzeitbibliothek (libnvidia-container) kann die libdxcore-Bibliothek dynamisch erkennen und verwenden, wenn der Code in einer WSL 2-Umgebung ausgeführt wird, die die GPU-Beschleunigung unterstützt. Dies geschieht automatisch nach der Installation der Docker- und NVIDIA Container Toolkit-Pakete, genau wie unter Linux. Auf diese Weise können Sie Container mit den GPU-Funktionen in WSL 2 ohne zusätzlichen Aufwand ausführen.



Wir empfehlen dringend, dass diejenigen, die diese Option verwenden möchten, --gpusdie neuesten Docker-Tools (19.03. Oder höher) installieren. Befolgen Sie zum Aktivieren der WSL 2-Unterstützung die Anweisungen für Ihre Linux-Distribution und installieren Sie die neueste verfügbare Version nvidia-container-toolkit.



Wie es funktioniert? Alle für WSL 2 spezifischen Aufgaben werden mit der libnvidia-Container- Bibliothek gelöst . Jetzt kann diese Bibliothek zur Laufzeit das Vorhandensein von libdxcore.so erkennen und diese Bibliothek verwenden, um alle für diese Schnittstelle sichtbaren GPUs zu erkennen.



Wenn Sie diese GPUs im Container verwenden müssen, greifen Sie mit libdxcore.so auf den Speicherort des Treibers zu, den Ordner, der alle Treiberbibliotheken für das Windows-Hostsystem und WSL 2 enthält. Die Bibliothek libnvidia-container.so ist für die Konfiguration des Containers verantwortlich damit Sie korrekt auf das Treiber-Repository zugreifen können. Dieselbe Bibliothek ist für die Konfiguration der von WSL 2 unterstützten Basisbibliotheken verantwortlich. Dies ist in der folgenden Abbildung schematisch dargestellt.





Das von libnvidia-container.so in WSL 2 verwendete Treiberspeichererkennungs- und Containerzuordnungsschema



unterscheidet sich auch von der außerhalb von WSL verwendeten Logik. Dieser Prozess ist mit libnvidia-container.so vollständig abstrahiert und sollte für den Endbenutzer so transparent wie möglich sein. Eine der Einschränkungen dieser frühen Version besteht darin, dass Sie in Umgebungen mit mehreren GPUs keine GPUs auswählen können. Alle GPUs sind immer im Container sichtbar.



Im WSL-Container können Sie alle NVIDIA Linux-Container ausführen, mit denen Sie bereits vertraut sind. NVIDIA unterstützt die interessantesten Linux-Tools und Workflows, die von Profis verwendet werden. Laden Sie den gewünschten Container von NVIDIA NGC herunterund probieren Sie ihn aus.



Jetzt werden wir darüber sprechen, wie TensorFlow- und N-Body-Container in WSL 2 ausgeführt werden, die NVIDIA-GPUs verwenden, um die Datenverarbeitung zu beschleunigen.



Ausführen des N-Body-Containers 



Installieren Sie Docker mithilfe des Installationsskripts:



user@PCName:/mnt/c$ curl https://get.docker.com | sh


Installieren Sie das NVIDIA Container Toolkit. Die WSL 2-Unterstützung ist ab nvidia-docker2 v2.3 und ab der Laufzeitbibliothek libnvidia-container 1.2.0-rc.1 verfügbar.



Lassen Sie uns so konfigurieren , die Repositorys stableund experimentalund der GPG - Schlüssel. Änderungen am Laufzeitcode, die WSL 2 unterstützen sollen, sind im experimentellen Repository verfügbar.



user@PCName:/mnt/c$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

user@PCName:/mnt/c$ curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list


Installieren Sie die NVIDIA-Laufzeitpakete und ihre Abhängigkeiten:



user@PCName:/mnt/c$ sudo apt-get update
user@PCName:/mnt/c$ sudo apt-get install -y nvidia-docker2


Öffnen wir einen WSL-Container und starten den Docker-Daemon darin. Wenn alles richtig gemacht wurde, können Sie Servicemeldungen sehen dockerd.



user@PCName:/mnt/c$ sudo dockerd




Starten des Docker-Dämons



Laden Sie in einem anderen WSL-Fenster den N-Body-Simulationscontainer und führen Sie ihn aus. Der Benutzer, der diese Aufgabe ausführt, muss über ausreichende Berechtigungen zum Laden des Containers verfügen. Die folgenden Befehle müssen möglicherweise mit sudo ausgeführt werden. In der Ausgabe sehen Sie Informationen zur GPU.



user@PCName:/mnt/c$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark




Ausführen des N-Body-Containers



Ausführen eines TensorFlow-Containers



Versuchen wir in Docker in der WSL 2-Umgebung einen weiteren beliebten Container - TensorFlow.



Laden Sie das TensorFlow Docker-Image herunter. Führen Sie den folgenden Befehl im Sudo-Modus aus, um Probleme beim Herstellen einer Verbindung mit Docker zu vermeiden:



user@PCName:/mnt/c$ docker pull tensorflow/tensorflow:latest-gpu-py3


Speichern Sie die leicht modifizierte Version des GPU- Tutorials von TensorFlow Tutorial 15 auf der Festplatte des CHostsystems. Diese Festplatte wird standardmäßig in einem WSL 2-Container als bereitgestellt /mnt/c.



user@PCName:/mnt/c$ vi ./matmul.py
import sys
import numpy as np
import tensorflow as tf
from datetime import datetime

device_name = sys.argv[1]  # Choose device from cmd line. Options: gpu or cpu
shape = (int(sys.argv[2]), int(sys.argv[2]))
if device_name == "gpu":
    device_name = "/gpu:0"
else:
    device_name = "/cpu:0"

tf.compat.v1.disable_eager_execution()
with tf.device(device_name):
    random_matrix = tf.random.uniform(shape=shape, minval=0, maxval=1)
    dot_operation = tf.matmul(random_matrix, tf.transpose(random_matrix))
    sum_operation = tf.reduce_sum(dot_operation)

startTime = datetime.now()
with tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True)) as session:
        result = session.run(sum_operation)
        print(result)

#  
print("Shape:", shape, "Device:", device_name)
print("Time taken:", datetime.now() - startTime)


Im Folgenden werden die Ergebnisse der Ausführung dieses Skripts gezeigt, das von einer in einem Container bereitgestellten Festplatte ausgeführt wird C. Das Skript wurde zuerst mit der GPU und dann mit der CPU ausgeführt. Der Einfachheit halber wurde die Ausgabe hier reduziert.



user@PCName:/mnt/c$ docker run --runtime=nvidia --rm -ti -v "${PWD}:/mnt/c" tensorflow/tensorflow:latest-gpu-jupyter python /mnt/c/matmul.py gpu 20000




Ergebnisse der Skriptausführung von Matmul.py



Bei Verwendung der GPU im WSL 2-Container wird die Codeausführung im Vergleich zur Ausführung auf der CPU erheblich beschleunigt.



Lassen Sie uns ein weiteres Experiment durchführen, um die Leistung des GPU-Computing zu untersuchen. Es geht um Code aus dem Jupyter Notebook-Handbuch. Nach dem Starten des Containers sollte ein Link zum Jupyter Notebook-Server angezeigt werden.



user@PCName:/mnt/c$ docker run -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter




Starten des Jupyter Notebook



Sie sollten nun in der Lage sein, die Demos in der Jupyter Notebook-Umgebung auszuführen. Beachten Sie, dass Sie anstelle von 127.0.0.1 eine Verbindung zum Jupyter Notebook über den Microsoft Edge-Browser herstellen müssenlocalhost.



Gehen Sie zutensorflow-tutorialsund starten Sie den Editorclassification.ipynb.



Um die Ergebnisse der GPU-BeschleunigunganzuzeigenCell, rufen Siedas Menü auf, wählen SieRun Alldas Protokoll im WSL 2 Jupyter Notebook-Container aus und zeigen Sie es an.





Jupyter Notebook Magazine Mit



dieser und einigen anderen Demos in diesem Container können Sie die Probleme mit der Virtualisierungsebene erkennen, die mit einer unangemessen hohen zusätzlichen Belastung des Systems bei der Lösung kleiner Aufgaben zusammenhängen. Wir haben oben bereits darüber gesprochen. Da wir hier sehr kleine Trainingsmodelle einführen, ist ihre Ausführungszeit auf der GPU kürzer als die Zeit, die zur Lösung von Synchronisationsproblemen erforderlich ist. Bei der Lösung solcher "Spielzeug" -Probleme in WSL 2 kann die CPU effizienter sein als die GPU. Wir gehen dieses Problem an, um seine Erscheinungsformen auf nur sehr kleine Workloads zu beschränken, bei denen kein Pipelining angewendet wird.



WSL Übersicht



Um zu verstehen, wie die GPU-Unterstützung zu WSL 2 hinzugefügt wurde, werden wir nun darüber sprechen, was der Linux-Start unter Windows ist und wie Container Hardware sehen.



Microsoft hat die WSL-Technologie 2016 bei Build vorgestellt. Diese Technologie fand schnell breite Anwendung und wurde bei Linux-Entwicklern beliebt, die Windows-basierte Anwendungen wie Office sowie Entwicklungstools für Linux und verwandte Programme ausführen mussten.



Auf dem WSL 1-System konnten unveränderte Linux-Binärdateien ausgeführt werden. Hier wurde jedoch die Linux-Kernel-Emulationsschicht verwendet, die als NT-Kernel-Subsystem implementiert wurde. Dieses Subsystem verarbeitete Aufrufe von Linux-Anwendungen und leitete sie an die entsprechenden Windows 10-Mechanismen weiter.



WSL 1 war ein nützliches Tool, aber es war nicht mit allen Linux-Anwendungen kompatibel, da es absolut jeden Linux-Systemaufruf emulieren musste. Darüber hinaus waren die Dateisystemvorgänge langsam, was bei einigen Anwendungen zu einer unannehmbar geringen Leistung führte.



Vor diesem Hintergrund entschied sich Microsoft für den anderen Weg und veröffentlichte WSL 2, eine neue Version von WSL. WSL 2-Container führen vollständige Linux-Distributionen in einer virtualisierten Umgebung aus, nutzen jedoch weiterhin das neue Windows 10-Containerisierungssystem.



Während WSL 2 die Hyper-V-Dienste von Windows 10 verwendet, handelt es sich nicht um eine herkömmliche virtuelle Maschine, sondern um eine einfache Virtualisierungshilfe-Engine. Dieser Mechanismus ist für die Verwaltung des mit dem physischen Speicher verknüpften virtuellen Speichers verantwortlich, sodass WSL 2-Container Speicher dynamisch zuweisen können, indem sie auf das Windows-Hostsystem zugreifen.



Zu den Hauptzielen bei der Erstellung von WSL 2 gehört eine Steigerung der Leistung bei der Arbeit mit dem Dateisystem und die Gewährleistung der Kompatibilität mit allen Systemaufrufen. Darüber hinaus wurde WSL 2 entwickelt, um den Integrationsgrad zwischen WSL und Windows zu verbessern. Auf diese Weise können Sie bequem mit einem Linux-System arbeiten, das in einem Container mit den Windows-Befehlszeilentools ausgeführt wird. Dies verbessert auch die Benutzerfreundlichkeit des Host-Dateisystems, das automatisch in den ausgewählten Verzeichnissen des Container-Dateisystems bereitgestellt wird.



WSL 2 wurde im Windows Insider-Programm als Vorschau-Funktion eingeführt und im neuesten Windows 10-Update, Version 2004, veröffentlicht.



In WSL 2 aus der neuesten Windows-Version wurden noch weitere Verbesserungen vorgenommen, die viele Dinge betreffen - von Netzwerkstapeln bis zu den grundlegenden VHD-Mechanismen des Speichersystems. Eine Beschreibung aller neuen Funktionen von WSL 2 würde den Rahmen dieses Artikels sprengen. Weitere Informationen finden Sie auf dieser Seite, auf der WSL 2 und WSL 1 verglichen werden.



Linux Core WSL 2



Der in WSL 2 verwendete Linux-Kernel wurde von Microsoft basierend auf dem neuesten stabilen Zweig unter Verwendung des auf kernel.org verfügbaren Quellcodes kompiliert. Dieser Kernel wurde speziell für WSL 2 optimiert und hinsichtlich Größe und Leistung für die Ausführung von Linux unter Windows optimiert. Der Kernel wird über den Windows Update-Mechanismus unterstützt. Dies bedeutet, dass sich der Benutzer nicht um das Herunterladen der neuesten Sicherheitsupdates und Kernelverbesserungen kümmern muss. All dies erfolgt automatisch.



Microsoft unterstützt mehrere Linux-Distributionen in WSL. Das Unternehmen veröffentlichte gemäß den Regeln der Open Source-Community im GitHub-Repository des WSL2-Linux-Kernel den Quellcode für den WSL 2-Kernel mit den für die Integration in Windows 10 erforderlichen Änderungen. 



GPU-Unterstützung in der WSL



Microsoft hat WSL 2-Containern Unterstützung für echte GPUs mit GPU-PV-Technologie hinzugefügt. Hier marshallt der Grafikkernel des Betriebssystems (dxgkrnl) den auf dem Host befindlichen Kernelmodustreiber mit Aufrufen von Benutzermoduskomponenten, die in der virtuellen Gastmaschine ausgeführt werden.



Microsoft hat diese Technologie als WDDM-Funktion entwickelt. Seit ihrer Einführung wurden mehrere Windows-Versionen veröffentlicht. Diese Arbeiten wurden unter Einbeziehung unabhängiger Hardwareanbieter (Independent Hardware Vendor, IHV) durchgeführt. NVIDIA-Grafiktreiber unterstützen GPU-PV seit den Anfängen dieser Technologie in den Vorschauversionen der im Windows Insider-Programm verfügbaren Produkte. Auf alle derzeit unterstützten NVIDIA-GPUs kann das Gastbetriebssystem in einer virtuellen Maschine mit Hyper-V zugreifen.



Um die GPU-PV-Funktionen in WSL 2 nutzen zu können, musste Microsoft die Basis seines Grafik-Frameworks für den Linux-Gast erstellen: WDDM mit Unterstützung für das GPU-PV-Protokoll. Der neue Microsoft-Treiber steht hinter dxgkrnl, dem System, das für die Unterstützung von WDDM unter Linux verantwortlich ist. Treiber - Code kann im WSL2-Linux-Kernel - Repository.



Es wird erwartet, dass Dxgkrnl GPU-Beschleunigungsunterstützung in WSL 2-Containern in WDDM 2.9 bietet. Microsoft sagt, dass dxgkrnl ein Linux-GPU-Treiber ist, der auf dem GPU-PV-Protokoll basiert, und dass es nichts mit dem Windows-Treiber mit einem ähnlichen Namen zu tun hat.



Sie können derzeit die Vorschau-Version des NVIDIA WDDM 2.9- Treibers herunterladen. In den nächsten Monaten wird dieser Treiber über Windows Update in der WIP-Version von Windows verteilt, sodass das manuelle Herunterladen und Installieren des Treibers nicht erforderlich ist.



GPU-PV-Grundlagen



Der Treiber dxgkrnl stellt das neue Gerät / dev / dxg im Benutzermodus im Linux-Gast zur Verfügung. Die unter Windows verfügbare D3DKMT-Kernel-Serviceschicht wurde ebenfalls als Teil der dxcore-Bibliothek auf Linux portiert. Es interagiert mit dxgkrnl über eine Reihe privater IOCTL-Aufrufe.



Die Linux-Gastversion von dxgkrnl stellt über mehrere VM-Buskanäle eine Verbindung zum dxg-Kernel auf dem Windows-Host her. Der dxg-Kernel auf dem Host behandelt das, was aus dem Linux-Prozess stammt, genauso wie das, was aus normalen Windows-Anwendungen mit WDDM stammt. Der dxg-Kernel sendet nämlich das, was er empfängt, an die KMD (Kernelmodus-Treiber, ein Kernelmodus-Treiber, der für jedes HIV einzigartig ist). Der Kernel-Modus-Treiber bereitet das Empfangen für das Senden an einen Hardware-Grafikbeschleuniger vor. Die folgende Abbildung zeigt ein vereinfachtes Diagramm der Interaktion zwischen dem Linux-Gerät / dev / dxg und KMD.





Ein vereinfachtes Diagramm, wie Windows-Hostkomponenten es dem dxg-Gerät ermöglichen, in einem Linux-Gast zu arbeiten



Wenn es darum geht, dieses Verhalten in Windows-Gästen bereitzustellen , unterstützen NVIDIA-Treiber GPU-PV in Windows 10 seit geraumer Zeit. NVIDIA-GPUs können verwendet werden, um die Rechen- und Grafikausgabe in allen Windows 10-Anwendungen mithilfe der Virtualisierungsebene von Microsoft zu beschleunigen. Mit GPU-PV können Sie mit vGPU arbeiten. Hier einige Beispiele für ähnliche Anwendungen:





So sieht es aus, als würde eine DirectX-Anwendung in einem Windows Sandbox-Container mit dem NVIDIA GeForce GTX 1070-Videobeschleuniger ausgeführt.





Grafikbeschleunigung im Windows Sandbox-Container von NVIDIA GeForce GTX 1070



Unterstützung des Benutzermodus



Um die Unterstützung für die Grafikausgabe in der WSL hinzuzufügen, hat das entsprechende Microsoft-Entwicklungsteam auch die dxcore-Benutzermoduskomponente auf Linux portiert.



Die dxcore-Bibliothek bietet eine API, mit der Sie Informationen zu WDDM-kompatiblen Grafikkarten abrufen können, die auf dem System verfügbar sind. Diese Bibliothek wurde als plattformübergreifender Ersatz für das DXGI-Adapter-Tool unter Windows und Linux konzipiert. Die Bibliothek abstrahiert auch den Zugriff auf dxgkrnl-Dienste (IOCTL-Aufrufe unter Linux und GDI-Aufrufe unter Windows) mithilfe der D3DKMT-API-Schicht, die von CUDA und anderen Komponenten im Benutzermodus verwendet wird, die auf WSL-WDDM-Unterstützung basieren.



Laut Microsoft wird die dxcore-Bibliothek (libdxcore.so) sowohl unter Windows als auch unter Linux verfügbar sein. NVIDIA plant, dem Treiber Unterstützung für DirectX 12 und die CUDA-API hinzuzufügen. Diese Add-Ons zielen auf die neuen WSL-Funktionen ab, die mit WDDM 2.9 verfügbar sind. Beide Bibliotheken, die die API darstellen, werden mit dxcore verbunden, damit sie dxg Anweisungen zum Marshalling ihrer KMD-Anforderungen auf dem Hostsystem geben können.



Probieren Sie die neuen WSL 2-Funktionen aus



Möchten Sie Ihren Windows-Computer verwenden, um echte Probleme aus den Bereichen maschinelles Lernen und künstliche Intelligenz zu lösen und gleichzeitig alle Annehmlichkeiten einer Linux-Umgebung nutzen? Wenn ja, bietet Ihnen die CUDA-Unterstützung von WSL eine großartige Gelegenheit, genau das zu tun. In der WSL-Umgebung haben sich die CUDA Docker-Container als die beliebteste Computerumgebung unter Datenwissenschaftlern erwiesen.



  • Um Zugriff auf die GPU-beschleunigte Vorschau WSL 2 zu erhalten, können Sie dem Windows Insider-Programm beitreten .
  • Laden Sie die neuesten NVIDIA-Treiber herunter , installieren Sie sie und versuchen Sie, einen CUDA-Container in WSL 2 auszuführen.


Hier erfahren Sie mehr über die Verwendung der CUDA-Technologie in der WSL. Hier im CUDA- und WSL-Forum können Sie Ihre Eindrücke, Beobachtungen und Ideen zu diesen Technologien mit uns teilen.



Haben Sie CUDA in WSL 2 schon ausprobiert?






All Articles