CUDA Installation unter Ubuntu

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Die Installation der CUDA-Bibliotheken auf Linux-Systemen ist auf vielen verschiedenen Wegen möglich. NVIDIA stellt auf seiner Website Installationspakete zur Verfügung,[1] aber auch die Distributionen bringen ihre eigenen Pakete mit. Je nachdem, wozu CUDA verwendet werden soll, ist die eine oder andere Installationsart zu bevorzugen. Oft wird CUDA für Machine Learning Frameworks oder andere Software benötigt. Es braucht dann in der Regel eine bestimmte CUDA-Version. Diese muss dann mit den Treibern der GPU-Karte und der Build-Umgebung auf den System kompatibel sein. Deshalb ist es manchmal nötig, die Installationsarten zu mischen. Der folgende Artikel zeigt, wie eine CUDA Umgebung unter Ubuntu 18.04 LTS eingerichtet wird.

Installationsarten

Für die Installation der CUDA Umgebung stehen folgende Möglichkeiten zur Verfügung:

  • Installationsskript ("runfile") von NVIDIA
  • Distributionsabhängige Installer-Pakete von NVIDIA (lokal)
  • Distributionsabhängige Installer-Pakete von NVIDIA (Netzwerk)
  • Installation über die Paketverwaltung der Distribution

Im Folgenden wird der Installationsprozess von CUDA am Beispiel von Ubuntu 18.04 beschrieben. Die Installation soll so erfolgen, dass später ein Tensorflow-Framework eingerichtet werden kann. Als GPUs kommen zwei GeForce GTX 1070 Karten zum Einsatz.

Für Ubuntu 18.04 bietet NVIDIA noch keine Installationsskripte oder Installer-Pakete an. Auch die Installation über die Ubuntu-Paketverwaltung führt nicht zum Ziel, da ein aktuelles Tensorflow CUDA 9.0 voraussetzt, Ubuntu 18.04 aber bereits CUDA 9.1 installiert. Wir entscheiden uns deshalb dafür, die Treiber-Installation über die Distribution zu erstellen und das eigentliche Framework von der NVIDIA-Seite zu installieren.

NVIDIA-Grafiktreiber installieren

Für CUDA müssen immer die proprietären Treiber der GPU installiert werden, die Open-Source-Treiber (noveau) für NVIDIA-Karten funktionieren nicht. Aktuelle Informationen über NVIDIA Grafiktreiber für Ubuntu finden sich auf der Infoseite des PPAs.[2]

In der Regel ist es sinnvoll, die entsprechende Long Live Branch zu installieren, im Fall von Ubuntu 18.04 (Bionic) ist das Version 9.0.

Um sicher zu gehen, dass keine alten Treiber mehr im Weg sind, werden diese komplett entfernt:

sudo apt purge nvidia*

Anschließend wird das Repository mit den proprietären Treibern hinzugefügt:

sudo add-apt-repository ppa:graphics-drivers
sudo apt update
sudo apt install nvidia-390

Hier gäbe es auch die Möglichkeit der automatischen Treiberinstallation, sprich keinen spezifischen Treiber wie nvidia-390 zu installieren, sondern das Betriebssystem entscheiden zu lassen: ubuntu-drivers autoinstall. In der Praxis kann es dabei aber zu Kompatibilitätsproblemen mit CUDA kommen, da dann sehr neue Treiber installiert werden. Mit einer etwas konservativeren Treiberwahl ist man auf der sicheren Seite.

Nach einem Reboot sollten die bisher verwendeten Open-Source-Treiber (noveau) nicht mehr geladen werden und die neuen Treiber zur Verfügung stehen:

cudatest@ubuntu-18-04:~$ lsmod | grep noveau
cudatest@ubuntu-18-04:~$ lsmod | grep nvidia
nvidia_uvm            757760  0
nvidia_drm             40960  2
nvidia_modeset       1110016  4 nvidia_drm
nvidia              14340096  203 nvidia_modeset,nvidia_uvm
drm_kms_helper        172032  1 nvidia_drm
drm                   401408  5 nvidia_drm,drm_kms_helper
ipmi_msghandler        53248  2 nvidia,ipmi_devintf

Anschließend sorgt man noch dafür, dass die Treiber-Version bei künftigen Ubuntu-Updates beibehalten wird:

sudo apt-mark hold nvidia-390

Hat die Installation geklappt, lassen sich mit dem Tool nvidia-smi (Bestandteil der Nvidia-Utilities) detaillierte Informationen zu den installierten Karten anzeigen:

cudatest@ubuntu-18-04:~$ nvidia-smi
Fri Jul 27 09:58:23 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48                 Driver Version: 390.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 00000000:17:00.0 Off |                  N/A |
| 27%   38C    P8     6W / 151W |      2MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1070    Off  | 00000000:65:00.0  On |                  N/A |
| 29%   43C    P8    11W / 151W |    124MiB /  8116MiB |     13%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    1      1119      G   /usr/lib/xorg/Xorg                           107MiB |
|    1      2013      G   ...nux-gnu/webkit2gtk-4.0/WebKitWebProcess    13MiB |
+-----------------------------------------------------------------------------+

Installation von CUDA 9.0

Für die Installation von CUDA selbst ist es wichtig zu wissen, welche Version man benötigt. Einige Programme und Frameworks mit CUDA-Unterstützung laufen nicht mit der aktuellen Version, sondern benötigen ältere. Wer kein Framework braucht oder sicher ist, dass CUDA 9.1 aus den Paketquellen für seine Zwecke passt, kann einfach mit

apt install nvidia-cuda-toolkit

diese Version installieren. Das hat den Vorteil, dass keine Software am Betriebssytem vorbei verwaltet werden muss. Bei Ubuntu 18.04 wird dabei die Version 9.1 des Toolkits installiert. Beispielsweise verlangt aber das beliebte Machine-Learning-Framework Tensorflow aktuell CUDA Version 9.0.[3]

Sollte sich herausstellen, dass ein bereits installiertes CUDA-Toolkit nicht kompatibel zur verwendeten Software ist, entfernt man es am besten vollständig:

apt autoremove nvidia-cuda-toolkit --purge

Anschließend kann das passende Toolkit von der NVIDIA-Website installiert werden. Hierfür müssen wir unbedingt das Runfile für CUDA-Version 9.0 und Ubuntu 17.04 herunterladen. Denn das lokale Deb-Paket versucht, die GPU-Treiber erneut zu installieren, was bei 18.04 Fehler verursacht und dazu führen kann, dass das System nicht mehr bootfähig ist. Das Network-Paket würde darüber hinaus statt CUDA 9.0 die aktuelle Version 9.2 installieren, die mit Tensorflow nicht kompatibel ist.

wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run

Das Runfile beinhaltet ein Shellskript, das ausführbar gemacht und gestartet wird. NVIDIA verlangt in der Installationsanleitung, dass vor der Ausführung das System in Runlevel 3 versetzt wird. Das ist nicht notwendig, wenn wie hier keine GPU-Treiber aus dem Runfile installiert werden.

chmod 744 cuda_9.0.176_384.81_linux-run</code> <code>sh cuda_9.0.176_384.81_linux-run --override

Die Option --override gibt an, CUDA auch dann zu installieren, wenn bestimmte Bedingungen wie Compiler etc. nicht den Vorgaben entsprechen. Sie ist hier notwendig, da das Paket für Ubuntu 17.04 gebaut wurde.

Das Skript verlangt im ersten Schritt das Akzeptieren der Lizenzbedingungen und fragt danach ab, ob die neuesten Treiber installiert werden sollen. Wer die Treiberverwaltung, wie oben angegeben, dem Betriebssystem überlässt, muss diese Frage unbedingt verneinen. Bei allen anderen Fragen können bejaht bzw. die vorgeschlagenen Defaultwerte übernommen werden.

Eine weitere Abhängigkeit besteht in der Version des gcc-Compilers. Für CUDA 9.0 ist der gcc 6 notwendig, für den offizielle Pakete existieren und der sich mit folgendem Befehl schnell nachinstallieren lässt:

apt-get install gcc-6 g++-6 g++-6-multilib gfortran-6

Pfade und Symlinks konfigurieren

Anschließend sind die Pfade zu den Bibliotheken zu ergänzen. Dazu fügt man folgende Zeilen in der .bashrc hinzu:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Falls mehrere GCC-Varianten installiert sind, muss CUDA noch mitgeteilt werden, welchen Compiler es verwenden soll. Dazu genügen Symlinks:

sudo ln -s /usr/bin/gcc-6 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-6 /usr/local/cuda/bin/g++

Funktionstests

Das Runfile von NVIDIA installiert innerhalb des Home-Verzeichnisses des Nutzers eine umfangreiche Sammlung von Beispielen, mit denen sich die Funktion des CUDA-Toolkits überprüfen lässt:

~/NVIDIA_:CUDA-9.0_Samples

Ein make im jeweiligen Verzeichnis des Beispielprogramms erzeugt dann im folgenden Verzeichnis die jeweiligen ausführbaren Dateien:

~/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release

Im NVIDIA-Installationspaket enthalten ist auch NSight, eine vollständige Entwicklungsumgebung auf Eclipse-Basis.[4] Diese lässt sich im Menü unter "Entwicklung" aufrufen. Auch damit lassen sich die Beispielprogramme starten und modifizieren sowie eigene Anwendungen erstellen.

Einzelnachweise

Das könnte Sie auch interessieren

Einstieg in die CUDA-Programmierung mit C
Nvidia-healthmon