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

Different CUDA versions shown by nvcc and NVIDIA-smi

提问人:yuqli 提问时间:11/22/2018 最后编辑:Vy Doyuqli 更新时间:11/9/2023 访问量:229266

问:

我对运行 和 所示的不同 CUDA 版本感到非常困惑。我的 ubuntu 16.04 上安装了 cuda9.2 和 cuda10。现在我将 PATH 设置为指向 cuda9.2。所以当我跑步时which nvccnvidia-smi

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

那么我是按照建议使用 cuda9.2,还是按照建议使用 cuda10?我看到了这个答案,但它并没有直接回答混乱,它只是要求我们重新安装 CUDA 工具包,我已经这样做了。which nvccnvidia-smi

库达

评论

101赞 Michael Kenzel 11/22/2018
我想在过去的几天里,我已经看到这个确切的问题多次出现。但我现在似乎找不到副本。答案是:nvidia-smi 显示您的驱动程序支持的 CUDA 版本。您安装了支持 CUDA 10 的最新 410.x 驱动程序之一。驱动程序支持的版本与编译和链接程序所针对的版本无关。支持 CUDA 10.0 的驱动程序还将能够运行为 CUDA 9.2 构建的应用程序...
1赞 yuqli 11/22/2018
@MichaelKenzel我明白了。感谢您的澄清!猜猜我正在使用 CUDA9.2..
0赞 Robert Crovella 11/25/2018
这里有一个类似的问题。@MichaelKenzel如果你想添加一个答案,我会投赞成票。
1赞 Michael Kenzel 11/25/2018
@RobertCrovella是的,这就是我一直在找的那个。我只是从你在那里的评论中得知了答案,所以如果有人值得点赞,那就是你自己;)

答:

377赞 13 revs, 3 users 88%Robert Crovella #1

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

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

对运行时 API 的必要支持(例如 在 linux 上,并且 ) 由 CUDA 工具包安装程序安装(其中可能还捆绑了 GPU 驱动程序安装程序)。libcudart.sonvcc

在任何情况下,(已安装的)驱动程序 API 版本可能并不总是与(已安装的)运行时 API 版本匹配,尤其是当您独立于 CUDA(即 CUDA 工具包)安装 GPU 驱动程序时。

该工具由 GPU 驱动程序安装程序安装,通常具有 GPU 驱动程序,而不是 CUDA 工具包安装程序安装的任何内容。nvidia-smi

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

这与已安装的 CUDA 运行时版本没有连接。

nvcc,随 CUDA 工具包一起安装的 CUDA 编译器驱动程序工具将始终报告它所构建的 CUDA 运行时版本。它不知道安装了什么驱动程序版本,甚至不知道是否安装了 GPU 驱动程序。

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

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

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

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

如果命令根本没有报告任何内容(例如),或者如果它报告了意外的 CUDA 版本,这也可能是由于 CUDA 安装不正确,即未正确执行上述强制性步骤。您可以通过使用 linux 实用程序(如 or)(请使用手册页来了解如何操作)来查找可执行文件来开始解决这个问题。假设只有一个,则可以使用它的路径来修复 PATH 环境变量。CUDA linux 安装指南还解释了如何设置它。您可能需要调整 PATH 变量中的 CUDA 版本,以匹配所需/安装的实际 CUDA 版本。nvccCommand 'nvcc' not found...findlocatenvcc

同样,在使用 docker 时,该命令通常会报告基础计算机上安装的驱动程序版本,而其他版本方法(如 将报告安装在 docker 容器中的 CUDA 版本)。nvidia-sminvcc --version

同样,如果您为 CUDA“工具包”使用了其他安装方法,例如 Anaconda,您可能会发现 Anaconda 指示的版本与 指示的版本不匹配。但是,上述评论仍然适用。Anaconda 安装的旧 CUDA 工具包可以与 报告的较新版本一起使用,并且报告的 CUDA 版本比 Anaconda 安装的版本更新/更高并不意味着您有安装问题。nvidia-sminvidia-sminvidia-smi

这是另一个涵盖类似问题的问题。上述处理方式并不以任何方式表明此答案仅适用于您有意或无意地安装了多个 CUDA 版本的情况。每当您安装 CUDA 时,这种情况都会出现。报告的版本可能不匹配,这是预期行为,在大多数情况下非常正常。nvccnvidia-smi

如果报告的版本在数值上低于 报告的版本,我认为这可能是一个损坏的配置。如果您使用它编译代码,然后尝试在该计算机上运行它,则它不太可能工作。此原则存在兼容性例外(通过安装“向前兼容性包”启用)。在这种情况下,我的一般建议(对于很多问题都是如此)是将 GPU 驱动程序版本更新到可用于您的 GPU 的最新版本。nvidia-sminvccnvcc

评论

5赞 HongboZhu 9/26/2019
根据 Nvidia 的说法,驱动程序和运行时 API 之间的区别
1赞 Dhiren Hamal 12/6/2019
@Rober Crovella 感谢您的澄清。我有同样的情况,nvidia-smi 显示 CUDA 版本 10.1,nvcc 显示 9.1。现在是否可以训练网络,或者安装是否正常仍然有效?
0赞 BeingMIAkashs 1/26/2020
我按照安装后的步骤进行操作,但是 nvcc 和 nvidia-smi 仍然显示不同的 cuda 版本
0赞 Robert Crovella 1/26/2020
这是完全可能的。如果您安装了最新的驱动程序(导致当前显示 CUDA 10.2),但安装了早期版本的 CUDA(例如 10.1),则报告的 as 与 相比将存在差异。在这种情况下,这不是问题。nvidia-sminvidia-sminvcc
2赞 TheSaurus 10/31/2020
该评论很有帮助,但没有解释如果报告的版本(比如 10.2)高于(比如 10.1)会发生什么。在这种情况下,Cuda 会尝试将其编译为 10.2 并尝试在 10.1 上运行它。例如,这通常会导致运行时错误。nvccnvidia-smi"RuntimeError: CUDA error: no kernel image is available for execution on the device"
10赞 Ismail Moghul 6/16/2019 #2

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

确保上面的以下两个路径首先存在:和(NsightCompute路径的结尾可能略有不同,具体取决于安装的Nsight计算版本.../usr/local/cuda-10.1/bin/usr/local/cuda-10.1/NsightCompute-2019.1

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

在此之后,两者和(或)报告相同版本的 CUDA...nvccnvidia-sminvtop

评论

0赞 yuqli 6/25/2019
这是因为 $PATH$ 指定使用 CUDA 10。但有些软件需要不同版本的 CUDA。
0赞 Astrid 7/9/2019
NsightCompute-2019.1在 CUDA 10.0 中调用。NsightCompute-1.0
2赞 BeingMIAkashs 1/26/2020
我按照安装后的步骤进行操作,但是 nvcc 和 nvidia-smi 仍然显示不同的 cuda 版本
0赞 monti 5/28/2020
每次打开终端时,我都必须运行两个路径命令(从 CUDA 第 7 步的安装后)。有没有办法可以保持状态而不必重复运行路径命令?
0赞 yuqli 7/23/2020
@monti 是的,你可以将命令写入,或者为每个 bash 会话自动加载命令。看这里 : stackoverflow.com/questions/14637979/....bashrcbash_profile
-3赞 Sunny 2/17/2020 #3

如果您使用的是 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 的目录。 我不确定这是否只是我的问题,否则他们为什么不在官方文档中提及它。

3赞 Khan 11/19/2021 #4

nvidia-smi可以显示与 报告的 CUDA 版本不同的 CUDA 版本。因为他们报告了两件不同的事情:nvcc

nvidia-smi显示给定 GPU 驱动程序的最大可用 CUDA 版本支持。 报告的第二件事是系统当前正在使用的 CUDA 版本。nvcc -V

总之

nvidia-smi显示驱动程序支持的最高 CUDA 版本。 显示当前 CUDA 安装的版本。只要驱动程序支持的版本高于已安装的版本,就可以了。您甚至可以同时安装多个版本的 CUDA。nvcc -V

评论

1赞 Alex Punnen 7/27/2023
这个答案也是正确的,为什么会被否决;nvidia-smi 仅显示驱动程序支持的最大 CUDA 版本,甚至没有真正暗示是否安装了 Cuda。
0赞 Shital Shah 7/21/2023 #5

长话短说,这是因为安装了两个不同版本的 CUDA 工具包,其中一个是旧的,仍在使用中。例如,我的发行版在 .我安装新版本后,它位于默认路径。用于查找系统上的路径。/usr/bin/nvcc/usr/local/cuda/bin/nvccwhich nvcc

没有必要担心这一点。您只需在 .bashrc 中添加以下内容即可修复它:

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
7赞 Niels 8/25/2023 #6

为人们做了这个数字,希望能让它更清晰。我现在终于明白为什么 nvidia-smi 的版本可以高于 nvcc 的版本,这是因为 nvidia-smi 显示了驱动程序的版本(这是最低级别的)。NVCC 是更高级别的,因此该版本的较低版本不是问题。

根据 @Robert Crovela 得票最高的答案。

enter image description here

2赞 veerendra 11/9/2023 #7

和报告的 CUDA 版本之间的差异是由于它们报告了系统 CUDA 设置的不同方面。nvcc --versionnvidia-smi

  • nvcc --version报告已安装的 CUDA 工具包的版本。这是用于编译 CUDA 代码的版本。
  • nvidia-smi另一方面,报告您的 GPU 驱动程序支持的最高 CUDA 版本。

在您的情况下,报告 CUDA 10.1,因为这是您安装的 CUDA 工具包的版本。 报告的版本不同,因为您的 GPU 驱动程序最多可以支持该 CUDA 版本。nvcc --versionnvidia-smi

运行 CUDA 程序时,使用的 CUDA 版本由用于编译程序的 CUDA 工具包的版本决定。但是,程序使用的 CUDA 版本也必须受 GPU 驱动程序支持。如果您的 GPU 驱动程序不支持程序使用的 CUDA 版本,您将遇到错误。