AI模型部署系列之docker
前言
本文分享使用docker部署AI模型的经验。
Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性。
下面就介绍一下docker的安装、创建cpu的tensorflow的docker。
同时以 上海垃圾分类系列之快速搭建垃圾分类模型 作为整个过程的搭建的例子。
环境
- Ubuntu 16.04
安装docker
- 详细步骤
mkdir docker_example
cd docker_example/
1、卸载旧版本docker(未安装过的,可不执行)
sudo apt-get remove docker docker-engine docker.io
2、更新
sudo apt-get update
3、安装依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
4、添加官方密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
出现 OK 表示添加成功
5、添加仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
6、再次更新
sudo apt-get update
7、安装docker(默认安装最新版)
sudo apt-get install docker-ce
若想指定版本:
sudo apt-get install docker-ce=<VERSION>
8、查看docker版本
docker -v
当前最新版本:Docker version 18.09.7, build 2d0083d
9、启动docker 后台服务
sudo service docker start
10、测试运行hello-world
sudo docker run hello-world
出现下面详细就表明安装顺利、测试ok:
Hello from Docker!
This message shows that your installation appears to be working correctly.
....
....
创建cpu版的Tensorflow
1、下载镜像
sudo docker pull tensorflow/tensorflow:1.4.0-py3
(1.4.0 是指版本, py3 是指python3.x)
显示下面信息表示下载完毕:
Status: Downloaded newer image for tensorflow/tensorflow:1.4.0-py3
需要下载其他版本的tensorflow,把1.4.0改为对应的版本号即可。
若是需要下载gpu的tensorflow,命令如下:
sudo docker pull tensorflow/tensorflow:1.4.0-gpu-py3
查看tensorflow的镜像(TensorFlow Docker Images):
https://hub.docker.com/r/tensorflow/tensorflow
2、创建Tensorflow容器
sudo docker run --name refuse_classify-tensorflow-1.4.0-py3 -d \
-p 8888:8888 \
-p 9006:6006 \
-p 9007:6007 \
-p 9008:6008 \
-v ~/data/tmp/docker_example:/data \
tensorflow/tensorflow:1.4.0-py3
--name:创建的容器名,即 refuse_classify-tensorflow-1.4.0-py3 (python3下tensorflow 1.4.0 的垃圾分类docker)
-d:后台运行容器
-p 8888:8888:端口映射,前者是宿主机的端口,后者是docker中的端口
-p 9006:6006: tensorboard 端口映射
-p 9007:6007: 预留端口
-p 9008:6008: 预留端口
-v ~/data/tmp/docker_example:/data:将宿主机的 ~/data/tmp/docker_example 挂载到容器内的 /data 下
tensorflow/tensorflow:1.4.0-py3 :是上一步下载的镜像
注:1、若是多次创建会出现下面的错误提示:
docker: Error response from daemon: Conflict. The container name "/refuse_classify-tensorflow-1.4.0-py3" is already in use by container "b942ba9baec0674617c031c454457caf5abe8620bcdd6e9a628756e83743c89e". You have to remove (or rename) that container to be able to reuse that name.
解决方法:
sudo docker rm b942ba9b
(b942ba9b 是docker id 的前面几个字符)
2、若是gpu版本,需要加上 ‘ --runtime=nvidia ’,及安装对应的CUDA,请自行查阅相关资料
3、运行docker
sudo docker exec -it refuse_classify-tensorflow-1.4.0-py3 env LANG=C.UTF-8 /bin/bash
出现下面的信息表示已进入docker:
root@5b6a3a37e730:/notebooks#
注:‘5b6a3a37e730’ 是 docker id
查看相关信息:
python
输出信息:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
import tensorflow as tf
print(tf.__version__)
输出:
1.4.0
说明一切安装顺利。
4、docker 常用指令
- 停止docker
sudo docker stop 5b6a3a37e730
或
sudo docker stop refuse_classify-tensorflow-1.4.0-py3
- 开启docker
sudo docker start 5b6a3a37e730
- 重启docker
sudo docker restart 5b6a3a37e730
- 查看本地镜像
sudo docker images
- 删除本地镜像
sudo docker rmi docker_id/name
- 查看运行中的docker
sudo docker ps
部署AI模型
这里使用 上海垃圾分类系列之快速搭建垃圾分类模型 来作为例子。
模型下载:垃圾分类识别模型 (注:字母有拼写错误,rafuse改为refuse即可和下面的步骤一致)
- 步骤
1、复制完整代码到 ‘~/data/tmp/docker_example’
2、进入docker
sudo docker exec -it refuse_classify-tensorflow-1.4.0-py3 env LANG=C.UTF-8 /bin/bash
cd /data/
ls
输出信息:
refuse_recognize
cd refuse_recognize
3、 安装环境
pip install jieba
pip install Cython
pip install word2vec
4、模型修改
1)下载imagenet2012的inception-v3模型
python classify_image.py
输出下来信息表示成功:
2019-07-15 11:54:25.060237: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-07-15 11:54:25.433662: W tensorflow/core/framework/op_def_util.cc:334] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().
大熊猫,熊猫,熊猫,浣熊,大熊猫(Ailuropoda melanoleuca) (score = 0.89107)
光面狐猴;大狐猴 (score = 0.00779)
小熊猫,小熊猫,熊猫,熊猫,猫熊,小熊猫 (score = 0.00296)
番荔枝 (score = 0.00147)
地星 (score = 0.00117)
2)垃圾分类映射模型修改
vi runs/checkpoints/checkpoint
修改
/home/zzh/data/DL/refuse_recognize/
为
/data/refuse_recognize
3)测试
python refuse.py ./img/2.png
输出下面信息表示一切ok:
classify:
手机移动电话 => 可回收垃圾
iPod => 湿垃圾
笔记本电脑笔记本 => 可回收垃圾
调制解调器 => 湿垃圾
手持电脑手持微电脑 => 可回收垃圾
保存该模型的docker环境
1)退出docker
exit
2)查看运行中的docker
sudo docker ps
3)保存dicker
sudo docker commit -a 'zack' -m 'refuse classify model, tf1.4.0-py3-cpu' 65e3ec576b7f refuse_classify:v1
参数说明:
-a : 提交的镜像作者
-m : 提交时的说明文字
65e3ec576b7f: 容器id
refuse_classify: 名称
v1: tag
4)查看保存的docker镜像
sudo docker images
输入信息如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
refuse_classify v1 52ec4a357116 40 seconds ago 1.57GB
参考
https://www.runoob.com/docker/ubuntu-docker-install.html