一文理顺:pytorch、cuda版本,从此不再为兼容问题头疼!
麦冬的笔记
编辑于 2024年05月07日 07:20

1 痛点

无论是本地环境,还是云GPU环境,基本都事先装好了pytorch、cuda,想运行一个新项目,到底版本是否兼容?

解决思路: 从根本上出发:GPU、项目对pytorch的版本要求

最理想状态:如果能根据项目,直接选择完美匹配的平台,丝滑启动。

1.1 如果CUDA版本不对

在我安装pytorch3d时,cuda版本不对,报错: 

要解决这个问题,需要先了解当前环境的信息,然后根据GPU和项目版本要求推算出合适的版本,再安装。具体如下:

2 查看当前环境信息

2.1 使用shell查看

代码块
JavaScript
自动换行
复制代码
# 显卡驱动信息,主要看CUDA支持的最高版本
nvidia-smi

# 当前使用的CUDA的版本
nvcc -V

# 查看安装了几个CUDA,当前使用哪个版本的CUDA
ll /usr/local/

# 查看已安装的包的版本
conda list | grep cuda
conda list | grep torch
复制成功

2.2 使用py脚本查看

vim version.py

代码块
JavaScript
自动换行
复制代码
import torch
print(torch.__version__) # 查看torch版本
print(torch.cuda.is_available()) # 看安装好的torch和cuda能不能用,也就是看GPU能不能用

print(torch.version.cuda) # 输出一个 cuda 版本,注意:上述输出的 cuda 的版本并不一定是 Pytorch 在实际系统上运行时使用的 cuda 版本,而是编译该 Pytorch release 版本时使用的 cuda 版本,详见:https://blog.csdn.net/xiqi4145/article/details/110254093

import torch.utils
import torch.utils.cpp_extension
print(torch.utils.cpp_extension.CUDA_HOME) #输出 Pytorch 运行时使用的 cuda
复制成功

3 推算合适的pytorch和cuda版本

安装CUDA过程并不难,主要是理解CUDA、cudatoolkit以及3个cuda版本的关系。理解到位之后,安装就是落地而已。在边踩坑边学习的过程中,学到以下文章:

3.1 pytorch和cuda的关系,看这篇:

如何解决PyTorch版本和CUDA版本不匹配的关系 - 知乎 (zhihu.com) 

https://zhuanlan.zhihu.com/p/633473214

核心步骤:

  1. 根据GPU型号,去官网CUDA GPUs上去查询版本号,下图1中显示,RTX 3090的计算能力架构版本号是8.6,对应sm_86。其中8是主版本号,6是次版本号。

  2. 仍然是上面的网页中,点链接进去,可查看到该GPU的架构。比如RTX 3090架构为Ampere

  3. 根据架构,从下图2中查到CUDA版本范围,比如AmpereCUDA 11.0-12.2

  4. 项目一般会指定PyTorch版本,然后去PyTorch官网Start Locally | PyTorch找到PyTorch和CUDA的交集,选择CUDA最高的(运算更快)

  5. 官方提供的一般是pip方式安装,如果慢,可尝试换源、代理等方式。

  6. 除了pip安装方式,也可以whl方式下载离线安装包:

代码块
JavaScript
自动换行
复制代码
以Windows下为例。

假设在pytorch获得的pip安装命令为:
pip install torch===1.7.0+cu110 torchvision===0.8.1+cu110 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

如何获取whl离线安装包并安装?

下载地址:https://download.pytorch.org/whl/torch_stable.html,下载以下安装包:

torch-1.7.0+cu110-cp37-cp37m-win_amd64.whl
torchvision-0.8.1+cu110-cp37-cp37m-win_amd64.whl
torchaudio-0.7.0-cp37-none-win_amd64.whl

注意:cu110表示CUDA是11.0版本的,cp37表示python3.7,win表示windows版本,具体选择什么版本,可以参考上图中的“Run this Command”。

安装方法:进入离线安装包所在位置,然后“shift+鼠标右键”,然后选择“在此处打开powershell窗口”,最后输入“pip install torch-1.7.0+cu110-cp37-cp37m-win_amd64.whl”,即输入“pip install xxxx.whl”。

有可能会出现[winError]拒绝访问的错误提示,并且要求你添加“--user”,你可以这样输入:"pip install xxxx.whl --user"
复制成功

3.2 深入了解cuda、cudatoolkit以及多版本cuda共存时pytorch调用哪个

进一步,你有必要深入了解一下cuda、cudatoolkit以及多版本cuda共存时pytorch调用哪个 cuda和cudatoolkit-CSDN博客

https://blog.csdn.net/xiqi4145/article/details/110254093

3.3 安装需要的CUDA,多版本共存,并自由切换!

了解完了以上知识,那么你需要的是:安装需要的CUDA,多版本共存,并自由切换! 【多版本cuda自由切换】在ubuntu上安装多个版本的CUDA,并且可以随时切换cuda-11.3//cuda-11.8//cuda-11.6//cuda-11.2_ubuntu切换cuda-CSDN博客 

https://blog.csdn.net/BetrayFree/article/details/134870198

注意:

  1. 安装包类型要选择runfile,其它二者据说会有一些自动升级的行为,比较麻烦。

  2. 实际安装过程中,我选择了驱动,但是没选择kernel objectsnvidia-fs

  3. 可能会报nvidia的错误,看下面的处理

3.4 nvidia报错的处理

在安装过程中,会遇到报错,nvidia驱动需要卸载,参考: CUDA、驱动安装与踩坑记录 - 知乎 (zhihu.com) ubuntu升级NVIDIA驱动,遇到ERROR: An NVIDIA kernel module ‘nvidia-uvm‘ appears to already be loaded in your_error: an nvidia kernel module 'nvidia' appears to-CSDN博客

https://zhuanlan.zhihu.com/p/642632372

https://blog.csdn.net/hjxu2016/article/details/135128492