ubuntu18.04系统双显卡笔记本安装nvidia-driver、cuda-toolkit、cuDNN、pytorch
软硬件版本
已有:
电脑:hp暗影精灵4
显卡:核显+GTX-1050ti
双系统:win10+ubuntu18(在ubuntu下安装)
ubuntu系统:18.04.3 LTS (Bionic Beaver),64位
内核版本:5.3.0-51-generic
GCC版本:(Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
安装:
Nvidia-Deriver版本:440.33.01
CUDA版本:10.2
cuDNN版本:7.6.5.32
Anaconda3版本:2020.02
Pytorch版本:1.5.0
双显卡笔记本安装nvidia-driver和CUDA的思路
本人尝试若干种方法安装nvidia-driver(包括:禁用Nouveau、不安装opengl库、使用apt-get自动安装、使用系统程序“软件和更新”安装、使用CUDA-ToolKit同时安装驱动和cuda等),均无法解决循环登陆\登陆界面卡住这个问题。
于是决定退而求其次:在关机前使用sudo prime-select intel命令将显卡切换为核显,从而保证开机时可以登陆进入图形界面。开机后,使用sudo prime-select nvidia命令,切换为独显,从而使用cuda。
当然,为了操作方便,我们将使用脚本自动完成这个切换任务。
关于驱动、cuda、cuda-toolkit、cuDNN的说明
参考marsggbo的博客
显卡驱动Nvidia-Driver:
1,安装方式:
1,独立安装
2,在安装Cudatoolkit时,自动安装
2,安装后,同时安装了cuda的driver-api,所以使用nvidia-smi能看到cuda版本
CUDA:
1,CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅
2,有两个主要的API:driver-api和runtime-api。支持driver-api的文件是在安装Nidia-Driver时安装的,支持runtime-api的文件是在安装CUDA-toolkit时安装的。
因此,驱动和CUDA-toolkit分开安装时使用nvidia-smi看到的cuda版本(driver-api)和使用nvcc -V看到的cuda版本(runtime-api)可能不一致
3,安装:
1,driver-api部分:在安装Nvidia-Driver时同时安装
2,runtime-api部分:在安装CUDA-toolKit时同时安装
3,安装CUDA-ToolKit时可以选择同时安装Nvidia-Driver,此时将先后安装driver-api部分和runtime-api部分。
CUDA-ToolKit:
包含nvcc,cuda-driver等。
安装与:系统、内核、GPU型号有关
cuDNN:
Deep Neural Network library,CUDA的一个库
Nvidia-Driver和CUDA的安装
官方安装文档链接
CUDA安装对Nvidia-Driver的版本有要求,因此,为了方便,我们选择在安装CUDA时同时安装Nvidia-Driver。当然分开安装也是可以的。
注:下面在表述上不区分CUDA和CUDA-ToolKit。
1,首先卸载之前的安装:
//卸载显卡驱动:
sudo /usr/bin/nvidia-uninstall
//由于显卡驱动的安装方式不同,使用上述命令可能找不到nvidia-uninstall,此时可采用:
sudo apt-get purge nvidia*
//卸载CUDA
//将下面cuda-10.2换成你已安装的cuda版本
sudo /usr/local/cuda-10.2/bin/cuda-uninstaller
2,下载CUDA,CUDA10.2下载链接
我们采用runfile的方式安装,选择系统版本、位数、runfile(local)
下面将给出安装命令:
执行第一个命令,下载安装文件(也可以复制第一个命令中的网址,打开,下载)
3,禁用Nouveau
很早之前就禁用了,也没有测试采用本文的安装方法是不是必须执行禁用操作。感觉不禁用应该也可以,如果有哪位朋友(核显+独显)采用本文方法不禁用也成功了,烦请留言告知,不胜感激。
//打开文件
sudo vim /etc/modprobe.d/blacklist.conf
//在打开的文件中添加下面两行,保存。
blacklist nouveau
options nouveau modeset=0
//重启电脑
//打开命令行执行下面的命令,若无输出则禁用成功
lsmod | grep nouveau
4,关闭图形界面
关于桌面环境:gdm、lightdm等的介绍,请参考sole_cc的博客
//执行下面的命令,查看自己的图形界面是哪一个。在出现的进程树中查看,出现哪个名字,就是哪个桌面环境。这个查看方法可能有点笨,但我没找到其他方法
pstree
可见我的是gdm3
//重启电脑,不要登陆图形界面,按ctrl+alt+F3进入命令行模式,登陆。
//关闭图形界面
sudo service gdm3 stop
5,安装
//进入到包含之前下载的安装文件的路径下,执行(可能要等一会儿才有显示)。
//一切选项默认(同时安装驱动,不用去掉opengl的安装选项)。
sudo sh cuda*
6,设置环境变量
我们选择添加到系统变量,因此写入到/etc/profile,添加到用户环境变量应该也可以。关于/etc/profile和~/.bashrc的区别请参考来自外星的一只猿的博客
//sudo vim /etc/profile
//加入下面两行
export PATH=/usr/local/cuda-10.2/bin:/usr/local/cuda-10.2/nsight-compute-2019.5.0${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
7,切换到核显
sudo prime-select intel
8,开启图形界面
sudo service gdm3 start
9,重启,登陆到图形界面。切换到独显
sudo prime-select nvidia
10,检查安装是否成功
执行nvidia-smi,应出现:
执行nvcc --version,应出现:
安装完成。
10,可能出现的问题
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver
解决办法,参考博客
//安装DKMS
sudo apt-get install dkms
//重新生成对应nvidia的驱动模块, -v后面的是安装的驱动版本
sudo dkms install -m nvidia -v 440.33
显卡切换脚本
为了避免手动在关机前使用sudo prime-select intel命令将显卡切换为核显,在开机后使用sudo prime-select nvidia命令切换为独显。我们通过开机自动执行和关机自动执行的脚本完成这个任务。
开关机脚本的编写参考了枫安Maplean 的博客
脚本内容:
#!/bin/bash
### BEGIN INIT INFO
# Provides:
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description:
# Description:
### END INIT INFO
case "$1" in
start)
prime-select nvidia
;;
stop)
prime-select intel
;;
*)
;;
esac
脚本创建:
//进入init.d目录
cd /etc/init.d/
//创建脚本
sudo touch my_nvidia_intel_select
将上述脚本内容复制到my_nvidia_intel_select
//赋予脚本可执行权限
chmod a+x my_nvidia_intel_select
//创建软链接
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc0.d/K99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc1.d/K99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc2.d/S99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc3.d/S99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc4.d/S99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc5.d/S99my_nvidia_intel_select
ln -s /etc/init.d/my_nvidia_intel_select /etc/rc6.d/K99my_nvidia_intel_select
重启:
//创建脚本后的第一次关机/重启前要手动执行"udo prime-select intel"
//因为此时脚本的开机部分还未执行,如果直接关机/重启则关机部分也不会执行
sudo prime-select intel
reboot
今后关机前将自动执行脚本,切换到核显,开机后将自动切换到独显,无需进行任何手动操作。
cuDNN安装
文档中给出了3中安装方法:tar文件安装、deb文件安装、RPM文件安装,本人选用了tar文件安装。
下载tar安装文件,cuDNN下载地址,需要注册一个NVIDIA Developer Program账号。
下载这个:
//解压文件
tar -xzvf <filename>.tgz
//将cuda/include/cudnn.h和cuda/lib64/下的文件复制到相应文件夹下
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
//给上一步中复制的文件权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
//添加环境变量
//在/etc/profile中添加:
export CUDA_HOME=/usr/local/cuda
//重启(好像不重启也成)
验证是否安装成功
官方文档中没有给出使用tar文件安装的验证方法,此处参考了Zachary Yu 的博客中的方法
//执行下面的命令
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
若出现:
则成功安装cuDNN
Anaconda 安装
pytorch官网给出了Miniconda3最新版的安装方法,Miniconda3是Anaconda的简化版本,关于conda\Anaconda\Miniconda的区别与联系可参见bboysky45 的博客
Mimiconda的安装:
//下载安装脚本,也可以在官网手动下载
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
//执行安装脚本
sh Miniconda3-latest-Linux-x86_64.sh
本人没有按照pytorch官网的做法安装Miniconda,而是安装了Anaconda
安装过程参考官方文档
Anaconda的安装:
//1,去官网手动下载安装脚本
// 网址:https://www.anaconda.com/products/individual
//执行安装脚本
bash ~/Downloads/Anaconda3-2020.02-Linux-x86_64.sh
//安装过程的选项:
// 1,路径选择默认
// 2,“Do you wish the installer to initialize Anaconda3 by running conda init?” 选择“yes”.
安装Pytorch
打开pytorch官网,选择系统、Conda、Python,CUDA版本,即可获得pytorch安装命令,在此页面向下翻,可以看到官方安装指导。
打开一个终端,安装
//打开conda的base环境
conda activate base
//运行安装命令,选项均默认
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
安装过程需要下载四个文件,其中torchvision往往会因为网络问题无法下载,如下图:
导致安装失败:
解决方法:
1,保证网络能翻墙
2,设置网络代理为自动:
然后再次运行安装命令,将会完成torchvsion的下载,继续安装:
至此安装完成
验证: