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

yuq*_*qli 33 cuda

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

我的ubuntu 16.04上安装了cuda9.2和cuda10.现在我将PATH设置为指向cuda9.2.所以当我跑:

 $ which nvcc
 /usr/local/cuda-9.2/bin/nvcc
Run Code Online (Sandbox Code Playgroud)

但是,当我跑

$ 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 |
Run Code Online (Sandbox Code Playgroud)

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

看到了这个答案,但它没有提供直接的答案,它只是要求我们重新安装我已经做过的cudatoolkit.

Rob*_*lla 62

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

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

对运行时API的必要支持(例如,linux上的libcudart.so,以及它nvcc)也由CUDA工具包安装程序安装(其中也可能捆绑了GPU驱动程序安装程序).

在任何情况下,(已安装的)驱动程序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驱动程序.

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

  • [驱动程序和运行时 API 之间的差异](https://docs.nvidia.com/cuda/cuda-runtime-api/driver-vs-runtime-api.html) 根据 Nvidia 。 (3认同)
  • 该评论很有帮助,但没有解释如果“nvcc”报告的版本(例如 10.2)比“nvidia-smi”(例如 10.1)更高的版本会发生什么。在这种情况下,Cuda 尝试将其编译为 10.2,并尝试在 10.1 上运行它。这通常会导致运行时错误,例如“RuntimeError:CUDA错误:没有可用于在设备上执行的内核映像”。 (2认同)

Nie*_*els 10

给大家做了这个图,希望大家看得更清楚。我现在终于明白为什么nvidia-smi的版本可以比nvcc的版本高了,因为nvidia-smi显示的是Driver的版本(最低级别)。nvcc 级别更高,因此较低版本不是问题。

基于@Robert Crovella 投票最高的答案。

在此输入图像描述


Ism*_*hul 7

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}}
Run Code Online (Sandbox Code Playgroud)

附注。确保上面有以下两条路径,首先存在:/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}}
Run Code Online (Sandbox Code Playgroud)

在此之后,nvccnvidia-smi(或nvtop)报告相同版本的 CUDA...

  • 我遵循了安装后步骤,但 nvcc 和 nvidia-smi 仍然显示不同的 cuda 版本 (2认同)

Kha*_*han 5

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

\n

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

\n

简而言之

\n

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

\n