Ich bin sehr verwirrt über die verschiedenen CUDA-Versionen, die durch Ausführen von which nvcc
und angezeigt werden nvidia-smi
.
Ich habe sowohl cuda9.2 als auch cuda10 auf meinem Ubuntu 16.04 installiert. Jetzt setze ich den PFAD so, dass er auf cuda9.2 zeigt. Also, wenn ich renne:
$ which nvcc
/usr/local/cuda-9.2/bin/nvcc
Wenn ich jedoch renne
$ nvidia-smi
Wed Nov 21 19:41:32 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.72 Driver Version: 410.72 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| 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 106... Off | 00000000:01:00.0 Off | N/A |
| N/A 53C P0 26W / N/A | 379MiB / 6078MiB | 2% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1324 G /usr/lib/xorg/Xorg 225MiB |
| 0 2844 G compiz 146MiB |
| 0 15550 G /usr/lib/firefox/firefox 1MiB |
| 0 19992 G /usr/lib/firefox/firefox 1MiB |
| 0 23605 G /usr/lib/firefox/firefox 1MiB |
Also verwende ich cuda9.2 wie vorgeschlagen which nvcc
oder verwende ich cuda10 wie vorgeschlagen nvidia-smi
?
Ich habe diese Antwort gesehen, aber sie gibt keine direkte Antwort auf die Verwirrung. Sie fordert uns lediglich auf, das Cudatoolkit neu zu installieren, was ich bereits getan habe.
Antworten:
CUDA verfügt über zwei primäre APIs, die Laufzeit- und die Treiber-API. Beide haben eine entsprechende Version (zB 8.0, 9.0 usw.)
Die erforderliche Unterstützung für die Treiber-API (z. B. libcuda.so unter Linux) wird vom GPU-Treiberinstallationsprogramm installiert.
Die erforderliche Unterstützung für die Laufzeit-API (z. B. libcudart.so unter Linux und auch
nvcc
) wird vom CUDA-Toolkit-Installationsprogramm installiert (in dem möglicherweise auch ein GPU-Treiberinstallationsprogramm enthalten ist).In jedem Fall stimmt die (installierte) Treiber-API-Version möglicherweise nicht immer mit der (installierten) Laufzeit-API-Version überein, insbesondere wenn Sie einen GPU-Treiber unabhängig von der Installation von CUDA (dh dem CUDA-Toolkit) installieren.
Das
nvidia-smi
Tool wird vom GPU-Treiberinstallationsprogramm installiert und zeigt im Allgemeinen den GPU-Treiber an, nicht alles, was vom CUDA-Toolkit-Installationsprogramm installiert wurde.Kürzlich (irgendwo zwischen 410.48 und 410.73 unter Linux) haben die Machthaber von NVIDIA beschlossen, in der Ausgabe von Berichte über die vom Treiber installierte CUDA-Treiber-API-Version hinzuzufügen
nvidia-smi
.Dies hat keine Verbindung zur installierten CUDA-Laufzeitversion.
nvcc
Das mit dem CUDA-Toolkit installierte CUDA-Compiler-Treiber-Tool meldet immer die CUDA-Laufzeitversion, für deren Erkennung es erstellt wurde. Es weiß nichts darüber, welche Treiberversion installiert ist oder ob ein GPU-Treiber installiert ist.Daher stimmen diese beiden Zahlen nicht unbedingt überein, da sie zwei verschiedene Dinge widerspiegeln.
Wenn Sie sich fragen, warum
nvcc -V
eine Version von CUDA angezeigt wird, die Sie nicht erwartet haben (z. B. eine andere Version als die, von der Sie glauben, dass Sie sie installiert haben), oder wenn in Bezug auf die Version überhaupt nichts angezeigt wird, liegt dies möglicherweise daran, dass Sie dies nicht getan haben Befolgen Sie die obligatorischen Anweisungen in Schritt 7 (vor CUDA 11) (oder Schritt 6 in der CUDA 11 Linux-Installationsanleitung) der Cuda Linux-InstallationsanleitungBeachten Sie, dass diese Frage zwar hauptsächlich Linux im Blick hat, für Windows CUDA-Installationen jedoch dieselben Konzepte gelten . Dem Treiber ist eine CUDA-Treiberversion zugeordnet (mit der beispielsweise abgefragt werden kann
nvidia-smi
). Der CUDA-Laufzeit ist auch eine CUDA-Laufzeitversion zugeordnet. Die beiden werden nicht unbedingt in allen Fällen übereinstimmen.In den meisten Fällen
nvidia-smi
istnvcc -V
dies kein Grund zur Sorge , wenn eine CUDA-Version gemeldet wird , die numerisch gleich oder höher als die von ist. Dies ist ein definierter Kompatibilitätspfad in CUDA (neuere Treiber / Treiber-API unterstützen "ältere" CUDA-Toolkits / Laufzeit-API). Wenn beispielsweisenvidia-smi
CUDA 10.2 undnvcc -V
CUDA 10.1 gemeldet werden, ist dies im Allgemeinen kein Grund zur Sorge. Es sollte einfach funktionieren und bedeutet nicht unbedingt, dass Sie "CUDA 10.2 tatsächlich installiert haben, als Sie CUDA 10.1 installieren wollten".Wenn der
nvcc
Befehl überhaupt nichts meldet (z. B.Command 'nvcc' not found...
), kann dies auch an einer falschen CUDA-Installation liegen, dh die oben genannten obligatorischen Schritte wurden nicht korrekt ausgeführt. Sie können dies herausfinden, indem Sie ein Linux-Dienstprogramm wiefind
oder verwendenlocate
(verwenden Sie Manpages, um zu erfahren, wie, bitte), um Ihrenvcc
ausführbare Datei zu finden . Angenommen, es gibt nur einen, kann der Pfad dazu verwendet werden, um Ihre Umgebungsvariable PATH zu korrigieren.quelle
nvidia-smi
derzeit CUDA 10.2 angezeigt wird), aber eine frühere Version von CUDA (z. B. 10.1), wird ein Unterschied vonnvidia-smi
im Vergleich zu gemeldetnvcc
. In diesem Fall ist das kein Problem.nvcc
eine höhere Version (z. B. 10.2) alsnvidia-smi
(z. B. 10.1) gemeldet wird. In diesem Fall versucht der Cuda, es als 10.2 zu kompilieren und unter 10.1 auszuführen. Dies führt normalerweise"RuntimeError: CUDA error: no kernel image is available for execution on the device"
beispielsweise zu einem Laufzeitfehler .nvcc
befindet sich im CUDA-Bin-Ordner. Überprüfen Sie daher, ob der CUDA-Bin-Ordner zu Ihrem Ordner hinzugefügt wurde$PATH
.Stellen Sie insbesondere sicher, dass Sie die CUDA-Aktionen nach der Installation ausgeführt haben (z. B. von hier aus ):
$PATH
(dh fügen Sie die folgende Zeile zu Ihrem hinzu~/.bashrc
)export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}
$LD_LIBRARY_PATH
(dh fügen Sie die folgende Zeile zu Ihrem hinzu~/bashrc
).export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
Danach melden beide
nvcc
undnvidia-smi
(odernvtop
) dieselbe Version von CUDA ...quelle
NsightCompute-2019.1
wirdNsightCompute-1.0
in CUDA 10.0 aufgerufen ..bashrc
oderbash_profile
er wird automatisch für jede Bash-Sitzung geladen . Siehe hier: stackoverflow.com/questions/14637979/…Wenn Sie cuda 10.2 verwenden:
export PATH=/usr/local/cuda-10.2/bin:/opt/nvidia/nsight-compute/2019.5.0${PATH:+:${PATH}}
Dies könnte hilfreich sein, da bei der Überprüfung in cuda-10.2 kein Verzeichnis für nsight-compute vorhanden war. Ich bin mir nicht sicher, ob dies nur das Problem bei mir war oder warum sie es nicht in der offiziellen Dokumentation erwähnen würden.
quelle