Verschiedene CUDA-Versionen von nvcc und NVIDIA-smi

103

Ich bin sehr verwirrt über die verschiedenen CUDA-Versionen, die durch Ausführen von which nvccund 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 nvccoder 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.

yuqli
quelle
24
Ich glaube, genau diese Frage wurde in den letzten Tagen mehrmals gestellt. Aber ich kann jetzt kein Duplikat finden. Die Antwort lautet: nvidia-smi zeigt Ihnen die CUDA-Version, die Ihr Treiber unterstützt. Sie haben einen der letzten 410.x-Treiber installiert, die CUDA 10 unterstützen. Die vom Treiber unterstützte Version hat nichts mit der Version zu tun, mit der Sie Ihr Programm kompilieren und verknüpfen. Ein Treiber, der CUDA 10.0 unterstützt, kann auch eine Anwendung ausführen, die für CUDA 9.2 erstellt wurde…
Michael Kenzel
@ MichaelKenzel Ich verstehe. Danke für die Klarstellung! Ich schätze, ich benutze dann CUDA9.2 ..
yuqli
Eine ähnliche Frage ist hier . @ MichaelKenzel, wenn Sie eine Antwort hinzufügen möchten, würde ich positiv bewerten.
Robert Crovella
@ RobertCrovella ja, das war derjenige, den ich gesucht habe. Ich habe die Antwort nur aus Ihrem Kommentar dort erfahren. Wenn also jemand eine Gegenstimme verdient, dann sind Sie es selbst;)
Michael Kenzel

Antworten:

160

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-smiTool 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.

nvccDas 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 -Veine 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-Installationsanleitung

Beachten 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-smiist nvcc -Vdies 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 beispielsweise nvidia-smiCUDA 10.2 und nvcc -VCUDA 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 nvccBefehl ü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 wie findoder verwenden locate(verwenden Sie Manpages, um zu erfahren, wie, bitte), um Ihre nvccausführbare Datei zu finden . Angenommen, es gibt nur einen, kann der Pfad dazu verwendet werden, um Ihre Umgebungsvariable PATH zu korrigieren.

Robert Crovella
quelle
1
@Rober Crovella Danke für die Klarheit. Ich habe die gleiche Situation nvidia-smi zeigt CUDA Version 10.1 und nvcc zeigt 9.1. Ist es jetzt in Ordnung, das Netzwerk zu trainieren, oder funktioniert die Installation noch?
Dhiren Hamal
Ich habe die Schritte nach der Installation befolgt, aber dennoch zeigen nvcc und nvidia-smi unterschiedliche Cuda-Versionen
BeingMIAkashs
Das ist durchaus möglich. Wenn Sie den neuesten Treiber installiert haben (wodurch nvidia-smiderzeit CUDA 10.2 angezeigt wird), aber eine frühere Version von CUDA (z. B. 10.1), wird ein Unterschied von nvidia-smiim Vergleich zu gemeldet nvcc. In diesem Fall ist das kein Problem.
Robert Crovella
Der Kommentar ist hilfreich, erklärt aber nicht, was passiert, wenn nvcceine höhere Version (z. B. 10.2) als nvidia-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 .
TheSaurus
3

nvccbefindet 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 ):

  1. Fügen Sie den CUDA-Behälter hinzu $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}}

PS. Stellen Sie zunächst sicher, dass die folgenden beiden Pfade oben vorhanden sind: /usr/local/cuda-10.1/binund /usr/local/cuda-10.1/NsightCompute-2019.1(Der NsightCompute-Pfad kann je nach installierter Version von Nsight compute ein etwas anderes Ende haben ...

  1. Update $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 nvccund nvidia-smi(oder nvtop) dieselbe Version von CUDA ...

Ismail Moghul
quelle
Dies liegt daran, dass $ PATH $ die Verwendung von CUDA 10 angibt. Einige Softwareprogramme erfordern jedoch unterschiedliche Versionen von CUDA.
Yuqli
NsightCompute-2019.1wird NsightCompute-1.0in CUDA 10.0 aufgerufen .
Astrid
Ich habe die Schritte nach der Installation befolgt, aber dennoch zeigen nvcc und nvidia-smi unterschiedliche Cuda-Versionen
BeingMIAkashs
Jedes Mal, wenn ich das Terminal öffne, muss ich den Befehl für zwei Pfade ausführen (von der Cuda-Post-Installation in Schritt 7). Gibt es eine Möglichkeit, den Status beizubehalten und die Pfadbefehle nicht wiederholt ausführen zu müssen?
Montag,
@monti Ja, Sie können den Befehl schreiben .bashrcoder bash_profileer wird automatisch für jede Bash-Sitzung geladen . Siehe hier: stackoverflow.com/questions/14637979/…
yuqli
-1

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.

Sonnig
quelle