nvcc和NVIDIA-smi显示的不同CUDA版本


122

我对运行which nvcc和显示的不同CUDA版本感到非常困惑nvidia-smi

我在Ubuntu 16.04上同时安装了cuda9.2和cuda10。现在,我将PATH设置为指向cuda9.2。所以当我跑步时:

 $ which nvcc
 /usr/local/cuda-9.2/bin/nvcc

但是,当我跑步时

$ 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 |

所以我是按which nvcc建议使用cuda9.2 ,还是按nvidia-smi建议使用cuda10 ?

看到了这个答案,但是它并不能直接为混乱提供答案,它只是要求我们重新安装cudatoolkit,而我已经做到了。


29
我想我已经在过去的几天中多次看到这个确切的问题。但是我现在似乎找不到重复的副本。答案是:nvidia-smi向您显示驱动程序支持的CUDA版本。您已经安装了支持CUDA 10的最新410.x驱动程序之一。该驱动程序支持的版本与您编译和链接程序所依据的版本无关。支持CUDA 10.0的驱动程序也将能够运行为CUDA 9.2构建的应用程序…
Michael Kenzel

@MichaelKenzel我明白了。感谢您的澄清!猜猜我正在使用CUDA9.2。–
yuqli

这里有一个类似的问题。@MichaelKenzel如果您想添加一个答案,我会投票赞成。
罗伯特·克罗维拉

1
@RobertCrovella是的,那是我要找的那个。我只是从您的评论中得知了答案,因此,如果有人值得支持,那就是您自己;)
Michael Kenzel

Answers:


179

CUDA有两个主要API,即运行时API和驱动程序API。两者都有对应的版本(例如8.0、9.0等)

GPU驱动程序安装程序已安装了对驱动程序API的必要支持(例如linux上的libcuda.so)。

nvccCUDA工具包安装程序(可能还捆绑了GPU驱动程序安装程序)安装了对运行时API的必要支持(例如linux上的libcudart.so以及)。

无论如何,(已安装的)驱动程序API版本可能并不总是与(已安装的)运行时API版本匹配,特别是如果您独立于安装CUDA(即CUDA工具包)安装GPU驱动程序。

nvidia-smi工具由GPU驱动程序安装程序安装,并且通常具有GPU驱动程序,而不是CUDA工具包安装程序安装的任何东西。

最近(在Linux上介于410.48和410.73之间的驱动程序版本),NVIDIA的权力决定在驱动程序输出中添加驱动程序安装的CUDA驱动程序API版本的报告nvidia-smi

这与已安装的CUDA运行时版本没有任何关系。

nvcc,与CUDA工具包一起安装的CUDA编译器驱动程序工具,将始终报告其生成以识别的CUDA运行时版本。它对安装什么驱动程序版本一无所知,即使安装了GPU驱动程序也不知道。

因此,根据设计,这两个数字不一定匹配,因为它们反映了两个不同的事物。

如果您想知道为什么nvcc -V显示的不是您所期望的CUDA版本(例如,它显示的版本不是您认为安装的版本),或者根本不显示任何内容,则可能是因为您没有遵循了cuda linux安装指南的步骤7(CUDA 11之前)(或CUDA 11 linux安装指南中的步骤6)中的强制性说明。

请注意,尽管此问题主要针对Linux,但相同的概念也适用于Windows CUDA安装。该驱动程序具有与之关联的CUDA驱动程序版本(例如,可以使用来查询nvidia-smi)。CUDA运行时还具有与之关联的CUDA运行时版本。两者不一定在所有情况下都匹配。

在大多数情况下,如果nvidia-smi报告的CUDA版本在数值上等于或高于所报告的CUDA版本,nvcc -V则无需担心。这是CUDA(较新的驱动程序/驱动程序API支持“较旧的” CUDA工具包/运行时API)中定义的兼容性路径。例如,如果nvidia-smi报告CUDA 10.2,并nvcc -V报告CUDA 10.1,则通常不必担心。它应该可以正常工作,并不一定意味着您“当您打算安装CUDA 10.1时实际上已经安装了CUDA 10.2”

如果nvcc命令根本不报告任何内容(例如Command 'nvcc' not found...),则也可能是由于CUDA安装不正确,即上述强制性步骤未正确执行。您可以通过使用linux实用程序(例如findlocate(使用手册页以了解方法)来查找nvcc可执行文件,从而开始弄清楚这一点。假设只有一个,则可以使用它的路径来修复PATH环境变量。



1
@Rober Crovella感谢您的澄清。我有相同的情况nvidia-smi显示CUDA版本10.1,nvcc显示9.1。现在可以训练网络了吗,或者安装还可以吗?
德伦·哈马尔

我遵循了安装后的步骤,但是nvcc和nvidia-smi仍显示不同的cuda版本
BeingMIAkashs

那完全有可能。如果您安装了最新的驱动程序(当前导致nvidia-smi显示CUDA 10.2),但是安装了较早版本的CUDA(例如10.1),则报告的nvidia-smi与相比会有差异nvcc。在那种情况下这不是问题。
罗伯特·克罗维拉

该评论很有帮助,但没有解释如果nvcc报告的版本(例如10.2)比nvidia-smi(例如10.1)更高,会发生什么。在这种情况下,Cuda尝试将其编译为10.2并尝试在10.1上运行。例如,这通常会导致运行时错误"RuntimeError: CUDA error: no kernel image is available for execution on the device"
TheSaurus

5

nvcc在CUDA bin文件夹中-这样检查CUDA bin文件夹是否已添加到您的$PATH

具体来说,请确保已执行CUDA安装后操作(例如,从此处开始):

  1. 将CUDA Bin添加到$PATH(即,将以下行添加到~/.bashrc
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

PS。确保首先存在以下两个路径:/usr/local/cuda-10.1/bin/usr/local/cuda-10.1/NsightCompute-2019.1(根据安装的Nsight计算版本,NsightCompute路径的结尾可能会稍有不同...

  1. 更新$LD_LIBRARY_PATH(即,将以下行添加到中~/bashrc)。
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

之后,nvcc和和nvidia-smi(或nvtop)都报告相同版本的CUDA ...


那是因为$ PATH $指定使用CUDA10。但是某些软件需要不同版本的CUDA。
yuqli

NsightCompute-2019.1NsightCompute-1.0在CUDA 10.0中被调用。
阿斯特丽德

我遵循了安装后的步骤,但是nvcc和nvidia-smi仍显示不同的cuda版本
BeingMIAkashs

每次我打开终端时,我都必须运行两个路径命令(来自step7中的cuda post安装)。有没有办法可以保持状态并且不必重复运行path命令?
蒙蒂

@monti是你可以写命令.bashrcbash_profile因此它会自动加载每个bash命令。看到这里:stackoverflow.com/questions/14637979/…–
yuqli

0

如果您使用的是cuda 10.2:

export PATH=/usr/local/cuda-10.2/bin:/opt/nvidia/nsight-compute/2019.5.0${PATH:+:${PATH}}

可能会有所帮助,因为当我检查时,cuda-10.2中没有nsight-compute的目录。我不确定这是否只是我的问题,否则他们为什么不在官方文档中提及它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.