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