【踩坑】Pytorch与CUDA版本的关系及安装

Pytorch、CUDA和CUDA Toolkit区分

本文参考
https://www.bilibili.com/opus/926860762897448993

一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系

显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么

查看当前环境常用

shell命令

bash 复制代码
# 显卡驱动信息,主要看driver API的CUDA版本,即Runtime API CUDA支持的最高版本
nvidia-smi

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

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

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

python脚本

bash 复制代码
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

Driver API CUDA(nvidia-smi)

Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。

driver API级别的CUDA Toolkit和Nvidia Driver的关系可以不太在意

系统的Nvidia Driver决定着系统最高可以支持什么版本的driver API cuda和cudatoolkit,Nvidia Driver是向下兼容的,详情如下(见Nvidia Driver和driver API Cuda对应关系)

可以通过

bash 复制代码
nvidia-smi

查看NVIDIA GPU 的运行状态,包括Driver Version,左边的NVIDIA-SMI和Driver Version不一致大概率是因为这是子系统,一般是一致的,右边显示了系统的CUDA Version(对于我们使用pytorch来说这个driver API CUDA Version向下兼容torch对应的Runtime API CUDA Version)

这里是系统安装的cuda,它是由Nvidia官方提供的(/usr/local/cuda就是系统安装的cuda的软链接)

Runtime API CUDA(nvcc --version)

对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。

Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装对应版本的 Runtime API cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 Runtime API cudatoolkit 后,只要系统上存在与当前的Runtime API cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .

pytorch和cudatoolkit版本并不是一一对应的关系,一个pytorch版本可以有多个cudatoolkit版本与之对应。例如1.5.1版本的pytorch,既可以使用9.2版本的cudatoolkit,也可以使用10.2版本的cudatoolkit。

可以查看pytorch官网对应的https://pytorch.org/get-started/previous-versions/

只指定pytorch版本来安装不一定是能work的,例如执行conda install pytorch=X.X.X -c pytorch时,conda会自动为你选择合适版本的 Runtime API cudatoolkit。但conda只能保证你的pytorch和cudatoolkit版本一定是对应的,但并不能保证pytorch可以正常使用,因为系统的Nvidia Driver有可能不支持你所安装的cudatoolkit版本。

所以,除非你对你的Nvidia driver版本很有自信,否则,还是先查看系统Driver API CUDA的版本

当然,如果你对pytorch版本有特别的要求,你可以同时指定pytorch和cudatoolkit的版本。如果这两个版本不能兼容,系统会报错

bash 复制代码
conda install pytorch=1.5.1 cudatoolkit=9.0 -c pytorch


Solving environment: failed

UnsatisfiableError: The following specifications were found to be in conflict:
  - cudatoolkit=9.0 -> __cuda[version='>=9.0']
  - pytorch=1.5.1
Use "conda info <package>" to see the dependencies for each package.

pytorch选择CUDA版本的顺序

参考cuda和cudatoolkit

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

其实建议还是使用虚拟环境,不要安装多版本CUDA

参考安装需要的CUDA,多版本共存和自由切换

注意:

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

实际安装过程中,我选择了驱动,但是没选择kernel objects、nvidia-fs

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

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

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

相关推荐
Alsian18 小时前
Day43 随机张量与广播机制
人工智能·深度学习·神经网络·机器学习
hixiong12319 小时前
C# OpenvinoSharp使用RAD进行缺陷检测
开发语言·人工智能·c#·openvino
小浪花a19 小时前
计算机二级python-jieba库
开发语言·python
Storynone19 小时前
【Day23】LeetCode:455. 分发饼干,376. 摆动序列,53. 最大子序和
python·算法·leetcode
小和尚同志19 小时前
还有人在问 Skills 是啥?感觉和 prompt 一样
人工智能·aigc
星和月19 小时前
人工智能与神经网络
人工智能
田里的水稻19 小时前
ubuntu22.04_构建openclaw开发框架
运维·人工智能·python
萧曵 丶19 小时前
LangChain Model IO 提示词模版(Python版)
开发语言·python·langchain
Trisyp19 小时前
Word2vec核心模型精讲:CBOW与Skip-gram
人工智能·自然语言处理·word2vec
liuccn19 小时前
技能管理工具npx skills 跟openskills的关系以及区别
人工智能