GPU-Beschleunigtes Machine Learning unter Windows Subsystem for Linux

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).

Microsoft heart Linux (Banner)

Halleluja – GPU-Unterstützung für das Windows Subsystem for Linux (WSL)

 

WSL CUDA Software Architektur Überblick
Software Architektur Ebenen für Machine Learning mit GPU Support unter 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.

Aufforderung den Linux kernel von WSL 2 manuell zu updaten

  • 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

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.runaus (der Name des run-Files wird natürlich abweichen).

CUDA Toolkit Installation: Zielplattform Auswahl auf NVIDIAs Website
Auswahl der CUDA Toolkit Komponenten während der Installation via run File

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:

Laufzeitvergleich Matrixmultiplikationen CPU gegen GPU

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!

Florian Gabsteiger
Letzte Artikel von Florian Gabsteiger (Alle anzeigen)