AI模型部署系列之docker

前言

AI实战:AI模型部署系列之docker
AI实战:AI模型部署系列之多进程

本文分享使用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
https://www.jb51.net/article/135441.htm

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐