CUDA Installation

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Im folgenden Artikel wird die Installation von CUDA unter Ubuntu 10.04 64bit beschrieben. Für die Programmierung mit CUDA sind eine CUDA-fähige Grafikkarte, ein zugehöriger Nvidia-Treiber, das CUDA-Toolkit und ein Host-Compiler nötig.

Alle CUDA-Komponenten können kostenlos von den Nvidia-Seiten herunter geladen werden, der Host-Compiler wird Betriebssystem abhängig installiert. Eine Auflistung der vorhandenen CUDA-Software für Windows, Linux und Mac OS X, sowie der Link zum aktuellen Entwickler-Treiber findet sich auf der Linux CUDA-Developer Webseite.

Mit Hilfe der Installation von CUDA ist es dann möglich Applikationen zu entwickeln, die Berechnungen auf der Grafikkarte ausführen.

Benötigte Komponenten

Hardware

Eine Nvidia Grafikkarte, die CUDA-fähig ist. Nützliche Informationen dazu werden auch unter [1] gefunden.

Software

  • Linux[1]
    • Linux Distribution sowie deren zugehörige gcc-Version. Hier werden für CUDA Pakete für folgende Systeme zur Verfügung gestellt (jeweils 32 und 64 Bit):
      • Fedora 14
      • RedHat Enterprise Linux 5.x und 6.x
      • Ubuntu Linux 10.04 und 11.04
      • OpenSUSE 11.2
      • SUSE Linux Enterprise Server 11 SP1
    • Nvidia Grafiktreiber
      • Wichtig dabei ist die proprietären Treiber von Nvidia zu verwenden. Es wird empfohlen immer die aktuellsten Treiber zu verwenden, da sich diese im Umfang der Stabilität und Funktionen von den älteren Versionen unterscheiden.
    • CUDA Toolkit
    • Beispiele und Testapplikationen mit Installation des SDKs
  • Windows[2]
    • Microsoft Windows XP, Vista, oder 7 oder Windows Server 2003 oder 2008 (jeweils 32 und 64 Bit). Dazu Microsoft Visual Studio 2005 oder 2008 bzw. die korrespondierenden Express Versionen[3]
    • Nvidia Grafiktreiber
    • Cuda Toolkit
    • Beispiele und Testapplikationen mit Installation des SDKs
  • Für Visual Studio gibt es außerdem ein nützliches Plugin, dass bei der Entwicklung unterstützt. Welche Anforderungen dieses Tool benötigt wird unter [2] beschrieben:
  • MAC OS X[4]
    • Mac OS X v. 10.5.6 oder höher (10.6.3 oder höher für 64-bit CUDA Applikationen) sowie gcc und zugehörige Tools (Installation mit Xcode)
    • Nvidia Grafiktreiber
    • Cuda Toolkit
    • Beispiele und Testapplikationen mit Installation des SDKs

Installation des NVIDIA-Treibers

Für das Kompilieren der proprietären Treiber werden die dem System zugehörigen Kernel-Headers benötigt. Diese werden durch den folgenden Befehl in der Konsole installiert:

sudo apt-get install build-essential linux-headers-`uname -r`

Bevor jedoch die Treiber im nächsten Schritt installiert werden können, müssen die mit Ubuntu mitgelieferten Pakete entfernt werden. Ubuntu bringt bereits von Haus aus Treiber für Nvidia-Karten mit bzw. installiert diese mit Aktivierung der Restricted Driver.

Mit folgendem Befehl können die sich mit dem NVIDIA-Treiber im Konflikt befindlichen Pakete entfernt werden:

sudo apt-get remove nvidia-173-modaliases nvidia-96-modaliases nvidia-common nvidia-current-modaliases xserver-xorg-video-nv xserver-xorg-video-nouveau

Ist auf dem System bereits eine ältere Version der proprietären Treiber installiert, so muss diese auch entfernt werden:

sudo apt-get remove nvidia-glx nvidia-glx-legacy \
nvidia-glx-new nvidia-settings

Damit die restricted Drivers nicht mehr weiter aktualisiert werden, werden sie zu den deaktivierten Modulen hinzugefügt. Dazu wird eine Zeile zu der Datei "linux-restricted-modules-common" hinzugefügt.

sudo vi /etc/default/linux-restricted-modules-common

Am Ende dieser Datei wird die Zeile

DISABLED_MODULES="nv nvidia_new"

angefügt. Nun muss noch verhindert werden, dass die entsprechenden vorhandenen Kernel-Module der bei der Installation vorhandenen Treiber geladen werden. Denn diese Kernel-Module würden das erfolgreiche Laden des NVIDIA-Treibers verhindern. Dazu wird die eine Konfigurationsdatei geöffnet:

sudo vi /etc/modprobe.d/blacklist.conf

und folgende Zeilen hinzugefügt:

blacklist vga16fb
blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current
blacklist nvidiafb

Nun muss die soeben geänderte Konfiguration einem Update unterzogen werden:

sudo update-initramfs -u

Nun kann ein Neustart vollzogen werden. Nach dem Neustart kann der eigentlich Treiber installiert werden. Dazu wechseln wird vor der Anmeldung auf die Konsole durch drücken von

STRG+ALT+F1

und beenden dort den aktuell laufenden X-Server:

sudo stop gdm

Die Developer-Treiber befinden sich immer auf der aktuellen CUDA Download Webseite. Diese Treiber bleiben für längere Zeiten aktuell und gelten als stabiler als die Desktop-Treiber. Nach dem Download wird in das Verzeichnis gewechselt, wo sich der heruntergeladene Treiber befindet. Dieser wird nun installiert:

sudo sh ./NVIDIA-Linux-x86_64-285.05.33.run

Schlussendlich muss nur noch den Anweisungen des Installers gefolgt werden und die Installation ist abgeschlossen. Nach dem Beenden des Installers kann der X-Server wieder durch

sudo start gdm

gestartet werden.

Update des Treibers bei neuem Kernel

Es empfiehlt sich die Installations-Datei (z.B. "./NVIDIA-Linux-x86_64-285.05.33.run") aufzuheben, da bei einem Kernel-Update der Treiber neu kompiliert werden muss. Das heißt, dass nach dem Kernel-Update zu Beginn der Treiber nicht ordnungsgemäß funktioniert. Um dieses Problem zu beheben, meldet man sich auf der Konsole an und ruft folgenden Befehl auf:

sudo sh ./NVIDIA-Linux-x86_64-285.05.33.run -K

Dadurch wird der Treiber neu, für den aktuellen Kernel, kompiliert. Anschließend kann gdm wieder gestartet werden:

sudo start gdm

Installation des CUDA-Toolkits

Der Distribution entsprechend wird das richtige Paket von der Linux CUDA-Developer Webseite heruntergeladen. Die in diesem Beitrag verwendete Version ist die für Ubuntu Linux 10.4 64bit. Von der Webseite kann natürlich immer die aktuelles Version des Toolkits heruntergeladen werden.

Nun wird in das Verzeichnis des heruntergeladenen Installers gewechselt und wie folgt installiert (mit Superuser Rechten):

sudo sh ./cudatoolkit_4.1.28_linux_64_ubuntu10.04.run

Der default-Pfad "/usr/local/cuda" wird bestätigt und die Dateien werden installiert. Im nächsten Schritt müssen die Pfadvariablen des Systems richtig gesetzt werden, damit das CUDA-Toolkit bei der Verwendung gefunden werden kann. Als erstes wird der Installationspfad der PATH-Variable hinzugefügt. Dazu gibt es verschieden Wege, wie dies durchgeführt werden kann [5]. Hier wird der Pfad zu der Datei "/etc/environment" hinzugefügt:

sudo vi /etc/environment

An die Pfadvariable wird der CUDA-Pfad angehängt. Die modifizierte Version sieht so aus:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"

Damit diese Änderungen aktiv werden, muss eine Ab- und Anmeldung durchgeführt werden. Dann sollte die Ausgabe des Befehls

echo $PATH

"/usr/local/cuda/bin" enthalten.

Für die Bibliotheken muss die Pfadvariable "LD_LIBRARY_PATH" verändert werden. Dazu wird eine eigene Konfigurationsdatei für die CUDA-Bibliotheken angelegt:

sudo vi /etc/ld.so.conf.d/cuda.conf

In diese Datei wird die Zeile

/usr/local/cuda/lib64

eingefügt. Für 32bit Systeme entfällt das "64". Mit dem Befehl

sudo ldconfig -v

kann die soeben geänderte Konfiguration aktualisiert werden. Überprüft werden kann das Ergebnis durch

sudo ldconfig -v|grep cuda

was ca. folgendes Ergebnis liefern sollte:

/usr/local/cuda/lib64:
	libcudart.so.3 -> libcudart.so.3.2.9
	libicudata.so.42 -> libicudata.so.42.1
	libcuda.so.1 -> libcuda.so.260.19.12
	libcuda.so.1 -> libcuda.so.260.19.12

Wurde das Toolkit richtig installiert und sind auch die Pfadvariablen richtig gesetzt worden, so kann überprüft werden, ob der Befehl

nvcc --version

folgende Ausgabe liefert:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2011 NVIDIA Corporation
Built on Thu_Jan_12_14:41:45_PST_2012
Cuda compilation tools, release 4.1, V0.2.1221

Installation des CUDA-SDKs

Das CUDA-SDK enthält viele Nützliche Beispiele, die zu Beginn bei der Programmierung unterstützen. Auch werden Programme zur Verfügung gestellt, mit denen z.B. die sich im System befindlichen Grafikkartenkonfigurationen ausgelesen werden können. Installiert wird das SDK durch das ausführen der heruntergeladenen Datei als normaler User:

sh ./gpucomputingsdk_4.1.28_linux.run

Der Standard-Pfad "~/NVIDIA_GPU_Computing_SDK" kann so übernommen werden, muss er aber nicht. Im nächsten Schritt können die mitgelieferten Programme des SDKs kompiliert werden. Für die OpenGL Beispiele werden zuerst noch folgende Bibliotheken benötigt:

sudo apt-get install freeglut3 freeglut3-dev libxi-dev libxmu-dev

Anschließend wird in das Installationsverzeichnis des SDKs gewechselt (in diesem Fall der Standard-Pfad) und dort weiter in das Verzeichnis, in dem sich die Beispiele befinden:

cd NVIDIA_GPU_Computing_SDK/C

Mit dem Befehl

make

werden die Programme schließlich kompiliert und in das Verzeichnis

~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release

kopiert. Tritt beim Kompilieren der Fehler

/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make[1]: *** [../../bin/linux/release/FunctionPointers] Fehler 1

auf, so kommt das auf Grund eines falschen symbolischen Links auf eine Bibliothek. Dieser Fehler kann durch

sudo rm /usr/lib/libGL.so
sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so

behoben werden. Ein erstes Ausführen des Programms "deviceQuery" zeigt, ob die Installation erfolgreich war:

cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/
./deviceQuery

Die Ausgabe für eine GeForce GTX 260 sieht dabei wie folgt aus:

[deviceQuery] starting...

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Found 1 CUDA Capable device(s)

Device 0: "GeForce GTX 260"
  CUDA Driver Version / Runtime Version          4.1 / 4.1
  CUDA Capability Major/Minor version number:    1.3
  Total amount of global memory:                 895 MBytes (938803200 bytes)
  (27) Multiprocessors x ( 8) CUDA Cores/MP:     216 CUDA Cores
  GPU Clock Speed:                               1.24 GHz
  Memory Clock rate:                             999.00 Mhz
  Memory Bus Width:                              448-bit
  Max Texture Dimension Size (x,y,z)             1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)
  Max Layered Texture Size (dim) x layers        1D=(8192) x 512, 2D=(8192,8192) x 512
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 16384
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             256 bytes
  Concurrent copy and execution:                 Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Concurrent kernel execution:                   No
  Alignment requirement for Surfaces:            Yes
  Device has ECC support enabled:                No
  Device is using TCC driver mode:               No
  Device supports Unified Addressing (UVA):      No
  Device PCI Bus ID / PCI location ID:           1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.1, CUDA Runtime Version = 4.1, NumDevs = 1, Device = GeForce GTX 260
[deviceQuery] test results...
PASSED

> exiting in 3 seconds: 3...2...1...done!

Deinstallation von Toolkit und SDK

Um die Installation rückgängig zu machen (z.B. weil eine neue Version installiert werden soll), so müssen nur die Verzeichnisse "/usr/local/cuda" und "~/NVIDIA_GPU_Computing_SDK" gelöscht werden. Natürlich muss auf etwaige eigene Projekte, die in diesen Verzeichnissen entstanden sind, Rücksicht genommen werden. Ansonsten können die Verzeichnisse ohne Bedenken entfernt werden.

sudo rm -rf /usr/local/cuda
rm -rf ~/NVIDIA_GPU_Computing_SDK

Für die Installation des neuen Toolkits und SDKs muss anschließend nur mehr der Installer ausgeführt werden.

Einzelnachweise

  1. Getting Started Linux
  2. Getting Started Windows
  3. Download Homepage Visual Studio
  4. Getting Started MAC OS X
  5. Ubuntu Help zu Pfadvariablen

Das könnte Sie auch interessieren

CUDA
Nvidia-healthmon
PNY NVIDIA Quadro Grafikkarten