Pytorch、CUDA和CUDA Toolkit区分
- 查看当前环境常用
- [Driver API CUDA(nvidia-smi)](#Driver API CUDA(nvidia-smi))
- [Runtime API CUDA(nvcc --version)](#Runtime API CUDA(nvcc --version))
- pytorch选择CUDA版本的顺序
- 安装需要的CUDA,多版本共存和自由切换
本文参考
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,多版本共存和自由切换
其实建议还是使用虚拟环境,不要安装多版本CUDA
注意:
安装包类型要选择runfile,其它二者据说会有一些自动升级的行为,比较麻烦。
实际安装过程中,我选择了驱动,但是没选择kernel objects、nvidia-fs
可能会报nvidia的错误,看下面的处理