Pytorch 使用不同版本的 cuda

本文详细介绍了在Pytorch中如何切换使用不同版本的CUDA,包括通过修改软链接和环境变量的方法,以及如何确定Pytorch实际运行时所使用的CUDA版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在使用 Pytorch 时,由于 Pytorch 和 cuda 版本的更新,可能出现程序运行时需要特定版本的 cuda 进行运行环境支持的情况,如使用特定版本的 cuda 编译 CUDAExtension 引入的拓展模块等。为了满足应用程序和框架本身对不同版本的 cuda 的需求,Pytorch 需要能够在不同版本的 cuda 之间切换使用。这里即记录 Pytorch 在编辑 cpp 和 cuda 拓展时确定所使用 cuda 版本的基本流程以及 Pytorch 使用不同版本的 cuda 运行程序的方法。 

 

cuda 与 cudatoolkit 的区别
  在使用 Anaconda 安装 Pytorch 等深度学习框架时,可以发现 Anaconda 会自动为我们安装 cudatoolkit,如下图所示。
  
  上述安装的 cudatoolkit 与通过 Nvidia 官方提供的  CUDA Toolkit 是不一样的。具体而言,Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、CUDA 程序相关的开发工具包等的安装选项。通过 Nvidia 官网提供的 CUDA Toolkit 安装的是完整的 CUDA 开发工具,包括 CUDA 程序的编译器、IDE、调试器等应用程序,CUDA 所支持的功能所对应的各式库文件以及它们的头文件等,具体的组成可参考  CUDA Toolkit Major Components.
  实际上,Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .
  通过 Anaconda 安装的应用程序包位于安装目录下的 /pkg 文件夹中,如笔者的目录即为 /home/xxx/anaconda3/pkgs/ ,用户可以在其中查看 conda 安装的 cudatoolkit 的内容,如下图所示。可以看到 conda 安装的 cudatoolkit 中主要包含的是支持已经编译好的 CUDA 程序运行的相关的动态链接库。
  
  在大多数情况下,上述 cudatoolkit 是可以满足 Pytorch 等框架的使用需求的。但对于一些特殊需求,如需要为 Pytorch 框架添加 CUDA 相关的拓展时(  Custom C++ and CUDA Extensions ),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit.
  本文的后续内容,即对应的是当 Pytorch 等框架需要编译对应的 CUDA 相关拓展程序时,如何设置使用不同版本的 cuda toolkit( 完整的包含有编译器的安装包 )对程序进行编译,进而满足特定的 CUDA 版本依赖。

 

Pytorch 确定所使用的 cuda 版本

  实际使用过程中,Pytorch 检测运行时使用的 cuda 版本的代码位于 torch/utils/cpp_extension.py 的_find_cuda_home 函数  ( Pytorch 1.1.0, Line 24 )中.这里主要介绍 Linux 环境下的 cuda 版本的确认过程,关于 Windows 环境下多版本 cuda 的使用可以参考上述文件中的具体实现.

  确定 cuda 路径

  若在运行时需要使用 cuda 进行程序的编译或其他 cuda 相关的操作,Pytorch 会首先定位一个 cuda 安装目录( 来获取所需的特定版本 cuda 提供的可执行程序、库文件和头文件等文件 )。具体而言,Pytorch 首先尝试获取环境变量 CUDA_HOME/CUDA_PATH 的值作为运行时使用的 cuda 目录。若直接设置了 CUDA_HOME/CUDA_PATH 变量,则 Pytorch 使用 CUDA_HOME/CUDA_PATH 指定的路径作为运行时使用的 cuda 版本的目录。

  若上述环境变量不存在,则 Pytorch 会检查系统是否存在固定路径 /usr/local/cuda 。默认情况下,系统并不存在对环境变量 CUDA_HOME 设置,故而 Pytorch 运行时默认检查的是 Linux 环境中固定路径 /usr/local/cuda 所指向的 cuda 目录。 /usr/local/cuda 实际上是一个软连接文件,当其存在时一般被设置为指向系统中某一个版本的 cuda 文件夹。使用一个固定路径的软链接的好处在于,当系统中存在多个安装的 cuda 版本时,只需要修改上述软连接实际指向的 cuda 目录,而不需要修改任何其他的路径接口,即可方便的通过唯一的路径使用不同版本的 cuda. 如笔者使用的服务器中,上述固定的 /usr/local/cuda 路径即指向一个较老的 cuda-8.0 版本的目录。

  

  需要注意的是, /usr/local/cuda 并不是一个 Linux 系统上默认存在的路径,其一般在安装 cuda 时创建( 为可选项,不强制创建 )。故而 Pytorch 检测上述路径时也可能会失败。   

  若 CUDA_HOME 变量指定的路径和默认路径 /usr/local/cuda 均不存在安装好的 cuda 目录,则 Pytorch 通过运行命令 which nvcc 来找到一个包含有 nvcc 命令的 cuda 安装目录,并将其作为运行时使用的 cuda 版本。具体而言,系统会根据环境变量 PATH 中的目录去依次搜索可用的 nvcc 可执行文件,若环境变量 PATH 中包含多个安装好的 cuda 版本的可执行文件目录( 形如/home/test/cuda-10.1/bin ),则排在 PATH 中的第一个 cuda 的可执行文件目录中的 nvcc 命令会被选中,其所对应的路径被选为 Pytorch 使用的 cuda 路径。同样的,若 PATH 中不存在安装好的 cuda 版本的可执行目录,则上述过程会失败,Pytorch 最终会由于找不到可用的 cuda 目录而无法使用 cuda.比较推荐的做法是保持 PATH 路径中存在唯一一个对应所需使用的 cuda 版本的可执行目录的路径。

  在确定好使用的 cuda 路径后,基于 cuda 的 Pytorch 拓展即会使用确定好的 cuda 目录中的可执行文件( /bin )、头文件( /include )和库文件( /lib64 )完成所需的编译过程。

  

Pytorch 使用特定的 cuda 版本
  从 Pytorch 确定使用的 cuda 版本的流程来看,想要指定 Pytorch 使用的 cuda 版本,主要有两种方法,第一种是修改软链接 /usr/local/cuda 所指向的 cuda 安装目录( 若不存在则新建 ),第二种是通过设置环境变量 CUDA_HOME 指向所需使用的 cuda 版本的安装目录。除此之外,还建议将对应 cuda 目录中的可执行文件目录( 形如/home/test/cuda-10.1/bin )加入环境变量 PATH 中。
  对于第一种方法,由于 /usr/ 和 /usr/local/ 目录下的文件均为 root 用户所管理,故而普通用户无法对其进行修改。 对于具备了 root 权限的用户而言,在安装有多版本 cuda 的 Linux 系统上,只需切换 /usr/local/cuda 所指向的 cuda 目录,让其指向所需的 cuda 版本的安装位置,即可让 Pytorch 在运行时使用指定版本的 cuda 运行程序。修改软链接的方法如下命令所示,命令删除原有的软链接,并新建指向新路径的软链接。
  sudo rm -rf /usr/local/cuda           //删除软链接,注意是 /usr/local/cuda 而不是 /usr/local/cuda/,前者仅删除软链接,而后者会删除软链接所指向的目录的所有内容,操作请小心
  sudo ln -s cuda_path /usr/local/cuda    //创建名为 /usr/local/cuda 的软链接,其指向 cuda_path 所指定的 cuda 安装目录
  或者直接强制修改原始的软链接
    sudo ln -sf cuda_path /usr/local/cuda    //修改或创建软链接 /usr/local/cuda 使其指向指定版本的 cuda 目录
  对于非 root 用户而言,主要通过第二种方法进行设置。若想要指定 Pytorch 使用的 cuda 版本,则首先需要设置 CUDA_HOME 环境变量,之后在 PATH 中加入指定 cuda 版本的可执行目录,也就时 cuda_path/bin/ 目录。完成设置后,运行 Pytorch 时的所使用的即为对应的 cuda 版本。
  以笔者的服务器账户为例,笔者在 /home/test/cuda-10.1 目录中安装了 cuda-10.1 ,而服务器上的 /usr/local/cuda 目录指向的是之前安装的老版本的 cuda-8.0,直接运行 Pytorch 时,其会基于上面的确认流程直接使用老版本的 cuda .若想要临时设置 Pytorch 使用新安装的 cuda ,则可以通过 export 命令修改全局变量。这种设置方式在当前终端退出后即失效。
    export CUDA_HOME=/home/test/cuda-10.1/           //设置全局变量 CUDA_HOME
    export PATH=$PATH:/home/test/cuda-10.1/bin/        //在 PATH 变量中加入需要使用的 cuda 版本的路径,使得系统可以使用 cuda 提供的可执行文件,包括 nvcc

  想要永久设置上述 cuda 设置,用户可以直接在自己的 bash 设置文件 ~/.bashrc 文件尾部加入上述命令,保存后再通过 source ~/.bashrc 执行文件,即可完成当前终端的环境变量修改。如果需要使用新的 cuda 来编译文件,还可以通过 LD_LIBRARY_PATH 变量指定进行链接的 cuda 库文件的路径。

  

  位于 ~/.bashrc 文件中的指令在每次终端启动时均会自动运行,后续本用户所打开的终端中的环境变量均会首先执行上述文件中的命令,从而获得对应的 cuda 变量。

 
其他
   获取 Pytorch 使用的 cuda 版本
  目前,网络上比较多的资源会讨论如何获得 Pytorch 使用的 cuda 的版本的方法。比较主流的一种方法是使用 Pytorch 提供的方法 torch.version.cuda .
    >>>import torch
    >>>torch.version.cuda    #输出一个 cuda 版本

  如笔者环境下上述命令的输出如下图所示。

  

  事实上, 上述输出的 cuda 的版本并不一定是 Pytorch 在实际系统上运行时使用的 cuda 版本,而是编译该 Pytorch release 版本时使用的 cuda 版本
  torch.version.cuda 是位于 torch/version.py 中的一个变量, Pytorch 在基于源码进行编译时,通过 tools/setup_helpers/cuda.py 来确定编译 Pytorch 所使用的 cuda 的安装目录和版本号,确定的具体流程与 Pytorch 运行时确定运行时所使用的 cuda 版本的流程较为相似,具体可以见其 源码Pytorch 1.1.0, Line 66 ).在进行 Pytorch 源码编译时, 根目录下的 setup.py 会调用上述代码,确定编译 Pytorch 所使用的 cuda 目录和版本号,并使用获得的信息修改 torch/version.py 中的 cuda 信息( Pytorch, Line 286 )。上述 torch.version.cuda 输出的信息即为编译该发行版 Pytorch 时所使用的 cuda 信息。若系统上的 Pytorch 通过 conda 安装,用户也可以直接通过 conda list | grep pytorch 命令查看安装的 Pytorch 的部分信息。   
    conda list | grep pytorch    //查看安装的 Pytorch 的信息

  笔者环境下上述命令的结果如图所示,可以看到显示的 cuda 信息与 torch.version.cuda 保持一致。

  

  想要查看 Pytorch 实际使用的运行时的 cuda 目录,可以直接输出之前介绍的 cpp_extension.py 中的 CUDA_HOME 变量。

    >>> import torch
    >>> import torch.utils
    >>> import torch.utils.cpp_extension
    >>> torch.utils.cpp_extension.CUDA_HOME        #输出 Pytorch 运行时使用的 cuda 
 
 
  参考资料:

转载于:https://www.cnblogs.com/yhjoker/p/10972795.html

<think>好的,我现在需要回答用户关于PyTorch 2.5.1对应的CUDA版本的问题。首先,我得确认用户的需求是什么。用户可能安装了PyTorch 2.5.1,或者打算安装这个版本,想知道需要哪个CUDA版本,或者想确认当前环境是否兼容。 接下来,我应该回忆一下PyTorch版本发布信息。PyTorch不同版本通常会支持不同CUDA版本,尤其是官方预编译的版本。比如,cu121对应CUDA 12.1,cu116对应CUDA 11.6等等。但具体到2.5.1这个版本,我需要查证官方文档或者版本发布说明。 首先,我会考虑访问PyTorch的官方网站,查看他们的版本历史页面。通常,每个版本的发布说明会详细列出支持的CUDA版本。但假设我现在无法直接访问网页,可能需要依靠记忆或者已有的知识库。例如,PyTorch 2.0系列通常支持CUDA 11.7和11.8,而更新的版本可能支持更高的CUDA版本,比如12.1。 但用户提到的版本是2.5.1,这属于较新的版本。根据之前的经验,PyTorch在2.x版本中逐渐增加了对CUDA 12的支持。例如,PyTorch 2.1开始支持CUDA 12.1,而更早的2.0可能支持CUDA 11.8。因此,推测2.5.1可能对应CUDA 12.1或更高版本。 不过,为了准确性,可能需要进一步验证。例如,PyTorch的官方安装命令通常会明确指定CUDA版本。例如,使用pip安装时,会有类似`torch==2.5.1+cu121`这样的包名,其中cu121表示CUDA 12.1。因此,如果用户通过官方提供的命令安装,对应的CUDA版本应该是明确的。 另外,用户可能已经安装了PyTorch 2.5.1,想要检查当前环境中的CUDA版本是否匹配。这时候,可以建议用户运行`torch.version.cuda`来查看PyTorch编译时使用CUDA版本。这样用户可以直接得到准确的信息,而无需依赖外部资料。 还需要考虑用户可能的安装方式,比如通过conda或者pip。不同的包管理工具可能会有不同版本对应关系。例如,conda安装的PyTorch可能自动处理CUDA依赖,而pip安装需要用户明确选择CUDA版本。 此外,用户可能关心的是如何确认自己的CUDA版本是否与PyTorch兼容。如果用户已经安装了CUDA,可以通过`nvcc --version`或`nvidia-smi`来查看CUDA版本。不过需要注意,`nvidia-smi`显示的是驱动支持的最高CUDA版本,而实际安装的CUDA工具包版本可能不同。 总结来说,回答应该包括以下几个部分: 1. PyTorch 2.5.1官方预编译版本对应的CUDA版本。 2. 如何通过代码检查当前PyTorch使用CUDA版本。 3. 如何检查系统中安装的CUDA版本。 4. 注意事项,比如驱动兼容性、正确安装CUDA工具包等。 需要确保信息准确,所以可能需要再次核对版本对应关系。例如,查阅PyTorch的官方发布说明,确认2.5.1版本对应的CUDA版本是否为12.1或其他。假设官方文档指出PyTorch 2.5.1支持CUDA 12.1,那么回答中需要明确说明这一点。如果用户安装的是CPU版本,则不需要CUDA,但大多数情况下用户关心的是GPU支持的情况。 另外,可能需要提醒用户,即使PyTorch是针对某个CUDA版本编译的,系统中的CUDA工具包版本需要与PyTorchCUDA版本匹配,否则可能会出现兼容性问题。同时,NVIDIA驱动版本也需要足够新以支持所需的CUDA版本。 最后,提供具体的安装命令示例,帮助用户正确安装PyTorch 2.5.1和对应的CUDA版本,或者验证现有环境是否符合要求。</think>--- ### PyTorch 2.5.1 对应的 CUDA 版本 PyTorch 2.5.1 的官方预编译版本(GPU 版本)主要支持 **CUDA 12.1** 和 **CUDA 11.8**,具体取决于安装时选择的构建配置。以下是详细说明和验证方法: --- ### 1. 官方预编译版本对应的 CUDA 版本 PyTorch 的 GPU 版本通常通过 `cuXXX` 后缀区分支持的 CUDA 版本。根据 PyTorch 官方发布信息: - **PyTorch 2.5.1** 的常见构建版本包括: - `cu121`:对应 CUDA 12.1 - `cu118`:对应 CUDA 11.8 例如,通过 `pip` 安装时,命令会明确标注 CUDA 版本: ```bash # CUDA 12.1 版本 pip install torch==2.5.1+cu121 --extra-index-url https://download.pytorch.org/whl/cu121 # CUDA 11.8 版本 pip install torch==2.5.1+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 ``` --- ### 2. 验证当前 PyTorch 使用CUDA 版本 如果已安装 PyTorch 2.5.1,可以通过以下代码直接查看编译时使用CUDA 版本: ```python import torch # 查看 PyTorch 对应的 CUDA 版本 print(torch.version.cuda) # 输出示例:12.1 或 11.8 # 检查 GPU 是否可用 print(torch.cuda.is_available()) # 输出 True 表示 GPU 驱动和 CUDA 环境正常 ``` --- ### 3. 检查系统中安装的 CUDA 版本 PyTorchCUDA 版本需要与系统中安装的 CUDA 工具包版本一致。可通过以下命令查看: - **方法1**:使用 NVIDIA 驱动工具(显示驱动支持的最高 CUDA 版本): ```bash nvidia-smi ``` 输出右上角会显示 `CUDA Version: 12.4` 等(此为驱动支持的**最高**版本,实际工具包版本可能更低)。 - **方法2**:查看 CUDA 工具包版本: ```bash nvcc --version ``` 输出示例: ``` nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Mon_Apr__3_17:16:06_PDT_2023 Cuda compilation tools, release 12.1, V12.1.105 ``` --- ### 4. 注意事项 1. **版本匹配**: - PyTorchCUDA 版本(如 `12.1`)必须与系统中安装的 CUDA 工具包版本一致。 - 如果通过 `conda` 安装,CUDA 工具包通常会自动匹配,无需手动安装。 2. **驱动兼容性**: - NVIDIA 驱动版本需支持所需的 CUDA 版本(参考 [CUDA 版本支持表](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html))。 - 例如,CUDA 12.1 要求驱动版本 ≥ 530.30.02。 3. **CPU 版本**: - 如果安装的是 PyTorch CPU 版本(无 `cuXXX` 后缀),则无需 CUDA,但无法使用 GPU 加速。 --- ### 5. 安装 PyTorch 2.5.1 的正确命令 根据需求选择 CUDA 版本: ```bash # CUDA 12.1 pip install torch==2.5.1+cu121 torchvision==0.16.1+cu121 torchaudio==2.1.1 --extra-index-url https://download.pytorch.org/whl/cu121 # CUDA 11.8 pip install torch==2.5.1+cu118 torchvision==0.16.1+cu118 torchaudio==2.1.1 --extra-index-url https://download.pytorch.org/whl/cu118 # CPU 版本 pip install torch==2.5.1+cpu torchvision==0.16.1+cpu torchaudio==2.1.1 --extra-index-url https://download.pytorch.org/whl/cpu ``` --- ### 总结 - **PyTorch 2.5.1 支持 CUDA 12.1 或 11.8**,具体由安装命令中的 `cuXXX` 后缀决定。 - 务必保持 PyTorchCUDA 版本与系统 CUDA 工具包一致,否则可能出现兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值