本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!
Docker
可以!我们平常开发的时候,难免会遇到多种不同的环境,有的是底层的驱动,有的是依赖库。依赖库的比较好办,可以使用虚拟环境进行分隔,但是不同的驱动的话,我们就会挺头疼的,这时候,Docker
可以解决这一烦恼。
除了开发,我们还会涉及到项目部署,虽然有运维工程师,但是我们开发工程师还是需要协助进行环境的安装,每一个项目都要重头再来搭建环境,让人极其烦躁,但是不做又不行,一个很好的解决方式就是使用Docker
打包镜像,可以将我们这个搭建环境的过程只需要搭建一次就可以无限部署,节省了我们会多的宝贵时间。
下面就来介绍 Docker
如何搭建深度学习镜像,让你一次搭建,无限部署
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 ,您的点赞可以让技术传播得更远更广,谢谢!
可以参照我的文章《Ubuntu18.04 安装Nvidia驱动+CUDA+cuDNN+Anaconda3(图文超详细)》 其中的 【一、Nvidia显卡驱动】。
可以参考Docker官方的文档,非常清晰,安装 docker
不是本章的重点,这里不做过多的阐述。
使用 docker compose
将所有的操作集成到 docker-compose.yml
文件中,实现一条简单的命令docker-compose up
启动多个容器,并且可以在容器之间建立网络连接,非常方便,简化了很多操作。
1.27.4
是对应的版本号,可以到官方Github release页面查看发布版本,下面是安装指令:sudo curl -L \
"https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo docker-compose --version
因为 Docker
只能使用 CPU
的资源,我们需要一个由Nvidia
官方开发的插件来连接 Docker
和 宿主机的显卡驱动 —— nvidia-docker
,下面是安装过程:
官方教程
设置稳定版的存储库
和GPG密钥
:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
如果你可以顺利执行上诉的指令,恭喜,请移步到本小节的第3
步;
如果你出错了,不要怕,因为我执行的时候就出错了!!!!!分别出现两个错误:
gpg: 找不到有效的 OpenPGP 数据。
:是由curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
引起的;E: 无法定位软件包 nvidia-docker2
:是由curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
引起的;以下是解决方法:
nvidia.github.io
,可得到该域名对应的ip
地址:Host
文件中的信息,我们将域名对应的 IP
填写进去电脑就不会访问 DNS服务器
获取IP
了:sudo gedit /etc/hosts
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
如果顺利进行,恭喜,请跳到 本小节第12步;如果报错了,放心,我和你一样!让我带你填坑,请继续看;
报错:/sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.7 is not a symbolic link
,
去到文件夹 /usr/local/cuda/lib64/
, 使用命令 ls -lha libcudnn*
查看,可以看到 libnudnn.so.7
不是软链接
9. 下面来执行
10. 卸载掉刚刚安装好的东西,重新安装:
sudo apt-get remove libnvidia-container-tools libnvidia-container1 nvidia-container-runtime nvidia-container-toolkit nvidia-docker2
sudo apt-get install -y nvidia-docker2
sudo docker run --rm --gpus all nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 nvidia-smi
/etc/docker/daemon.json
文件:sudo gedit /etc/docker/daemon.json
json
中加入镜像源的地址,记得修改之后保存哈,这里使用的是网易的镜像地址{
# ... 你原本已有的数据
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
更多的镜像如下:
Docker中国区官方镜像:https://registry.docker-cn.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
docker
systemctl restart docker.service
base
: Includes the CUDA runtime (cudart)runtime
: Builds on the base and includes the CUDA math libraries, and NCCL. A runtime image that also includes cuDNN is available.devel
: Builds on the runtime and includes headers, development tools for building CUDA images. These images are particularly useful for multi-stage builds.docker
镜像docker run -it --name 自定义容器名 -v 项目绝对路径:/home/容器里面一个你放项目的文件 --runtime=nvidia -e NVIDIA_VISIBLE_DEVICE=all nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
nvdia-smi
CUDA
nvcc -V
cuDNN
ll /usr/lib/x86_64-linux-gnu/ | grep cudnn
3.6.9
版本的,其中的 --no-install-recommends
参数是用来避免安装非必须的文件,从而减小镜像的体积;libgl1-mesa-glx
是 OpenCV
的依赖apt-get update && apt-get install -y --no-install-recommends build-essential curl libfreetype6-dev libzmq3-dev pkg-config python3 python3-dev python3-pip git vim libgl1-mesa-glx && apt-get clean
pip
国内源mkdir ~/.pip/
touch ~/.pip/pip.conf
vi ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
pip
pip3 install --upgrade pip
Commit
镜像sudo docker commit -m "这次提交做出修改的信息" -a "提交者" 1111(容器ID) docker_hub的名字/你的镜像名:镜像的tag
Docker Hub
上面,记得先要 login
哈:sudo docker push docker_hub的名字/你的镜像名:镜像的tag
下面是使用 docker-compose
的例子,其中一定要加 runtime: nvidia
这个参数!!!
version: '3'
services:
demo:
container_name: cuda-demo
image: nvidia/cuda:10.2-devel-ubuntu18.04 # 或者是您自己的镜像
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICE=all
- LANG=C.UTF-8
ports:
- "100:100"
volumes:
- 您项目的绝对路径/:/home/Project/Demo/
command:
- /bin/bash
- -c
- |
nvidia-smi
cd /home/Project/Demo/
python3 demo.py
restart: always
以上就是如何使用 docker
搭建深度学习环境镜像,让你一次搭建,无限部署!
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 ,您的点赞可以让技术传播得更远更广,谢谢!
[1]当Docker遇见Deep Learning
[2]‘gpg: 找不到有效的 OpenPGP’ & ‘E: 无法定位软件包 nvidia-docker2’
[3]/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.5 is not a symbolic link
作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Docker 搭建深度学习环境镜像,一次搭建,无限部署!