这篇博客写于2019年3月28日,大家在参考的时候注意时效性,不过万变不离其中,我只是想把这些个关系讲清楚,让大家少踩坑。Docker就是个容器,而deepo就是个镜像,镜像可以看做是类,而容器就是镜像的一个实例化,deepo镜像的环境很依赖系统的环境,但是相对来说,各个系统比较独立,比如在我的配置过程中,docker是可以启动服务的,但是deepo启动不了,是因为docker对于cuda9.0就可以,但是新版deepo需要cuda10.0,deepo大概有10个G,所以我并没有改动Docker和镜像,而是更新了系统的cuda和driver,deepo就可以运行了。否则重新装docker和下载镜像十分浪费时间。
参考两篇博客 https://blog.csdn.net/zt0518/article/details/88050663
https://blog.csdn.net/u014530702/article/details/86584041
Deepo的官方文档: https://github.com/ufoym/deepo?tdsourcetag=s_pctim_aiomsg
Docker的官方文档: https://docs.docker.com/install/linux/docker-ce/centos/
cudnn下载网址:https://developer.nvidia.com/rdp/cudnn-download
cuda tookit 下载地址:https://developer.nvidia.com/cuda-toolkit-archive
driver 下载地址:https://www.geforce.cn/drivers
查看内核版本
[root@localhost ~]# uname -a
3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
一定要根据你的linux内核来配置环境
卸载掉之前的Docker和镜像
杀死所有运行容器
# docker kill $(docker ps -a -q)
删除所有容器
# docker rm $(docker ps -a -q)删除所有镜像
# docker rmi $(docker images -q)停止 docker 服务
# systemctl stop docker删除存储目录
# rm -rf /etc/docker
# rm -rf /run/docker
# rm -rf /var/lib/dockershim
# rm -rf /var/lib/docker
如果发现删除不掉,需要先 umount,如# umount /var/lib/docker/devicemapper
查看已安装的 docker 包# yum list installed | grep docker
卸载相关包
# yum remove docker-engine docker-engine-selinux.noarch
安装selinux
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum install epel-release
sudo yum install container-selinux
# 不安装selinux会报错:
# Requires: container-selinux >= 2.9
开始安装Docker
# 安装相关的依赖包
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 设置仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
查看docker-ce版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 @docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
安装指定版本 注意docker-ce 和 nvidia-docker的兼容性
$ sudo yum install docker-ce-18.09.2 docker-ce-cli-18.09.2 containerd.io
启动docker
$ systemctl enable docker.service
$ systemctl start docker
验证docker安装是否成功
$ sudo docker run hello-world
如果成功了,会输出如下结果:
安装nvidia-docker
# 如果已经安装过nvidia-docker1.0,那么先卸载。
$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
$ sudo yum remove nvidia-docker
# 添加仓库
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
# 安装nvidia-docker2,重载Docker daemon configuration
$ sudo yum install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
# 测试一下是否安装成功
$ docker run --runtime=nvidia --rm nvidia/cuda:10.0-base nvidia-smi
这期间遇到的所有报错90%是环境版本兼容性问题,一定要找到docker和镜像对应的cuda和drive(报错里会给出需要的版本)
比如:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “process_linux.go:402: container init caused “process_linux.go:385: running prestart hook 1 caused \“error running hook: exit status 1, stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure --ldconfig=@/sbin/ldconfig --device=0,1 --compute --utility --require=cuda>=9.0 --pid=1590 /var/lib/docker/overlay/59fd505d308da926ed463e79cf3e6b857c2e70911da40985c5673231cc934741/merged]\\nnvidia-container-cli: requirement error: unsatisfied condition: cuda >= 9.0\\n\”””: unknown.
还有yum -y update 更新了系统的安装包,但是不会更行驱动和cuda,会导致驱动报错,需要自己更新,更新过程参考
https://blog.csdn.net/qq_41493990/article/details/82183035
https://blog.csdn.net/xueshengke/article/details/78134991
cuda 和 driver 更新
官网下载 对应版本的 CUDA 和 driver
如果我们用runfile安装,就要把之前rpm安装的driver找到并卸载了
rpm -qa | grep -i nvid | sort
yum remove kmod-nvidia-*lspci | grep -i nvidia
yum install gcc yum install gcc-c++
yum install kernel-devel yum install kernel-headers
需要用到 kernel-devel 和 kernel-headers 可以在以下网址找对应版本
https://centos.pkgs.org/7/centos-x86_64/kernel-headers-3.10.0-957.el7.x86_64.rpm.html
http://rpm.pbone.net/index.php3
但是如果更行了yum,以上忽略
切换至安装包文件夹
./NVIDIA-Linux-x86_64-375.66.run
./cuda_8.0.61_375.26_linux.run
这两个按步骤装就好,我是先装的驱动
配置/etc/profile
export CUDA_HOME=/usr/local/cuda-10.0
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib:${LD_LIBRARY_PATH}"
source /etc/profile
nvidia-smi
服务器可安装多个cuda,配置好profile就行。
下载ufoym/deepo
在下载镜像之前,配置一下docker的daemon.json文件
1,我们安装的docker默认在/var/lib/docker目录下,镜像也下载在这个目录下,但是系统盘一般空间小,所以我们要把它挂载到/home目录下,或者是你挂载的比较大的那个盘。 然后加入国内镜像加速,比不加的下载速度快10多倍。(:后面有空格)
[root@localhost ~]# cat /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": [],
"graph": "/home/docker",
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}
}
}
这个也配置一下
vim /usr/lib/systemd/system/docker.service
systemctl disable docker
systemctl enable docker
systecmtl daemon-reload
systemctl start docker
docker info
安装Deepo
安装好nvidia-docker后直接拉取Deepo镜像
docker pull ufoym/deepo
pull到本地后可以使用docker image list
来查看目前的镜像列表。
docker run --runtime=nvidia -it ufoym/deepo bash
自此 deepo安装成功