墨尘的模型部署3--nvidia-docker实现tensorflow serving单模型文件部署(三)

定制容器tensorflow serving镜像,并部署训练好模型文件

      • 1.手动定制本地已经训练模型的镜像(使用可用于开发的镜像dev)
        • 1.1 下载centos镜像,启动容器,进入容器
        • 1.2. 配置容器内软件包,开启ssh服务及开机启动配置
        • 1.3. 将训练好的模型my model复制到名为serving_base容器内
        • 1.4. 打包成新镜像,并验证
      • 2.Dockerfile文件自动定制docker-tf-gpu镜像
        • 2.1 创建Dockerfile文件
        • 2.2 执行build 创建镜像
        • 2.3 查看镜像列表,并创建容器,输入密码即可

1.手动定制本地已经训练模型的镜像(使用可用于开发的镜像dev)

1.1 下载centos镜像,启动容器,进入容器

# 下可用于后期开发的镜像
[root@aiserver ~]# docker pull tensorflow/serving:latest-dev-gpu
# 启动容器
[root@aiserver ~]# docker run -it -d --name serving-base tensorflow/serving:latest-dev-gpu
# 进入容器
[root@aiserver ~]# docker exec -it serving-base /bin/bash
[root@d72250ecaa5e /]# ifconfig
bash: ifconfig: command not found
  • /bin/bash: 指进入容器时执行的命令(command)

1.2. 配置容器内软件包,开启ssh服务及开机启动配置

[root@d72250ecaa5e /]#  apt-get install openssh-server net-tools -y
[root@d72250ecaa5e /]# mkdir -pv /var/run/sshd 
# 进入'/var/run/sshd'文件夹  
[root@d72250ecaa5e /]# cat ./auto_sshd.sh 
#增加可执行权限
[root@d72250ecaa5e /]# chmod +x /auto_sshd.sh 

[root@d72250ecaa5e /]# echo "root:iloveworld" | chpasswd

生成ssh 主机dsa 密钥(不然ssh 该容器时,会出现错误。)
遇到输入Enter same passphrase again:时候,直接回车跳过

[root@d72250ecaa5e /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
[root@d72250ecaa5e /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

我们加一个history记录的时间功能吧,这样方便后期查看

echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile

1.3. 将训练好的模型my model复制到名为serving_base容器内

docker cp models/<my model> serving_base:/models/<my model>
#例子如下:
docker cp models/yolov3 serving_base:/models/yolov3

1.4. 打包成新镜像,并验证

普通打包镜像

[root@aiserver ~]# docker commit --change "ENV MODEL_NAME yolov3" serving_base serving_base_image
sha256:6e3330b30dfff5f029f102874e54cfffffbc37dcf2a4eb7304c817148fbc944d
  • commit: 提交一个具有新配置的容器成为镜像,后面跟容器的名字serving_base 或者容器Id ,最后是生成新镜像的名字serving_base_image

设置开机自启动选项打包镜像

[root@aiserver ~]# docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" serving_base serving_base_image
sha256:7bb4efd82c4ff1f241cbc57ee45aab1b05d214b1e9fcd51196696c67d480e70b

  • –change : 将后期使用此镜像运行容器时的命令参数、开放的容器端口提前设置好。开启的时候自动运行auto_sshd.sh脚本
  • -c “EXPOSE 22” :暴露22端口,默认也是暴露的
    验证
# 由于上面已经设置了默认端口为22,此处可以不设置
[root@aiserver ~]# docker run -d -it --name my_container serving_base_image
[root@aiserver ~]# docker ps -a
# 如果上面没有设置22端口则执行如下指令使用8501端口:
[root@aiserver ~]# docker run -t --rm -p 8501:8501 serving_base_image
# 重开一个终端,验证是否成功
[root@aiserver ~]# curl http://localhost:8501/v1/models/yolov3

进行ssh测试,先查看一下该容器的ip,之后ssh。ok

[root@aiserver ~]# docker exec -it my_container /bin/bash
[root@aiserver ~]# ssh [email protected]  //或者ssh 127.17.0.4
RSA key fingerprint is 87:88:07:12:ac:0a:90:28:10:e1:9e:eb:1f:d6:c9:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.4' (RSA) to the list of known hosts.
root@172.17.0.4's password: 
Last login: Tue Nov 29 16:00:49 2016 from gateway

[root@ec17e553d5c4 ~]# w   
 16:34:17 up 63 days,  7:49,  1 user,  load average: 0.00, 0.02, 0.05 USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    gateway          16:34    1.00s  0.00s  0.00s w 
[root@ec17e553d5c4 ~]# ping gateway
PING gateway (172.17.0.1) 56(84) bytes of data. 64 bytes from gateway (172.17.0.1): icmp_seq=1 ttl=64 time=0.048 ms

2.Dockerfile文件自动定制docker-tf-gpu镜像

墨尘的模型部署3--nvidia-docker实现tensorflow serving单模型文件部署(三)_第1张图片

2.1 创建Dockerfile文件

[root@localhost ~]#  mkdir centos7-dockerfile
[root@localhost ~]#  cd centos7-dockerfile/
[root@localhost ~]#  cat Dockerfile 
# The dockerfile has Change add sshd services on Centos7.0
#centos7:latest image
FROM centos:latest

MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng

#Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd

#Set password for root
RUN echo 'root:iloveworld' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

#Set history record
ENV HISTTIMEFORMAT "%F %T  "

#Fix sshd service:Read from socket failed: Connection reset by peer?
RUN ssh-keygen -A

#Change timezone CST
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#Open 22 port
EXPOSE 22

#Auto running sshd service
CMD ["/usr/sbin/sshd","-D"]

2.2 执行build 创建镜像

执行Dockerfile

```python
docker build -t centos_new:tag .
  • -t: 指定镜像名称
  • .:末尾的 点标识“ .”标识dockerfile文件的路径
  • :备注:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。注意,指定了CMD命令以后,docker container run命令就不能附加命令了,否则它会覆盖CMD命令。

2.3 查看镜像列表,并创建容器,输入密码即可

[root@localhost centos7-dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_new latest 37244727ac6e About a minute ago 283MB
centos latest 1e1148e4cc2c 3 months ago 202MB
[root@localhost centos7-dockerfile]# docker run -it -d --name contain_new centos_new
d99be6d58a1cba6dbcd0d2cd2448a557faf14ee7897bafe1ef60b04875901cd3
[root@localhost centos7-dockerfile]# docker exec contain_new hostname -i
172.17.0.2
[root@localhost centos7-dockerfile]# ssh 127.17.0.2
root@127.17.0.2's password:

你可能感兴趣的:(墨尘的模型部署)