CUDA-Integration mit Theano

CUDA-Integration mit Theano

Ich arbeite mitTheano, ein Deep-Learning-Benchmark, auf einer frisch installierten Ubuntu Mate 16.04-Maschine. Theano kann GPU-Beschleunigung verwenden, um Berechnungen zu beschleunigen. Ich habe eine NVIDIA K2200M-Grafikkarte, die CUDA-fähig ist und korrekt installiert ist, wie der nvidia-smiBefehl zeigt:

+------------------------------------------------------+                       
| NVIDIA-SMI 361.42     Driver Version: 361.42         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2200M       Off  | 0000:01:00.0     Off |                  N/A |
| N/A   31C    P8    N/A /  N/A |    212MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1090    G   /usr/lib/xorg/Xorg                             200MiB |
|    0      7931    G   /usr/lib/firefox/firefox                         1MiB |
+-----------------------------------------------------------------------------+

Ein bisschen Hintergrund: Theano muss so eingerichtet werden, dass einige Umgebungsvariablen definiert werden müssen, wie z. B. $CUDA_ROOT, und diese verweisen auf /usr/local/cuda, aber bei der Installation nvidia-cuda-*aus dem offiziellen Ubuntu Mate-Repo werden diese Ordner nicht erstellt. Trotzdem bietet Theano einen Python-Code, mit dem festgestellt werden kann, ob die Berechnungen mit der CPU oder der GPU durchgeführt werden, und überraschenderweise findet Theano die CUDA-Installation.

Hier kommt das Problem: CUDA wird vom System erkannt, aber CUDA kann meine GPU scheinbar nicht finden und ich erhalte die Fehlermeldung WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable).

Ich schreibe an askubuntu.comund nicht an die Theano-Entwickler, weil ich, als ich dieses Problem entdeckte, nvidia-cuda-*CUDA deinstallierte und aus dem offiziellen Paket von NVIDIA installierte.DasAnleitung, sodass das oben genannte /usr/local/cudaerstellt wurde und der Theano-Code die CUDA-Installation erneut erkannte, aber meine GPU immer noch nicht finden konnte. Aus diesem Grund denke ich, dass es sich eher um ein Ubuntu-Problem als um eine fehlerhafte Implementierung auf der Seite von Theano handeln könnte.

Antwort1

Ich habe irgendwie herausgefunden, dass es kein Ubuntu-Problem, sondern ein Theano-Problem war, da ich CUDA erneut von der Quelle installiert habe, die ich im OP erwähnt habe, und es mir gelang, Beispieldaten aus dem von NVIDIA bereitgestellten CUDA-Paket korrekt auszuführen, wodurch (meiner unerfahrenen Meinung nach) ein Integrationsproblem zwischen dem NVIDIA-CUDA-Toolkit und den NVIDIA-Treibern ausgeschlossen wurde.

Für diejenigen, die (in Zukunft) dasselbe Problem wie ich haben: Das Problem scheint im theano.sandbox.cudaModul zu liegen, wenn in den Zeilen 168-175 __init__.pyversucht wird, es zu kompilieren cuda_ndarray.cu(glaube ich, da ich die Datei nur leicht geändert habe), wenn diese Datei die Funktion aufruft compiler.compile_str(...), die meiner Meinung nach vom Theano-Entwicklungsteam erstellt wurde. NVCC läuft korrekt, aber es gibt Probleme beim Kompilieren cuda_ndarray.

Daher werde ich diese Frage als beantwortet markieren, sobald Askubuntu es mir erlaubt.

Antwort2

Wenn Sie CUDA 7.5 verwenden, befolgen Sie unbedingt die offiziellen Anweisungen:

CUDA 7.5 unterstützt die Standardversion von g++ nicht. Installieren Sie eine unterstützte Version und machen Sie sie zur Standardversion.

sudo apt-get install g++-4.9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Wenn der GPU-Testcode von Theano einen Fehler aufweist:

FEHLER (theano.sandbox.cuda): Fehler beim Kompilieren von cuda_ndarray.cu: libcublas.so.7.5: Gemeinsam genutzte Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis. WARNUNG (theano.sandbox.cuda): CUDA ist installiert, aber die Geräte-GPU ist nicht verfügbar (Fehler: cuda nicht verfügbar).

Verwenden Sie einfach ldconfigden Befehl, um das gemeinsam genutzte Objekt von CUDA 7.5 zu verknüpfen:

sudo ldconfig /usr/local/cuda-7.5/lib64

verwandte Informationen