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-smi
Befehl 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.com
und 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/cuda
erstellt 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.cuda
Modul zu liegen, wenn in den Zeilen 168-175 __init__.py
versucht 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 ldconfig
den Befehl, um das gemeinsam genutzte Objekt von CUDA 7.5 zu verknüpfen:
sudo ldconfig /usr/local/cuda-7.5/lib64