如何获取CUDA版本?

908

有没有快速的命令或脚本来检查安装的CUDA版本?

我在安装目录下找到了4.0的手册,但我不确定它是否是实际安装版本。


4
请参阅:如何验证CuDNN安装? - Martin Thoma
7
这个问题的目标操作系统是哪个? - nbro
17
@JaredHoberock nvcc --version 命令会提示 The program 'nvcc' is currently not installed. You can install it by typing: sudo apt install nvidia-cuda-toolkit,但是 nvidia-smi 命令显示 CUDA 版本为 10.1。 - mrgloom
4
但运行 cat /usr/local/cuda/version.txt 命令可以得到更精确的版本信息:CUDA 版本 10.1.168 - mrgloom
如果您正在寻找实际版本数字的字符串,在Unix中,您可以使用nvidia-smi混合获取版本,使用grep识别行,并使用sed删除不必要的字符:nvidia-smi | grep -o 'CUDA Version: [0-9].\.[0-9]' | sed 's/.*: //' - Eduardo Pignatelli
显示剩余2条评论
31个回答

1159

正如Jared在评论中提到的那样,从命令行:

nvcc --version

(或者/usr/local/cuda/bin/nvcc --version)可以给出CUDA编译器版本(与工具包版本相匹配)。

从应用程序代码中,您可以使用以下命令查询运行时API版本:

cudaRuntimeGetVersion()

或者使用驱动程序API版本

cudaDriverGetVersion()

正如Daniel所指出的那样,deviceQuery是一个SDK示例应用程序,它查询上述内容以及设备能力。
正如其他人所指出的那样,您还可以使用以下方法检查version.txt(在最近的CUDA版本中为.json),例如,在Mac或Linux上:
cat /usr/local/cuda/version.txt

然而,如果除了从/usr/local/cuda链接的版本之外还安装了CUDA工具包的其他版本,则如果另一个版本在您的PATH中早于上述版本,则此版本可能报告不准确的版本,因此请谨慎使用。


11
假设nvcc已经在你的路径中,从Windows命令提示符中输入 "nvcc --version" 命令应该可以正常工作。 - harrism
24
在Ubuntu中,您可能需要安装“nvidia-cuda-tools”才能使该命令起作用。只需键入“sudo apt install nvidia-cuda-toolkit”。 - Oleg Kokorin
21
如果找不到nvcc,它应该在/usr/local/cuda/bin/中。 - Rush
16
点赞支持 cat /usr/local/cuda/version.txt 命令。如果已安装 NVIDIA Toolkit,则使用流行的 nvcc --version 方法有效,但是如果您仅安装了 CUDA 运行时,则可能不存在 nvcc 命令,正如 @RutgerHofste 指出的那样。例如,(TensorFlow 设置说明)未安装 nvcc。 - Kirill Pavlov
6
"/usr/local/cuda/bin/nvcc --version" 和 "nvcc --version" 显示不同的输出结果。 - kamran kausar
显示剩余8条评论

302

[编辑的答案。感谢所有纠正它的人]

如果你运行

nvidia-smi

你应该在命令输出的右上角找到已安装驱动程序支持的最高 CUDA 版本,而不是找到CUDA 版本。至少,我在 CUDA 版本 10.0 上找到了这个输出, enter image description here

请注意,这并不意味着 CUDA 10.0 已经安装。可能已经安装,也可能没有。

你可以通过nvcc --version命令来检查 CUDA 是否真正安装。

注意 - 有时候通过某些方法(.run 文件)安装 CUDA 默认也会安装 NVIDIA 驱动程序或替换现有安装的驱动程序,这让很多人感到困惑。然而,通过 CUDA 安装来安装驱动程序可能不能为你的 GPU 提供最新或最合适的驱动程序。这是一个更复杂的话题。


11
似乎 nvidia-smi 仅在旧版本中输出驱动程序版本。 - mrgloom
68
该CUDA版本显示仅适用于410.72版本之后的驱动程序,并且即使未安装CUDA,它也将显示CUDA版本。因此,当前这些信息没有任何意义。参考:https://devtalk.nvidia.com/default/topic/1045528/nvidia-smi-doesn-t-show-cuda-version-even-after-installation/ - Bruce Yo
62
这个答案是不正确的,它只表示驱动程序支持的CUDA版本。它并没有提供任何关于安装了哪个CUDA版本甚至是否安装了CUDA的信息。 - talonmies
24
nvcc --versionnvidia-smi 给出的 CUDA 版本不一致,最终发现你所用的(nvidia-smi)是错误的。 - scottlittle
15
nvidia-smi 只显示已安装驱动程序的最高兼容 CUDA 版本。这不一定是当前安装的 CUDA 版本! - Pidem
显示剩余4条评论

229

在Ubuntu上使用Cuda V8:

$ cat /usr/local/cuda/version.txt
  
您也可以通过以下命令了解安装的CUDA版本:

$ ls -l /usr/local | grep cuda

这将会给你类似于这样的结果:

lrwxrwxrwx  1 root root    9 Mar  5  2020 cuda -> cuda-10.2
drwxr-xr-x 16 root root 4096 Mar  5  2020 cuda-10.2
drwxr-xr-x 16 root root 4096 Mar  5  2020 cuda-8.0.61

假设PATH设置正确,cuda的版本应该是活动版本(在这种情况下为10.2)。

注意:仅当您愿意假定CUDA安装在/usr/local/cuda下时,此方法才有效(对于具有默认位置的独立安装程序而言是正确的,但对于将CUDA集成为软件包的发行版则不一定正确)。参考:@einpoklum的评论


12
这个比Harrism的答案更加灵活,因为它不需要安装nvcc(需要管理员权限)。 - dinosaur
2
适用于AWS Linux深度学习AMI。 - Rutger Hofste
23
我用这个命令得到的是"CUDA版本8.0.61",但是nvcc --version给出的是"Cuda编译工具,发布7.5,V7.5.17",你知道这种不匹配的原因吗? - martinako
2
因为这个回答更正确,我点了赞。我的CUDA版本是9.0.176,在nvcc -V中没有提到。 - Kalpit
@martinako 我猜你更新了cuda,但没有安装更新的nvcc。看一下 ls -l /usr/local | grep cuda,以了解你安装了哪些版本。 /usr/local/cuda(应该是一个符号链接)指向的那个版本应该是系统看到的默认版本。 - drevicko
显示剩余5条评论

43

CUDA 版本:

nvcc --version

或使用,

nvidia-smi

cuDNN版本:

对于Linux系统:

使用以下命令查找cuDNN路径:

$ whereis cuda
cuda: /usr/local/cuda

然后使用此方法从头文件中获取版本号,

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

对于 Windows 系统,使用以下命令查找 cuDNN 路径:

C:\>where cudnn*
C:\Program Files\cuDNN7\cuda\bin\cudnn64_7.dll

然后使用此方法从头文件中转储版本:

type "%PROGRAMFILES%\cuDNN7\cuda\include\cudnn.h" | findstr CUDNN_MAJOR

如果在Windows上得到了两个不同版本的CUDA-nvcc和NVIDIA-smi显示不同的CUDA版本


2
你在谈论CUDA SDK。 也许问题是关于CUDA运行时和驱动程序的,那么这就不适用了。 (或者问题是关于计算能力的,但不确定是否是这种情况。) - Alexander Stohr
nvcc是一个二进制文件,它会报告其版本。您可以在单独的子目录中并排拥有多个版本。/usr/local/cuda是一个可选的符号链接,如果安装了CUDA SDK,则可能只存在该链接。 - Alexander Stohr
2
@Lorenz - 在某些情况下,我没有安装nvidia-smi。此外,在调试时,了解事物的位置是很好的。如果您想在Linux上卸载cuda,则很多时候您唯一的选择是手动查找版本并删除它们。另外,请注意答案包含CUDA和cuDNN,后者不会被smi显示。我已更新答案以使用nvidia-smi,以防您只对CUDA的版本号感兴趣。 - Shital Shah
我的目的是删除@Mircea的评论,我并不是指你的回答。我的意图并不是让nvidia-smi出现在你的回答中。在任何情况下都不应该提到nvidia-smi!它不是这个主题的问题的答案。如果你非常想提到它,你必须明确说明它只显示支持的版本,而不是安装的版本。你现在的回答没有明确说明这一点,因此在这一点上是错误的。 - questionto42
对于Linux系统,实际上是在cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2中查找,而对于conda环境,则是在cat /opt/anaconda3/envs/tensorflow-gpu-2.6/include/cudnn_version.h | grep CUDNN_MAJOR -A 2中查找。 - Gabriel Cretin
2
nvidia-smi与安装的CUDA版本无关。它甚至不随CUDA工具包一起提供,而是来自NV驱动程序包。它仅显示支持的最大CUDA版本。 - bviktor

36

其他回答者已经描述了哪些命令可以用于检查CUDA版本。在这里,我将描述如何将这些命令的输出转换为形式为“10.2”、“11.0”等的环境变量。

回顾一下,您可以使用

nvcc --version

查找CUDA版本。 我认为这应该是您的首要选择。 如果您安装了多个CUDA版本,则此命令应打印出路径上最高版本的版本。

输出如下:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Thu_Jun_11_22:26:38_PDT_2020
Cuda compilation tools, release 11.0, V11.0.194
Build cuda_11.0_bu.TC445_37.28540450_0

我们可以通过sed命令提取出仅包含主要版本号和次要版本号的版本号。

CUDA_VERSION=$(nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p')
如果nvcc未在您的路径上,则应通过指定nvcc的默认位置的完整路径来运行它。
/usr/local/cuda/bin/nvcc --version

输出结果与上面相同,可以使用相同的方法进行解析。

或者,您还可以在version.txt文件中找到CUDA版本。

cat /usr/local/cuda/version.txt

其中的输出

CUDA Version 10.1.243
可以使用sed解析,以仅获取主要和次要的版本号。
CUDA_VERSION=$(cat /usr/local/cuda/version.txt | sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')

请注意,有时version.txt文件引用的CUDA安装版本与nvcc --version不同。在这种情况下,nvcc版本应该是您实际使用的版本。

我们可以将这三种方法结合起来,以便如下健壮地获取CUDA版本:

if nvcc --version 2&> /dev/null; then
    # Determine CUDA version using default nvcc binary
    CUDA_VERSION=$(nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p');

elif /usr/local/cuda/bin/nvcc --version 2&> /dev/null; then
    # Determine CUDA version using /usr/local/cuda/bin/nvcc binary
    CUDA_VERSION=$(/usr/local/cuda/bin/nvcc --version | sed -n 's/^.*release \([0-9]\+\.[0-9]\+\).*$/\1/p');

elif [ -f "/usr/local/cuda/version.txt" ]; then
    # Determine CUDA version using /usr/local/cuda/version.txt file
    CUDA_VERSION=$(cat /usr/local/cuda/version.txt | sed 's/.* \([0-9]\+\.[0-9]\+\).*/\1/')

else
    CUDA_VERSION=""

fi

这个环境变量在下游安装过程中非常有用,例如当使用pip安装已经为正确的CUDA版本编译过的pytorch副本时。

python -m pip install \
    "torch==1.9.0+cu${CUDA_VERSION/./}" \
    "torchvision==0.10.0+cu${CUDA_VERSION/./}" \
    -f https://download.pytorch.org/whl/torch_stable.html

类似地,当未安装CUDA时,您可以安装pytorch的CPU版本。

if [ "$CUDA_VERSION" = "" ]; then
    MOD="+cpu";
    echo "Warning: Installing CPU-only version of pytorch"
else
    MOD="+cu${CUDA_VERSION/./}";
    echo "Installing pytorch with $MOD"
fi

python -m pip install \
    "torch==1.9.0${MOD}" \
    "torchvision==0.10.0${MOD}" \
    -f https://download.pytorch.org/whl/torch_stable.html

但是要小心,因为您可能会意外安装仅支持CPU的版本,而本来想要支持GPU。 例如,如果您在服务器的登录节点上运行安装脚本,该节点没有GPU,并且您的作业将部署到具有GPU的节点上。在这种情况下,登录节点通常不会安装CUDA。


很好的解决方案。我有一个安装了Ubuntu 18.04的系统,报告CUDA_VERSION 9.1,但可以使用cu10.1运行PyTorch。不确定这是怎么回事。 - Jason Harrison
GPU与CPU:这可以在运行时切换,因此您可以随时决定。 - Jason Harrison
@JasonHarrison 如果你有GPU,你可以安装GPU版本,并在运行时选择在GPU或CPU上运行。如果你没有GPU,你可能想通过安装仅支持CPU的pytorch版本来节省大量磁盘空间。我相信pytorch安装实际上包含了一个供应商提供的CUDA副本,因此你可以安装和运行不同版本的CUDA pytorch,而不必安装在你的系统上。 - scottclowe

32
使用以下命令通过Conda检查CUDA安装情况:
conda list cudatoolkit

使用以下命令检查通过conda安装的CUDNN版本:

conda list cudnn
如果您想通过CONDA安装/更新CUDA和CUDNN,请使用以下命令:
conda install -c anaconda cudatoolkit
conda install -c anaconda cudnn

或者,您可以使用以下命令检查CUDA安装:

nvidia-smi

或者

nvcc --version

如果您是通过Anaconda安装的tensorflow-gpu(您可以在控制台中打开Python并检查默认Python启动时是否显示Anaconda,或者您可以运行which python并检查位置来验证此内容),那么手动安装CUDA和CUDNN很可能不起作用。 您将需要通过conda进行更新。

如果您想手动安装CUDA、CUDNN或tensorflow-gpu,您可以在这里查看说明:https://www.tensorflow.org/install/gpu


6
nvidia-smi 命令无法提供已安装的版本,只能提供支持的版本,对于这个问题没有用处,在 @mostafa.elhoushi 的回答下面评论中有相关说明。 - questionto42
3
如果您在使用conda安装的cuda工具包中,想要在anaconda提示符中运行nvcc --version命令,则该命令无法正常工作。如果您是在非conda安装环境下运行该命令,则这句话就是已经被接受的答案的重复。 - questionto42
请注意,在conda中,如果您想要为pytorch安装cudatoolkit,则不应单独安装它。请参阅https://dev59.com/Eq_la4cB1Zd3GeqPuIVM#63162492了解详细信息。 - questionto42
2
如何检查Anaconda中是否安装了CUDA,点赞! - questionto42

25

在Ubuntu上:

尝试使用以下命令:

$ cat /usr/local/cuda/version.txt 或者 $ cat /usr/local/cuda-8.0/version.txt

有时文件夹的名称是"Cuda-version"。

如果以上方法都不行,请前往 $ /usr/local/ 并找到您的Cuda文件夹的正确名称。

输出结果应类似于: CUDA版本8.0.61


这就是关于CUDA SDK的全部内容,与CUDA驱动程序无关。 - Alexander Stohr

13
如果您已安装了CUDA SDK,您可以运行 "deviceQuery" 命令来查看CUDA的版本。

8
对于那些感到困惑的人:deviceQuery是一个示例程序,用于构建(在Linux中,需要在/usr/local/cuda/samples目录下运行make,然后运行./bin/x86_64/linux/release/deviceQuery)。 - Matthieu
现在,CUDA Toolkit不再包含样本。您可以在Github上找到它们。特别地,这个样本位于Samples/1_Utilities下面。 - paleonix

12
如果您已经安装了PyTorch,您可以在IDE中直接运行以下代码:
import torch

print(torch.version.cuda)

5
警告:这将告诉您 PyTorch 构建时使用的 CUDA 版本,但不一定是您可以安装的 PyTorch 版本。 - Jason Harrison

6
你可能会发现CUDA-Z很有用,这是他们网站上的一句话引用:“这个程序诞生于另一个Z-utility的模仿,如CPU-Z和GPU-Z。CUDA-Z显示了关于CUDA启用的GPU和GPGPU的一些基本信息。它适用于nVIDIA Geforce、Quadro和Tesla卡,ION芯片组。”

http://cuda-z.sourceforge.net/

在支持选项卡中,有源代码的URL:http://sourceforge.net/p/cuda-z/code/,下载实际上并不是安装程序,而是可执行文件本身(无需安装,因此速度很快)。
此实用程序提供了大量信息,如果您需要知道它是如何派生出来的,则可以查看源代码。还有其他类似于此的实用程序,您可能会搜索到。

这是一个针对Windows平台的程序。 它能够在脚本内部使用吗? - Alexander Stohr
浏览了各个选项卡,我没有找到任何关于CUDA的有用信息。 - Redoman
它适用于Linux、Windows和Mac:https://sourceforge.net/p/cuda-z/code/HEAD/tree/qt-s-mini/4.8.6/ - 检查源代码的主干:https://sourceforge.net/p/cuda-z/code/HEAD/tree/trunk/ - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接