ubuntu18.04 搭建 docker,nvidia-docker2,cuda10.2+cudnn7.6.4全过程记录
一、下载docker
1、根新ubuntu的apt索引
sudo apt-get update
2、安装包允许apt通过https使用仓库
sudo dpkg --configure -a
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
3.添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.设置Docker稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5.更新apt源索引
sudo apt-get update
6.安装最新版本Docker CE(社区版)
sudo apt-get install docker-ce
7.查看安装Docker的版本
$ docker --version
#Docker version 19.03.8, build afacb8b7f0
8.检查Docker CE 是否安装正确
$ sudo docker run hello-world
#报错 Unable to find image 'hello-world:latest' locally
9、查看镜像库 docker images
# 报错
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
# 解决
原来只需要 加上 sudo docker images 就可
10、基本命令
# 启动docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重启docker
sudo service docker restart
# 列出镜像
docker image ls
# 拉取镜像
docker image pull library/hello-world
# 删除镜像
docker image rm 镜像id/镜像ID
# 创建容器
docker run [选项参数] 镜像名 [命令]
# 停止一个已经在运行的容器
docker container stop 容器名或容器id
# 启动一个已经停止的容器
docker container start 容器名或容器id
# kill掉一个已经在运行的容器
docker container kill 容器名或容器id
# 删除容器
docker container rm 容器名或容器id
# 查看docker服务是否启动:
systemctl status docker
# 若未启动,则启动docker服务:
sudo systemctl start docker
docker 换镜像源
1、创建配置文件
sudo touch /etc/docker/daemon.json
2、编辑,配置中国科技大学的镜像源,阿里云的也可
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
保存退出 :wq
3、重启docker服务
sudo service docker restart
4、查看信息
sudo docker info
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
换源成功
安装nvidia-docker
1、首先,Ubuntu下查看Nvidia显卡的详细信息:
nvidia-smi
#如果没显示就下载安装
sudo apt install nvidia-340
2、查看cuda 版本:
cat /usr/local/cuda/version.txt
or
nvcc -V
cat /usr/local/cuda/version.txt
#CUDA Version 10.1.243
查看cudnn版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果上述命令你都没有输出,那么
3、安装显卡驱动
3.1检查自己电脑的gpu是否CUDA-capable
sudo lspci | grep -i nvidia
#0a:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 850M] (rev a2)
#没有lspci就安装
apt install pciutils
3.2禁用nouveau并重启(安装Nvidia显卡的官方驱动和系统自带的nouveau驱动冲突)
sudo lsmod | grep nouveau
#没有lsmod就安装
apt install module-init-tools
如果有输出说明nouveau正在加载
3.3打开禁用列表
sudo gedit /etc/modprobe.d/blacklist.conf
3.4在打开文本的最后一行添加:
blacklist nouveau
options nouveau modeset=0
3.5更新,重启:
sudo update-initramfs -u
reboot
3.6 再次查看是否禁用nouveau
sudo lsmod | grep nouveau
# 现在没有输出,说明禁用了
重点:
- 先安装 gcc :
sudo apt -y install gcc-c++
或者
sudo apt install build-essential
1.删除旧的NVIDIA驱动:
sudo apt-get remove nvidia-*
sudo apt-get autoremove
或者:
sudo apt-get --purge remove nvidia-*
sudo ./NVIDIA-Linux-x86_64-410.57.run -uninstall
sudo update-initramfs -u
sudo reboot now
2.更新系统软件仓库列表
sudo apt-get update
3.使用下面的命令查看系统推荐安装哪个版本的N卡驱动
ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.3/0000:07:00.0 ==
modalias : pci:v00008086d000008B3sv00008086sd00008470bc02sc80i00
vendor : Intel Corporation
model : Wireless 3160 (Dual Band Wireless AC 3160)
manual_install: True
driver : backport-iwlwifi-dkms - distro free
== /sys/devices/pci0000:00/0000:00:01.1/0000:0a:00.0 ==
modalias : pci:v000010DEd00001391sv00001028sd00000680bc03sc02i00
vendor : NVIDIA Corporation
model : GM107M [GeForce GTX 850M]
driver : nvidia-driver-435 - distro non-free recommended
driver : nvidia-driver-390 - distro non-free
driver : nvidia-340 - distro non-free
driver : nvidia-driver-430 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
在上面这些输出中可以看到recommended关键词,说明系统推荐安装的N卡驱动是"nvidia-driver-435"
4.选择你看到推荐版本安装,本例使用nvidia-driver-435,然后安装几个必要组件,命令如下
sudo apt-get install nvidia-settings nvidia-driver-435 nvidia-prime
我的建议安装的是nvidia-435版本驱动,然后继续在命令行输入:
sudo ubuntu-drivers autoinstall
将会自动安装所推荐的nvidia-435版本驱动
5.安装双显卡切换指示器
sudo add-apt-repository ppa:nilarimogard/webupd8
# 报错解决
“
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
##在Terminal打开sources.list
sudo gedit /etc/apt/sources.list
##在sources.list文件末尾添加源 ,可以选择版本
deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu bionic main
deb-src http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu bionic main
##在Terminal添加Signing Key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1DB29AFFF6C70907B57AA31F531EE72F4C9D234C
##更新
sudo apt-get update && sudo apt-get upgrade
## 可能会有网络问题,可以多试几次,或者vpn
”
#成功之后就可以安装软件了
sudo apt-get install prime-indicator
6.重新启动
sudo reboot
新启动后会在右上角看到一个显卡指示器,默认情况下是Nvidia图标,说明现在使用的是N卡,点击这个图标选择"Quick switch graphics…",按下确认后会自动重启桌面,此时就会切换到Intel显卡了,图标也变成了Intel。
大家可以尝试着在两个显卡之间切换,并使用下面的命令查看是否切换成功,然后测试其性能
切换到Intel卡后,查看N卡是否关闭,如果N卡末尾是(rev ff),则表示成功关闭了N卡,现在使用的是I卡,如果末尾不是ff,则说明现在使用的是N卡
lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation .... (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation .... (rev ff)
如果上面的命令没有看到NVIDIA卡,可以直接使用下面的命令来查看N卡状态
~$ lspci | grep NVI
qyh@qyh-mas:$ lspci | grep NVI
3c:00.0 3D controller: <font color="#EF2929"><b>NVI</b></font>DIA Corporation GM108M [GeForce 940MX] (rev a2)
qyh@qyh-mas: $ lspci | grep VGA
00:02.0 <font color="#EF2929"><b>VGA</b></font> compatible controller: Intel Corporation Skylake GT2 [HD Graphics 520] (rev 07)
使用下面的命令来测试显卡的性能,数字越大代表显卡性能越好,这条命令可以明显看到N卡的性能强于I卡
~$ glxspheres64
安装CUDA 10.2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8IdpCcr-1587451070923)(/home/bob/.config/Typora/typora-user-images/image-20200415164353263.png)]
可以建个文件夹,然后在文件夹中输入上述两条命令
mkdir nvidia_cuda
cd nvidia_cuda
"
wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
"
报错
正在连接 127.0.0.1:32787... 失败:拒绝连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ob9Y2Wiw-1587451070930)(/home/bob/.config/Typora/typora-user-images/image-20200415165720452.png)]
解决
# 查看端口使用情况
sudo netstat -ntpl
# 安装命令 netsta
sudo apt-get install net-tools
sudo netstat -ntp
“
激活Internet连接 (仅服务器)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 931/systemd-resolve
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3695/cupsd
tcp6 0 0 ::1:631 :::* LISTEN 3695/cupsd
”
没有占用的端口
查看是否走代理
export | grep -i proxy
“
declare -x HTTPS_PROXY="http://127.0.0.1:32787/"
declare -x HTTP_PROXY="http://127.0.0.1:32787/"
declare -x NO_PROXY="localhost,127.0.0.0/8,::1"
declare -x http_proxy="http://127.0.0.1:32787/"
declare -x https_proxy="http://127.0.0.1:32787/"
declare -x no_proxy="localhost,127.0.0.0/8,::1"
”
确实走了代理
#解决
关闭服务
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
2.再出现的提示中选择continue和accept,直到出现如下画面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rmxcLNxC-1587451070934)(/home/bob/.config/Typora/typora-user-images/image-20200415205226623.png)]
Nvidia的显卡驱动,这里不安装driver,那么只需要移动到Driver,按enter键,将"[]"中的X去掉即是不选择.
3 下载成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zQldGj4p-1587451070939)(/home/bob/.config/Typora/typora-user-images/image-20200415210733328.png)]
4.添加环境变量
vi ~/.bashrc
在文件末尾添加
export PATH="/usr/local/cuda-10.2/bin:$PATH"
export LD_LIBRARY_PATH="/usr/lcoal/cuda-10.2/lib64:$LD_LIBRARY_PATH"
最后使其生效
source ~/.bashrc
5.终端输入
cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-265DhAsT-1587451070943)(/home/bob/.config/Typora/typora-user-images/image-20200415215254275.png)]
不知道成功没有
6、查看显卡驱动信息:
nvidia-smi
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZFJKXXK-1587451070947)(/home/bob/.config/Typora/typora-user-images/image-20200416165331160.png)]
这说明驱动是安装成功的
7、查看cuda是否安装成功
cat /usr/local/cuda/version.txt
我现在的版本是“CUDA Version 10.2.89”
8、查看cudnn的版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
下载cudnn
1.下载cuDNN v7.6.4 (eptember27,2019 ), for CUDA 10.1
https://developer.nvidia.com/rdp/cudnn-archive
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ7YXCId-1587451070953)(/home/bob/.config/Typora/typora-user-images/image-20200416171411766.png)]
进入解压后的cudnn目录 应该能看到cuda文件夹
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
再次查看cudnn的版本
cat /usr/local/cuda/include/cudnn.h |grep CUDNN_MAJOR -A 2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHGmG8vY-1587451070955)(/home/bob/.config/Typora/typora-user-images/image-20200416172012545.png)]
从上到下输出7 6 4 即表示cudnn7.6.4