Docker 搭建深度学习环境镜像,一次搭建,无限部署!

2 篇文章 1 订阅
2 篇文章 0 订阅

原创声明

本文为 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 启动多个容器,并且可以在容器之间建立网络连接,非常方便,简化了很多操作。

  1. Docker Compose 官方文档
  2. 使用指令下载对应的安装包,其中,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
  1. 将下载好的二进制文件赋予可执行的权限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 测试指令:
sudo docker-compose --version
  1. 成功!
    在这里插入图片描述
  2. 例子代码可以在附录1. Docker-compose 例子 找到, Enjoy !

四、NVIDIA-Docker

因为 Docker 只能使用 CPU 的资源,我们需要一个由Nvidia 官方开发的插件来连接 Docker 和 宿主机的显卡驱动 —— nvidia-docker ,下面是安装过程:

  1. 官方教程

  2. 设置稳定版的存储库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

在这里插入图片描述

  1. 更新一下:
sudo apt-get update
  1. 执行安装
sudo apt-get install -y nvidia-docker2
  1. 因为我自己配置了 docker 的镜像源,这里先填入 Y 将其覆盖掉,之后再另外添加
    在这里插入图片描述

  2. 如果顺利进行,恭喜,请跳到 本小节第12步;如果报错了,放心,我和你一样!让我带你填坑,请继续看;

  3. 报错:/sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.7 is not a symbolic link,
    在这里插入图片描述

  4. 去到文件夹 /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
  1. 执行安装
sudo apt-get install -y nvidia-docker2
  1. 安装成功!!!
    在这里插入图片描述

  2. 运行测试一下

sudo docker run --rm --gpus all nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 nvidia-smi

在这里插入图片描述


五、下载 Nvidia CUDA 镜像

  1. 切换 Docker 国内镜像源:修改 /etc/docker/daemon.json 文件:
sudo gedit /etc/docker/daemon.json
  1. json中加入镜像源的地址,记得修改之后保存哈,这里使用的是网易的镜像地址
{
	# ... 你原本已有的数据
	
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

更多的镜像如下:

Docker中国区官方镜像:https://registry.docker-cn.com
中国科技大学:https://docker.mirrors.ustc.edu.cn

最后的daemon.json是这样的:
在这里插入图片描述

  1. 重启docker
systemctl restart docker.service
  1. 去到Nvidia docker cuda 官方镜像
    在这里插入图片描述

  2. 查看所有支持的列表
    在这里插入图片描述

  3. 寻找你需要的 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.
  1. 在官方的 Nvidia docker cuda 官方镜像点击 Tags 并根据刚刚选好的名字进行搜索:
    在这里插入图片描述

  2. 将刚刚复制好的命令在终端输入就可以下载到对应的镜像了,我的需要下载镜像的命令是 docker pull nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
    在这里插入图片描述

  3. 使用命令 sudo docker images 可以查看到下载好的镜像:
    在这里插入图片描述


六、搭建 Python3 环境

  1. 运行 docker 镜像
docker run -it --name 自定义容器名 -v 项目绝对路径:/home/容器里面一个你放项目的文件 --runtime=nvidia -e NVIDIA_VISIBLE_DEVICE=all nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
  1. 测试显卡驱动是否正常
nvdia-smi

在这里插入图片描述

  1. 测试 CUDA
nvcc -V

在这里插入图片描述

  1. 测试 cuDNN
 ll /usr/lib/x86_64-linux-gnu/ | grep cudnn

在这里插入图片描述

  1. 安装环境,这里的 Python 是安装 3.6.9 版本的,其中的 --no-install-recommends参数是用来避免安装非必须的文件,从而减小镜像的体积;libgl1-mesa-glxOpenCV 的依赖
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
  1. 配置 pip 国内源
mkdir ~/.pip/
touch ~/.pip/pip.conf
vi ~/.pip/pip.conf
  1. 加入下内容粘贴进去,并保存
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
  1. 升级 pip
pip3 install --upgrade pip
  1. Commit 镜像
sudo docker commit -m "这次提交做出修改的信息" -a "提交者" 1111(容器ID) docker_hub的名字/你的镜像名:镜像的tag
  1. 推送到 Docker Hub 上面,记得先要 login 哈:
sudo docker push docker_hub的名字/你的镜像名:镜像的tag
  1. 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


授权须知

  1. 原创文章在推送一天后才可进行转载
  2. 转载文章,禁止声明原创
  3. 不允许直接二次转载,转载请根据原文链接联系作者
  4. 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
    但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Docker 搭建深度学习环境镜像,一次搭建,无限部署!

  1. 若需要修改文章的排版,请根据原文链接联系作者
  2. 再次感谢您的认可,转载请遵守如上转载须知!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值