文章目录

  • 1.安装Docker
    • 1.1 确定系统版本
    • 1.2 卸载旧版本
    • 1.3 设置stable镜像仓库
    • 1.4 安装Docker ce
    • 1.5 测试
    • 1.6 阿里云镜像加速
    • 1.7 重启服务器
  • 2.安装nvidia-docker
  • 3.cuda11.2+cudnn8.8环境配置
    • 3.1 拉取cuda镜像
    • 3.2 运行容器
    • 3.3 apt配置国内源
    • 3.4 更换cudnn
    • 3.5 安装python3.8
    • 3.6 cuda容器生成新镜像
  • 4.创建deepface镜像
    • 4.1修改Dockerfile
    • 4.2使用GPU环境构建镜像
    • 4.3运行容器
    • 4.4镜像导出成tar包
    • 4.5导入tar包
    • 4.6查看容器日志
    • 4.7error排查

1.安装Docker

docker官网: http://docs.docker.com/
https://docs.docker.com/engine/install/ubuntu/

1.1 确定系统版本

$ lsb_release -a

1.2 卸载旧版本

$ for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

1.3 设置stable镜像仓库

#Update the apt package index and install packages to allow apt to use a repository over HTTPS:
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg# Add Docker’s official GPG key:
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg#Use the following command to set up the repository:
$ echo \"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.4 安装Docker ce

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.5 测试

$ sudo docker version
$ sudo docker run hello-world

1.6 阿里云镜像加速

登录阿里云开发者平台,点击控制台,选择容器镜像服务,获取加速器地址,粘贴脚本直接执行

$ mkdir -p /etc/docker
$ vim /etc/docker/daemon.json
{"registry-mirrors": ["https://{自已的阿里云编码}.mirror.aliyuncs.com"]
}

1.7 重启服务器

$ systemctl daemon-reload
$ systemctl restart docker
#测试运行hello-word
$ sudo docker run hello-word

2.安装nvidia-docker

nvidia官网:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

1.Setup the package repository and the GPG key:

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

因为目前还没有nvidia-docker版本支持ubuntu21.04,所以这里的distribution手动设置为20.04,即执行如下命令:

$ distribution=ubuntu20.04 \...

2.Install the nvidia-container-toolkit package (and dependencies) after updating the package listing:

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit

3.Configure the Docker daemon to recognize the NVIDIA Container Runtime:

$ sudo nvidia-ctk runtime configure --runtime=docker

4.Restart the Docker daemon

$ sudo systemctl restart docker

5.测试

$ sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

3.cuda11.2+cudnn8.8环境配置

3.1 拉取cuda镜像

根据使用环境,选择对应链接: cuda镜像。注意cuda镜像版本需要跟驱动版本一致,否则使用时会报错。
通过命令nvidia-smi查看宿主机CUDA版本为11.2

$ sudo docker pull nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04

3.2 运行容器

# 1.运行容器
$ sudo docker run -d --name mllab --gpus all nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04 /bin/bash
# 2.进入容器
$ sudo docker exec -it mllab bash
# 查看cuda信息
$ nvidia-smi
$ nvcc -V
# 查看cudnn信息,镜像内cudnn版本是8.1
$ sudo find / -name cudnn_version.h
$ cat cudnn_version.h

3.3 apt配置国内源

安装vim

$ apt-get update && apt-get install -y --no-install-recommends vim wget

配置国内源

$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ vim /etc/apt/sources.list
$ sudo apt-get update

替换为阿里云

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

3.4 更换cudnn

由于deepface要求cudnn版本8.6以上,所以需要替换掉8.1
1.下载cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz
官网: https://developer.nvidia.com/rdp/cudnn-archive

  1. 将压缩文件拷贝到容器内
$ sudo docker cp cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz 容器ID:容器内路径

3.在容器内解压

$ tar -xvf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

4.cuda配置cudnn

 $ mv cudnn-linux-x86_64-8.8.0.121_cuda11-archive/include/*  /usr/local/cuda-11.2/include$ mv cudnn-linux-x86_64-8.8.0.121_cuda11-archive/lib/*  /usr/local/cuda-11.2/lib64
$ sudo chmod a+r /usr/local/cuda-11.2/include/cudnn*.h /usr/local/cuda-11.2/lib64/libcudnn*
# 查看cuDNN版本
$ cat /usr/local/cuda-11.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

3.5 安装python3.8

$ apt-get install -y --no-install-recommends \python3 \python3-pip \python3-dev \python3-wheel &&\
cd /usr/local/bin &&\
ln -s /usr/bin/python3 python &&\
ln -s /usr/bin/pip3 pip;
# 更新pip源
# pip升级到最新的版本
$ python -m pip install --upgrade pip
# 修改pip源为清华源
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 或者修改为阿里云的源
# 查看当前 pip 的配置
$ pip config list
# 接着修改配置文件
$ pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/
$ pip config set install.trusted-host mirrors.aliyun.com

3.6 cuda容器生成新镜像

docker commit [-m=“描述信息”] [-a=“作者”] 容器ID 新镜像名:[标签名]

$ docker commit 容器ID waf/image_mllab

4.创建deepface镜像

4.1修改Dockerfile

  1. 修改基础镜像为新生成的cuda镜像。
  2. 在Dockerfile文件中添加以下命令来设置时区,这样在构建镜像时就会自动设置时区,解决 Docker build 构建镜像时卡住问题。
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&  echo "Asia/Shanghai" > /etc/timezone
  1. 配置模型文件路径

4.2使用GPU环境构建镜像

1.在docker 配置文件/etc/docker/daemon.json 中指定默认的runtime:

{"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []} },"default-runtime": "nvidia"  ## 这一步需要添加
}

将默认runtime设定为nvidia后,docker build阶段会默认开启gpu,dockerfile中可以运行需要GPU环境的代码了。构建好的镜像启动容器时,也不需要再指定–gpu。

感觉这个方法不太灵活,毕竟大部分情况下并不需要nvidia的runtime,镜像也不一定要默认使用GPU。如果docker build能像docker run 指定 --gpu参数 那样灵活设置就好了,不知道是不是有这种方法。

2.构建deepface镜像

#进入Dockerfile所在目录执行命令,注意命令最后有个点
$ docker build -t my_deepface  .

4.3运行容器

$ sudo docker run -it --name container_deepface -p 192.168.3.56:80:5000 --gpus all my_deepface

测试deepface接口
postman发请求测试
注意:可以通过docker port 容器ID 查看容器的端口映射

$ sudo docker port 5bde28306e71
5000/tcp -> 192.168.3.56:80

4.4镜像导出成tar包

# docker save -o image.tar 命令用于将 Docker镜像保存到指定文件
$ sudo docker save -o my_deepface.tar my_deepface

4.5导入tar包

# docker load -i imageName.tar 用于从文件载入镜像
$ sudo docker load -i my_deepface.tar# 运行容器
# 注意在DockerFile中写入的CMD后面的命令不执行主要是因为启动的时候指定了shell,命令末尾不要指定/bin/bash
sudo docker run -it --name container_my_deepface -p 192.168.3.56:80:5000 --gpus all f71edb39a3b1(镜像ID)


注意:
使用docker load -i 命令之后,镜像的名字和标签都是none,这个问题的根本在于这个镜像压缩包在打包的时候操作不当所导致。
例如,使用镜像ID打包的话导致解压的出来的镜像没有名字。因此,推荐使用镜像的名字进行打包,例如:

docker save -o redis.tar redis:5.0.2

常用命令

#导出镜像到本地
#把镜像名为test,版本为4.0的docker镜像,保存到/data/export目录下,保存名字和格式为test.tar
docker save -o /data/export/test.tar test:4.0#导入之前导出的镜像
#其中 -i 表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
docker load -i xxx.tar#重命名
docker tag [镜像id] [新镜像名称]:[新镜像标签]

4.6查看容器日志

(1)docker logs --tail=1000 容器名称 (查看容器前多少行的日志)(推荐)

(2)docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/容器ID-json.log)(进入容器内部查看日志)

4.7error排查

醒目部署后,运行其他AI项目时报错:

cudnn.hpp:74: error: (-217:Gpu API call) CUDNN_STATUS_NOT_INITIALIZED in function 'UniqueHandle'

是因为tensorflow-gpu运行程序默认是把GPU的内存全部占满的,可以设置参数来修改显存使用情况。
解决代码:

import tensorflow as tf
import osos.environ['CUDA_VISIBLE_DEVICES']="0" # 指定哪块GPU训练
config=tf.compat.v1.ConfigProto()
#设置使用显存比例,设置最大占有GPU不超过显存的80%(可选)
config.gpu_options.per_process_gpu_memory_fraction=0.8
config.gpu_options.allow_growth = True  # 设置动态分配GPU内存
sess=tf.compat.v1.Session(config=config)

TensorFlow使用显存的设置
解决tensorflow2.2把GPU显存占满的问题

Ubuntu 21.04 使用Docker部署深度学习项目(cuda11.2+cudnn8.8+deepface)相关推荐

  1. 保姆级教学如何在Ubuntu 20.04工作站上配置深度学习环境

    在Ubuntu 20.04工作站上配置深度学习环境 各位同学大家好,本教程将会一步一步的演示如何在一台安装了Ubuntu20.04的服务器上配置深度学习环境,使其成为深度学习工作站. 现在大多数深度学 ...

  2. 基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置

    基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置详解 CUDA+Cudnn+ROS+anaconda+ubuntu装机必备 笔记本双系统安装 U盘启动项安装ubuntu18.04.1 ...

  3. Win 10 + Ubuntu 18.04 双系统安装与深度学习环境配置安装踩坑实录(上篇)

    Win 10 + Ubuntu 18.04 双系统安装与深度学习环境配置安装踩坑实录(上篇) 折腾了两三天总算顺利在电脑上完成了装x的双系统安装,一路走来还比较顺利,主要在ubuntu的显卡设置上躺了 ...

  4. Ubuntu 18.04 server配置多用户深度学习服务器

    Ubuntu 18.04 server配置多用户深度学习服务器 1 重装系统 2 安装图形界面 2.1 更改Ubuntu 镜像源 2.2 安装图形界面 2.3安装gcc , make等库 3 安装Nv ...

  5. 通过NVIDIA-Docker部署深度学习项目环境

    原文地址为:https://zhuanlan.zhihu.com/p/78541520 深度学习环境部署的方法有很多种,其中Docker化深度学习环境和项目是一个很不错的选择.这里写过一些深度学习主机 ...

  6. Docker打包深度学习项目

    Ubuntu如何用Docker打包深度学习项目?请看这里! docker就不用多介绍了吧 Docker 安装: 没什么好说的,参照官网:https://docs.docker.com/engine/i ...

  7. Docker部署深度学习服务器,CUDA+cudnn+ssh

    通过Docker来创建多个容器(相当于多个linux系统),每个容器中的CUDA版本之间互相不影响.这样的好处是可以在项目需要时,不改动主机环境的前提下运行多个CUDA版本.同时,也可以为不同的使用人 ...

  8. Docker 部署深度学习 运行deeplabV3

    文章目录 前言 一.Docker简介 二.帮助命令 三.镜像常用命令 四.容器常用命令 五.配置深度学习环境 六.运行deeplabV3代码 七.提交容器,保存镜像 总结 前言 本文主要介绍docke ...

  9. Centos8安装英伟达显卡驱动并通过docker部署深度学习环境

    20201107 - 每个人的机器和实际需要的环境都不一样,本文只是提供了在自己实验室centos8上的部署过程,部署过程中,没有什么问题.请谨慎参考本篇文章,以免浪费宝贵时间. 0. 引言 之前的时 ...

最新文章

  1. 【PP生产订单】入门介绍(九)
  2. Math.random()获取随机数
  3. java十进制转十六进制
  4. tdbgrid 数据类型输入错误 vb_VB编程从起始到普及历程了解一下
  5. 实践 HTML5 的 CSS3 Media Queries
  6. NERDTree 快捷键辑录
  7. python的编码规范【摘】
  8. TableView全展开实现ContentSizedTableView
  9. VTD的官方help翻译-ROD部分(10~15章)
  10. 【架构风格 架构模式 设计模式 概念】
  11. 一个很实用的计时时钟和消息提醒
  12. flutter 实现文字竖排以及动画效果(文字逐一显示)
  13. 2003系统服务器不设置密码,服务器2003怎么设置密码
  14. Codeforces Round #521 (Div. 3) B. Disturbed People 思维
  15. 为什么sqlserver创建存储过程成功,却找不到这个存储过程呢
  16. 前端面试题之浏览器系列
  17. 收藏了!3D建模软件大全,想入门3D建模的小伙伴一定不要错过
  18. 营销QQ添加好友限制完美解决方案
  19. idea提交本地项目到oschina
  20. lrs_set_recv_timeout

热门文章

  1. 数学小抄: 对于齐次变换矩阵的伴随算子求导性质
  2. H323Client-1 H323协议族概述
  3. 地表蒸散发遥感产品信息提取验证与融合
  4. 【雷达与对抗】【2014.09】无源双基地雷达系统的目标检测与成像
  5. 火山小视频伪原创怎么做
  6. 新抽奖助手版v7.7.5抽奖码抽奖 吸粉/裂变/引流 投票/抽奖/助手
  7. 基于SSM搭建的学生信息管理系统项目源码+学习视频
  8. 一键换肤 自定义css样式实现
  9. 统计学习方法的概括和补充
  10. 腾讯Q+开放平台,相信又是一次成功的模仿