Microsoft hat die Gebete zahlloser Machine Learning Enthusiasten weltweit erhört: mit der neuen Windows Insider Preview kommt GPU-Unterstützung für das Windows Subsystem for Linux (WSL).
Halleluja – GPU-Unterstützung für das Windows Subsystem for Linux (WSL)
Wer, freiwillig oder nicht, hauptsächlich in der Redmond-Welt Software entwickelt, stößt früher oder später auf Windows Subsystem for Linux (WSL). Dieses bietet gleich mehrere Vorteile: Das Betriebssystem muss nicht gewechselt werden, um in die favorisierte Linux Distro zu wechseln, wodurch der Workflow nicht unterbrochen wird. Es gibt weniger Fehlermeldung in der Windows-Kommandozeile cmd, wenn man mal ls
statt dir
getippt hat. Weiterhin laufen Docker Container mit WSL in einem nativen Linux Kernel. Und nicht zuletzt vermittelt es das Gefühl, dass Developer Advocates auch beim ehemaligen Feindbild Microsoft Gehör finden.
Wer sich außerdem mit Machine Learning (ML) beschäftigt, stößt leider auch sehr schnell auf diesen WSL GitHub Issue von 2017: „GPU not accessible for running tensorflow and installing CUDA“. Also: Zurück zum alten Freund Dual Boot. Bis jetzt. Im Mai kündigte Microsoft auf seiner Hausmesse BUILD den nativen GPU Support für WSL an. Mitte Juni war es dann soweit: Die ersten Mutigen konnten das neue Feature ausprobieren.
Warum „mutig“? Weil dafür einige mit Beta oder Preview beschriftete Checkboxen gesetzt sein müssen.
Voraussetzungen und Installationstipps
Im Folgenden möchte ich euch noch stichpunktartig von Voraussetzungen und meinen Lessons Learned bei der Installation berichten.
- Windows Insider Preview (Fast Ring/Dev Channel), mindestens Build 20150
Einfach winver
in PowerShell oder cmd tippen, um den eigenen Build zu überprüfen.
- Windows Subsystem for Linux 2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
wsl.exe --set-default-version 2
Falls diese Aufforderung zum Update des Linux Kernels für WSL 2 erscheint, muss das hier erhältliche Installationspaket installiert werden. Hintergründe zu diesem Update können in Microsofts DevBlog nachgelesen werden.
- Euer Linux Kernel sollte danach mindestens die Version 4.19.121 haben.
Überprüfen könnt ihr eure lokale Version mit wsl cat /proc/version
- Als Linux Distribution würde ich euch Ubuntu 18.04 oder 20.04 empfehlen, da ich hier die wenigsten Probleme mit dem CUDA Toolkit erlebt habe.
Unabhängig von der gewählten Distribution sollte das Kommando wsl -l -v
die Version 2 melden
- Version 455.41 des NVIDIA Preview Treiber für CUDA unter WSL 2 für GeForce & Quadro GPUs
Die CUDA Treiber Version überprüft ihr mit nvidia-smi
Vorsicht: Windows hat mir nach dem nächsten Reboot wieder die alte Treiberversion installiert. Lieber einmal zuviel nvidia-smi
als einmal zu wenig! Außerdem sei darauf hingewiesen, dass selbst neuere Treiber (z.B. der neu erschienene Game Ready Driver Version 451.67) CUDA unter WSL nicht unterstützen. Aktuell solltet ihr also immer den Preview Treiber der oben verlinkten Website verwenden. Ihr könnt Windows mit Hilfe von Group Policies daran hindern für spezifische Geräte automatische Treiberupdates zu installieren.
- Installation des CUDA Toolkits
Zur Installation des CUDA Toolkits habt ihr zwei Optionen. Gleich vorneweg: Ich würde euch die zweite empfehlen. Es kann nämlich passieren, dass ihr versehentlich unter Linux einen zusätzlichen NVIDIA Treiber installiert. Dies könnte das ganze Setup unbrauchbar machen.
Dieses Risiko wird bei Variante Numero zwei minimiert.
Variante 1: Ihr fügt NVIDIAs Public Key zu eurem Paketmanager hinzu und installiert das cuda-toolkit-<version>
meta-package in eurer gewünschten Version. Details findet ihr in NVIDIAs Dokumentation.
Variante 2: Ihr konfiguriert die zu eurem System passenden Komponenten auf NVIDIAs Website und führt das erzeugte run
file mit sudo sh cuda_10.1.243_418.87.00_linux.run
aus (der Name des run-Files wird natürlich abweichen).
Die CUDA Toolkit Version solltet ihr abhängig von eurem gewünschten Machine Learning Framework auswählen. Die (zum Zeitpunkt des Verfassens) neueste Version 11.0 ist beispielsweise mit NVIDIAs CUDA Docker Containern kompatibel; die aktuelle TensorFlow Version benötigt dagegen CUDA 10.1.
Vorsicht: NVIDIAs CUDA Docker Container sind nicht mit dem WSL 2 Backend von Docker Desktop kompatibel. Um sie zu nutzen, müsst Ihr Docker also direkt unter WSL installieren.
Endlich
Nach dieser nicht ganz intuitiven Installation können wir uns endlich daran machen, weltbewegende Machine Learning Algorithmen zu entwickeln. Alternativ können wir uns aber auch am Speedup von Matrixmultiplikationen in TensorFlow ergötzen:
Da es sich um ein Preview Feature handelt, können die oben genannten Befehle, Versionen etc. schnell veraltet sein. Ich werde versuchen den Artikel möglichst aktuell zu halten. Falls ihr auf Probleme stoßt o.ä. freuen wir uns natürlich über Kommentare!
- AI chatbot ChatGPT - 23. Dezember 2022
- Introduction to Neural Networks - 22. Dezember 2022
- GPU-Beschleunigtes Machine Learning unter Windows Subsystem for Linux - 19. August 2020