目录
6.2 torch.cuda.is_available()返回值为false
0. 前言
我也不知道有没有装好,稍微记录一下安装步骤。提前说一下踩坑经历:
①一开始看别人的教程装了cuda11.4,后来担心太新了有问题,就卸载了cuda11.4并重装了cuda10.2;
②miniconda3安装的时候看别人的教程,误打误撞把miniconda3装到了管理员环境下(sudo su),千辛万苦卸载之后重新安装到普通环境里;
③cudnn安装顺利,没涉及到卸载;
④pytorch安装官网的命令有几个依赖怎么都装不上(应该是我没有梯子的缘故),没办法去清华镜像下载tar包;
⑤安装后import torch报错,后来按某篇博客的说法卸载pytorch重装之后又好了,最后import成功,但是torch.cuda.is_available()是false,发现是驱动和ubuntu内核不匹配,然后重装了nvidia的驱动。
总结一下:
- nvidia驱动版本470.103.01
- cuda版本10.2
- cudnn版本7.6.5
- pytorch版本1.10.1
- miniconda版本py37_4.8.3(应该是支持创建3.7及之前的所有python环境)
这里面最重要的是nvidia驱动,流程应该是先确定内核支持的nvidia驱动,再确定驱动支持的cuda版本,再根据cuda版本确定cudnn,再由cuda、cudnn、python版本共同确定pytorch,miniconda只要支持py3即可。
我安装的顺序导致我绕了很多弯路,本来想让读者也走走这些弯路,毕竟能够增加理解,但是考虑到大家时间宝贵,还是提前说明正确的方法。
驱动和cuda的匹配关系参见
1. nvidia驱动安装及卸载
1.1 安装
在命令行输入ubuntu-drivers devices,选择一个适合版本,我选的是470
输入sudo apt install nvidia-driver-470安装nvidia驱动
1.2 卸载
输入sudo apt-get purge nvidia*卸载nvidia驱动
2. cuda-10.2安装验证及卸载
2.1 安装
CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.cn/cuda-toolkit-archive
我选择的是10.2这个版本
安装命令如下
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
2.2 验证
终端输入,有如下显示说明cuda安装成功
nvcc -V
2.3 卸载
最后一行,查看针对linux的安装指导。进去后ctrl+f搜索uninstalll,第一个就是
同样是最后一行(因为我用的是deb的安装方式),这里以卸载cuda10.2为例
sudo apt-get --purge remove cuda-10.2
使用上述nvcc -V方法验证cuda是否卸载成功,如果仍有相关显示则输入
sudo apt autoremove
最后再验证一遍
3. cudnn安装及验证
3.1 安装
cudnn需要匹配cuda的版本
cuDNN Archive | NVIDIA Developerhttps://developer.nvidia.com/rdp/cudnn-archive
我选择的是7.6.5版本,需要下载三个文件:
cuDNN Runtime Library for Ubuntu18.04 (Deb)
cuDNN Developer Library for Ubuntu18.04 (Deb)
cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)
下载完成后进入下载所在目录,再进入终端,输入如下3条命令安装上述3个文件
sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb
3.2 验证
cd /usr/src/
ls
可以看见有一个cudnn_samples_v7的文件夹
再依次输入
cd cudnn_samples_v7/mnistCUDNN
sudo make clean
sudo make
sudo ./mnistCUDNN
可以看到测试程序正在运行
最后结果如下
查看cudnn版本
dpkg -l | grep cudnn
4. miniconda安装验证及卸载
4.1 安装
Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?C=M&O=A我找的版本是Miniconda3-py37_4.8.3-Linux-x86_64.sh
下载完成后,在Downloads文件夹里进入终端,输入
bash Miniconda3-py37_4.8.3-Linux-x86_64.sh
中间问你是否选择是否接受什么的都选择yes,这里需要留意默认的安装路径以备日后卸载
安装完成后关闭终端,重新打开
输入如下命令让conda接管默认python
conda config --set auto_activate_base true
4.2 验证
安装完毕后重启终端,可以看到用户名@计算机名前出现了(base)
4.3 卸载
由于一开始我看了他的教程,用的./来运行安装程序,显示没权限,sudo也没用
ubuntu下miniconda安装_alex1801的博客-CSDN博客_ubuntu安装minicondahttps://blog.csdn.net/weixin_34910922/article/details/118161554我就直接sudo su进入root了,然后把miniconda装到root里了,root里的默认安装路径又和一般的不一样,导致我花了很多时间找安装路径
这里说下通用的卸载方法
默认安装路径是/home/用户名/miniconda3
首先用rm -rf /home/用户名/miniconda3/
删除该文件夹里的所有文件,再输入
vim .bashrc
一般是在最末尾,注释掉环境变量(这里是我误装在root下的miniconda的注释环境变量的示意,root下的.bashrc和普通环境下的.bashrc里面的内容是不一样的)
保存后使用
source .bashrc
重新激活环境变量文件,重启终端后验证是否存在base
(误装在root里的需要进root看base是否还在)
5. pytorch安装验证及卸载相关
5.1 安装
还是去清华源Index of /anaconda/cloud/pytorch/linux-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/这里我选择的是pytorch-1.10.1-py3.6_cuda10.2_cudnn7.6.5_0.tar.bz2
一般来说miniconda装完之后,要新建一个python环境,然后把pytorch装在指定的环境里,这里我从简了(我是把pytorch装在base里,然后新建了一个python3.6的环境,不建议大家采用)
上述文件下载完之后,进入Downloads目录打开终端输入
conda install pytorch-1.10.1-py3.6_cuda10.2_cudnn7.6.5_0.tar.bz2
5.2 验证
安装完成后终端输入python后再依次输入,如果能import成功,并且torch.cuda.is_available()的返回值是true说明pytorch安装成功
import torch
torch.cuda.is_available()
5.3 卸载
卸载pytorch(我也不知道下面哪个指令是对的,我是在history里看的历史指令)
conda uninstall pytorch
conda remove pytorch
6. 其他问题
6.1 import torch失败
我在第一步import torch时出现了报错信息如下
OSError: libmkl_intel_lp64.so: cannot open shared object file: No such file or directory
这时需要先卸载pytorch,再重新用
conda install pytorch-1.10.1-py3.6_cuda10.2_cudnn7.6.5_0.tar.bz2
命令安装,就可以成功import torch了
6.2 torch.cuda.is_available()返回值为false
这里我的情况比较特殊,首先在终端输入nvidia-smi无法正常显示,出现如下报错信息
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running
但是终端输入nvcc -V显示cuda安装成功,cudnn验证时说找不到设备,也进一步说明nvidia驱动有问题。
针对这个报错信息,网上很多博客都是用的下面这个方法
NVIDIA驱动失效简单解决方案:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver._AI 菌的博客-CSDN博客前言: 以下方法,不需要重装驱动,简单快捷。适用于Ubuntu系统下,之前已经安装过驱动,但驱动失效的问题。如果此方法仍然无法解决问题,可参考Ubuntu下安装nvidia显卡驱动,重装驱动。前段时间刚装了驱动:Ubuntu下安装nvidia显卡驱动但是最近准备用GPU跑模型时,提示cuda 不存在。前段时间刚装的驱动,怎么会不存在呢?第一步,打开终端,先用nvidia-smi查看一下,发现如下报错:NVIDIA-SMI has failed because it couldn't com.https://blog.csdn.net/wjinjie/article/details/108997692但是在我这并不奏效,查阅资料后发现大概率是ubuntu内核版本和nvidia驱动版本不匹配,需要重装驱动。
用第一节的方法卸载后重装新的驱动。在终端用nvidia-smi验证nvidia驱动是否安装成功,再进入python重新查看torch.cuda.is_available()的返回值,发现为true,大功告成。
7. 后续
我在安装miniconda之前安装了py3.7,并且将py3.7设置为默认python版本。当我在miniconda py3.6的环境里想要安装一个包的时候,首先用conda install失败,用pip install会安装到py3.7而非当前虚拟环境,于是卸载conda,卸载py3.7。但是py3.7一卸载系统就出问题了,重启后进不了图形界面。重装了desk后,系统又给我自动安装了py3.7。
ubuntu系统只会携带py2.7用于系统用途,多出来的py3.7一旦卸载就会失去图形界面,一旦安装图形界面就会安装py3.7。无奈只能重装系统。
重装系统后,我按照本篇博客所说的,先装nvidia驱动,再装cuda,结果失败了:首先安装nvidia 470的驱动,接着安装cuda的时候会自动安装440的驱动,覆盖了我之前的驱动。卸载440驱动,再装470驱动又会导致nvidia-smi和nvcc -V报错。
找了一圈,要下载.sh版的cuda,在安装的时候不选择安装驱动(.deb版的cuda会自动安装驱动无法选择)。至此cuda安装完毕,nvcc -V显示正常。但是nvidia-smi和nvcc -V中的cuda版本却不一致2,nvidia-smi中的cuda版本是11.4,nvcc -V中的cuda版本是10.2。卸载cuda11.4却提示没有安装过cuda11.4,猜测这里的cuda11.4可能是驱动470内置的,看网上有人说是正常的我就没管了。
思考:重装系统前,nvidia-smi和nvcc -V中的cuda版本是一致的。复盘之前的安装流程,我先装了470的驱动,此时输入nvidia-smi发现cuda版本是11.4,于是去官网下载了cuda11.4.deb,安装完成后发现版本太高,于是卸载了cuda11.4,安装了cuda10.2,此时cuda10.2.deb内置的驱动440也自动替换了我原先的驱动470。后来因为内核版本不支持驱动440,导致torch.cuda.is_available()返回值为false,然后卸载了驱动440,重新安装了驱动470。最后使得nvidia-smi和nvcc -V中的cuda版本一致。两次安装cuda的区别可能就在于我第一次安装时先安装了cuda11.4,卸载的时候将驱动470内置的cuda11.4也卸载掉了
安装完nvidia驱动和cuda后,我又安装了cudnn和miniconda,然后在miniconda中新建了一个py3.6的虚拟环境,切换到虚拟环境中安装pytorch,按照我这篇博客的流程,我安装pytorch又失败了,试了网上的所有方法都没用。无奈只能conda install pytorch安装默认版本,在此之前我将conda的下载链接替换为了清华镜像。
pytorch安装的过程中,我看见他给我安装了一个cudatoolkit10.1,心想着我已经安装了cuda10.2了,这两者会不会冲突。最后安装完毕,试了下目前为止一切正常。