Docker 搭建深度学习环境镜像,一次搭建,无限部署! 您所在的位置:网站首页 cuda镜像devel和runtime Docker 搭建深度学习环境镜像,一次搭建,无限部署!

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

2023-07-31 19:08| 来源: 网络整理| 查看: 265

文章目录 原创声明前言一、 安装 Nvidia 显卡驱动二、安装 Docker三、Docker Compose四、NVIDIA-Docker五、下载 Nvidia CUDA 镜像六、搭建 Python3 环境附录:1. Docker-compose 例子 总结参考文章:授权须知

原创声明

本文为 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

去到Nvidia docker cuda 官方镜像 在这里插入图片描述

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

寻找你需要的 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 搭建深度学习环境镜像,一次搭建,无限部署!

若需要修改文章的排版,请根据原文链接联系作者再次感谢您的认可,转载请遵守如上转载须知!


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有