必要组件
1. CUDA版 PyTorch
2. cudatoolkit-xxxxx.conda 本地包
3. cudnn-xxx.donda 本地包(非必要,结合项目需求安装,不确定的可以先不装)
PyTorch-CUDA
先看下正确的PyTorch版本: conda list。注意一定要有cuda后缀!如果没有直接卸载重装PyTorch
PyTorch安装命令生成:Start Locally | PyTorch
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
CUDAtoolkit
在虚拟环境中安装完cuda和cudnn想要测试是否安装成功,不能使用nvcc -V命令测试,需要在虚拟环境中安装pytorch包测试!(不同驱动区别见CUDA、NVIDIA driver、多版本cuda - 知乎)
(注意,必须安装cudatoolkit包,不然即使cuda.is_available返回True,代码运行时也会报错)
包下载:conda search cudatoolkit --info
执行上述命令后,会显示出源内所有的cuda版本,以及下载地址。找到自己想要的cuda版本后,复制url字段里的下载链接,下载到本地。
cd目录后,安装离线包:conda install --use-local cudatoolkit-11.8.0-hd77b12b_0.conda
(cudnn安装详见文末的参考)
CUDA初步检测
import torch
print('当前设备索引:'+str(torch.cuda.current_device() ))
print('GPU数量:'+str(torch.cuda.device_count()))
print('GPU型号:'+str(torch.cuda.get_device_name(0)))
print('cuda.is_available:'+str(torch.cuda.is_available()))
# 由于pytorch的whl安装包名字都一样,所以很难区分到底是基于cuda的哪个版本
print('version.cuda:'+str(torch.version.cuda))
GPU运算实测
还不放心的话,打开任务管理查看GPU负载,运行下面的代码即可完成真实的GPU运算测试。(终端里没反应的话,用py文件运行)
import time
import torch
A = torch.ones(1000, 1000).to('cuda')
B = torch.ones(1000, 1000).to('cuda')
startTime = time.time()
for i in range(100000):
C = torch.matmul(A, B)
if (time.time() - startTime) > 10: #10秒压力测试
break
其他测试
CUDA版本检测:如下图,CMD和conda命令行检测到的显卡驱动、CUDA版本完全一样,都是系统环境下的CUDA库(nvcc命令为nv官网完整CUDA包安装的检测),但是这个3G多的完整包不是必要的(涉及到需要cuda编译的库需要完整的CUDA包)!PyTorch只需要安装cuda的toolkit包即可。
CUDA 系统环境与虚拟环境关系
首先卸载系统CUDA完整包(nv官网那个)
此时经测试发现系统环境下CUDA已经不可使用,注意:nvcc -v为完整版本CUDA库的检测方式。
nvidia-smi为显卡驱动程序的命令,也就是说只要显卡能试用,这个命令理论上就可以使用,与CUDA驱动无关。
nvidia-smi 输出的与控制面板的版本是一样的(均来自显卡驱动)
但虚拟环境下torch的CUDA库仍然可用...吗?
经测试发现, 这个时候其实已经出问题了:
直接再次安装PyTorch,无法解决问题!搜索后尝试借鉴直接删除报错文件的方法(反正现在环境用不了了,死马当活马医吧...事实证明马变成泥马了~~~不要这么干)
首先卸载PyTorch:conda uninstall pytorch
然后再次安装PyTorch。
这个时候突然想起来好像没有安装cuda的库,掏出之前下载好的离线包安装。
(必须cd到包所在路径后执行命令):
conda install --use-local cudatoolkit-11.8.0-hd77b12b_0.conda
搞定,这次在Jupyter里面网络已经可以正常训练了,gpu的调用也是正常的。
所以NV官网的CUDA安装包不是必要的,只需要在Python或者Anaconda的虚拟环境下安装cudatoolkit包即可,只有几百兆大小!并且cudnn-8.9.2.26-cuda11_0.conda也不是必要的(至少对于我这个PyTorch项目现在用不到)!
显卡驱动版本和CUDA库版本
之前由于急着解决环境问题,病急乱投医,甚至把显卡驱动降级了(nvidia-smi给的那个版本)
后来又测试了下显卡驱动版本和cuda版本的关系:显卡驱动无需与cuda版本保持一致(对于游戏显卡来说装最新的驱动就行,/dog)
安装的CUDA库是11.8版本,最新的显卡驱动是12.2版本的CUDA支持,但是不影响PyTorch的GPU运算!因此别费力重装旧版本的显卡驱动了!
CUDA库对显卡驱动版本的要求,一句话就是:最新的显卡驱动就行。CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation
显卡驱动的CUDA版本,有需要的话参考下面的版本对应关系,CUDA版本号来自nvidia-smi,不是CUDA库的版本。
显卡驱动版本——自带CUDA版本
536.40 12.2.79
528.49 12.0.147
526.98 12.0.89
472.84 11.4.176
参考:
cconda虚拟环境中安装cuda和cudnn,再也不用头疼版本号的问题了_conda cudnn_爱幻想-hjyp的博客-CSDN博客