最近在给深度学习项目搭建环境时,遇到了不得不使用 CUDA 11.8 的情况,而我在通过不同方式查看自己 CUDA 版本时发现了不同版本号,产生了诸多疑惑(甚至差点卸载了 CUDA 重装)。经过一番探索以及向d老师寻求帮助后,终于理清了他们的关系,遂写下此文以帮助遇到同样问题的追光者们~(部分内容引用自DeepSeek,如有错误之处欢迎指出!)

  1. nvcc -V

    该方式显示的是当前环境下 nvcc 对应的 CUDA 工具包(CUDA Toolkit)版本(如下面的 cuda_12.0 表示 CUDA Toolkit 版本为12.0):

    1
    2
    3
    4
    5
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2023 NVIDIA Corporation
    Built on Fri_Jan__6_16:45:21_PST_2023
    Cuda compilation tools, release 12.0, V12.0.140
    Build cuda_12.0.r12.0/compiler.32267302_0

    对于当前环境下的CUDA Toolkit版本,有这几种情况:

    • 处于虚拟环境中,且该虚拟环境有 cuda-nvcc:那么输出的版本就是该环境下 CUDA Toolkit 版本;
    • 处于虚拟环境中,但是该虚拟环境中没有安装 cuda-nvcc:那么输出的是系统 CUDA Toolkit 版本;
    • 无环境(base 环境)情况下,输出的是系统 CUDA Toolkit 版本。

    每种情况下,运行 which nvcc 输出的也是相应的 nvcc 的位置。


    为了深刻理解 nvcc 与 CUDA 的关系,在此阐述一下他们的定义。

    • CUDA 是什么? CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行计算平台和编程模型,允许开发者直接利用 GPU 进行通用计算(如深度学习、科学计算等)。其由 CUDA 工具包(Toolkit)、CUDA 驱动和 CUDA 运行时库等组成。
    • nvcc 是什么? nvcc (NVIDIA CUDA Compiler)是 CUDA Toolkit 中的编译器,专门用于编译 CUDA 代码(.cu 文件)。
    • nvcc 与 CUDA 的关系
      • nvcc 是 CUDA Toolkit 的一部分。安装 CUDA Toolkit 时,会默认安装 nvcc;
      • nvcc 依赖 CUDA Toolkit。其行为受 CUDA Toolkit 版本的控制;
      • nvcc 不直接依赖显卡驱动。编译代码时只需 CUDA 工具包,但生成的程序运行时需要匹配的 NVIDIA 驱动。
  2. torch.version.cuda

    在虚拟环境中,运行:

    1
    2
    3
    4
    5
    6
    # .venv1
    Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import torch
    >>> print(torch.version.cuda)
    11.8

    输出的 11.8 表示当前环境下实际使用的 CUDA 版本。 当我在另一个环境运行时,显示的就是另一个环境的 CUDA 版本:

    1
    2
    3
    4
    5
    6
    # .venv2
    Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import torch
    >>> print(torch.version.cuda)
    12.4

    由此可见,每个虚拟环境独立管理 Python 包。在一个环境中安装 PyTorch for CUDA 11.8,不会影响其他环境中已安装的 PyTorch(如 CUDA 12.4 版本)。 并且需要注意的是,现在的 PyTorch 的预编译包(通过 pipconda 安装)会自带与 CUDA 版本对应的运行时库(如 cuDNN、cuBLAS 等),且这些库仅在该虚拟环境中生效,不会干扰系统全局或其他环境中的 CUDA。

  3. nvidia-smi

    下图中 CUDA Version: 12.4 表示当前安装的 NVIDIA 驱动版本支持的最高 CUDA Toolkit 版本,并非当前版本。说明我的 NVIDIA 驱动可以支持 CUDA Toolkit 12.4 及以下的版本,即向下兼容。

    注:PyTorch 实际依赖的是 NVIDIA 驱动。PyTorch 通过 NVIDIA 驱动与 GPU 通信。只要驱动版本足够新(如支持 CUDA 12.0 的驱动通常也兼容 CUDA 11.8),不同 CUDA 版本的 PyTorch 均可运行。

总结一下:

命令 显示内容 主要用途
nvcc -V 系统中安装的 CUDA Toolkit 版本 确认编译 CUDA 代码时的工具包版本
torch.version.cuda 当前环境中 Pytorch 实际使用的 CUDA 运行时版本 确认深度学习框架的 CUDA 环境
nvidia-smi 驱动支持的最高 CUDA Toolkit 版本 确认驱动兼容性