我对运行 which nvcc 和 nvidia-smi 所显示的不同 CUDA 版本感到非常困惑。我的 ubuntu 16.04 上安装了 cuda9.2 和 cuda10。现在我将 PATH 设置为指向 cuda9.2。所以...
和 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 |
那么,我是按照建议使用 cuda9.2 which nvcc
,还是按照建议使用 cuda10 nvidia-smi
?我 看到了这个答案 ,但它并没有直接解答我的困惑,只是要求我们重新安装 CUDA 工具包,而我已经这样做了。
CUDA 有 2 个主要 API,即运行时 API 和驱动程序 API。两者都有相应的版本(例如 8.0、9.0 等)
GPU 驱动程序安装程序安装了 libcuda.so
驱动程序 API 所需的支持(例如
运行时 API 所需的支持(例如 libcudart.so
在 Linux 上,以及 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 驱动程序。
因此,根据设计,这两个数字不一定匹配,因为它们反映的是两个不同的东西。
如果你想知道为什么 nvcc -V
显示的 CUDA 版本不是你期望的(例如,它显示的版本与你认为安装的版本不同)或者根本没有显示任何内容,那么就版本而言,可能是因为你没有遵循 cuda linux 安装指南中步骤 7(CUDA 11 之前)(或 CUDA 11 linux 安装指南中的步骤 6)中的强制性 说明
请注意,尽管这个问题主要针对 Linux,但同样的概念也适用于 Windows CUDA 安装。驱动程序具有与之关联的 CUDA 驱动程序版本(例如 nvidia-smi
,可以使用 查询)。CUDA 运行时也具有与之关联的 CUDA 运行时版本。两者不一定在所有情况下都匹配。
在大多数情况下,如果 nvidia-smi
报告的 CUDA 版本在数值上等于或高于 报告的版本 nvcc -V
,则无需担心。这是 CUDA 中定义的兼容性路径(较新的驱动程序/驱动程序 API 支持“较旧的” CUDA 工具包/运行时 API)。例如,如果 nvidia-smi
报告 CUDA 10.2,并且 nvcc -V
报告 CUDA 10.1,则通常无需担心。它应该可以正常工作,并不一定意味着您“实际上安装了 CUDA 10.2,而您原本想安装 CUDA 10.1”
如果 nvcc
命令根本没有报告任何内容(例如 Command 'nvcc' not found...
)或者它报告了意外的 CUDA 版本,这也可能是由于 CUDA 安装不正确,即未正确执行上述强制性步骤。您可以使用 Linux 实用程序(如 find
或 locate
(请使用手册页了解如何操作))来查找 nvcc
可执行文件,开始弄清楚这一点。假设只有一个,那么可以使用它的路径来修复您的 PATH 环境变量。CUDA Linux 安装指南 还解释了如何设置它。您可能需要调整 PATH 变量中的 CUDA 版本以匹配您实际需要/安装的 CUDA 版本。也有可能您根本没有安装 CUDA 工具包( nvcc
通过 CUDA 工具包安装提供,而不是单独通过 GPU 驱动程序安装提供。)
类似地,当使用docker时,该 nvidia-smi
命令通常会报告安装在基础机器上的驱动程序版本,而其他版本方法 nvcc --version
则会报告安装在docker容器内的CUDA版本。
同样,如果您使用了其他 CUDA \'工具包\' 安装方法(例如 Anaconda),您可能会发现 Anaconda 指示的版本与 指示的版本不“匹配” nvidia-smi
。但是,上述评论仍然适用。Anaconda 安装的旧 CUDA 工具包可以与 报告的较新版本一起使用 nvidia-smi
,并且 nvidia-smi
报告的 CUDA 版本比 Anaconda 安装的版本更新/更高并不意味着您遇到了安装问题。
这 是另一个涉及类似问题的问题。上述处理并不表明此答案仅适用于您有意或无意地安装了多个 CUDA 版本的情况。 每次安装 CUDA 时 和 nvcc
报告的版本 nvidia-smi
可能不匹配,这是 预期的 行为,在大多数情况下很正常。
如果 报告的版本 nvidia-smi
在数值上低于 报告的版本 nvcc
,我会认为这可能是一个损坏的配置。如果您用它编译代码 nvcc
,然后尝试在该机器上运行它,它很可能无法正常工作。此原则存在 兼容性例外 (通过安装 \'向前兼容性包\' 启用)。在这种情况下,我的一般建议(对于很多问题都是如此)是将 GPU 驱动程序版本更新为适用于您的 GPU 的最新版本。