文章目录
原创声明
本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!
前言
- Q: 有什么工具能够让你一次搭建,无限部署?
- A: 有!
Docker
可以!
我们平常开发的时候,难免会遇到多种不同的环境,有的是底层的驱动,有的是依赖库。依赖库的比较好办,可以使用虚拟环境进行分隔,但是不同的驱动的话,我们就会挺头疼的,这时候,Docker
可以解决这一烦恼。
除了开发,我们还会涉及到项目部署,虽然有运维工程师,但是我们开发工程师还是需要协助进行环境的安装,每一个项目都要重头再来搭建环境,让人极其烦躁,但是不做又不行,一个很好的解决方式就是使用Docker
打包镜像,可以将我们这个搭建环境的过程只需要搭建一次就可以无限部署,节省了我们会多的宝贵时间。
下面就来介绍 Docker
如何搭建深度学习镜像,让你一次搭建,无限部署
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!
一、 安装 Nvidia 显卡驱动
可以参照我的文章《Ubuntu18.04 安装Nvidia驱动+CUDA+cuDNN+Anaconda3(图文超详细)》 其中的 【一、Nvidia显卡驱动】。
二、安装 Docker
可以参考Docker官方的文档,非常清晰,安装 docker
不是本章的重点,这里不做过多的阐述。
三、Docker Compose
使用 docker compose
将所有的操作集成到 docker-compose.yml
文件中,实现一条简单的命令docker-compose up
启动多个容器,并且可以在容器之间建立网络连接,非常方便,简化了很多操作。
- Docker Compose 官方文档
- 使用指令下载对应的安装包,其中,
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
- 成功!
- 例子代码可以在附录:
1. Docker-compose 例子
找到, Enjoy !
四、NVIDIA-Docker
因为 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
引起的;
以下是解决方法:
- 分析过后我发现是因为域名解析出现问题导致的,点击跳转到 ipaddress.com,搜索查找
nvidia.github.io
,可得到该域名对应的ip
地址:
- 解析域名的过程会使用到
Host
文件中的信息,我们将域名对应的IP
填写进去电脑就不会访问DNS服务器
获取IP
了:
sudo gedit /etc/hosts
-
将获取到的
IP
填写进去,保存就可以了:
-
重新打开终端,再来一次就可以成功获取了:
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
-
因为我自己配置了
docker
的镜像源,这里先填入Y
将其覆盖掉,之后再另外添加
-
如果顺利进行,恭喜,请跳到 本小节第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
五、下载 Nvidia CUDA 镜像
- 切换 Docker 国内镜像源:修改
/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
最后的daemon.json
是这样的:
- 重启
docker
systemctl restart docker.service
-
查看所有支持的列表
-
寻找你需要的
CUDA
版本和cuDNN
版本,我这里选择了10.2-cudnn7-devel-ubuntu18.04
:
关于 devel 和 runtime 的区别,官方文档是这样描述的:
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.
-
在官方的 Nvidia docker cuda 官方镜像点击
Tags
并根据刚刚选好的名字进行搜索:
-
将刚刚复制好的命令在终端输入就可以下载到对应的镜像了,我的需要下载镜像的命令是
docker pull nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
:
-
使用命令
sudo docker images
可以查看到下载好的镜像:
六、搭建 Python3 环境
- 运行
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
- 安装环境,这里的 Python 是安装
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
- Enjoy !
附录:
1. Docker-compose 例子
官方教程:Enabling GPU access with Compose
下面是使用 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 搭建深度学习环境镜像,一次搭建,无限部署!
- 若需要修改文章的排版,请根据原文链接联系作者
- 再次感谢您的认可,转载请遵守如上转载须知!