定制模型服务Docker镜像

简介

Xiaomi Cloud-ML支持Bring Your Own Image功能,使用方法和 定制训练任务Docker镜像 相同。

使用示例

用户创建模型服务时指定Docker镜像地址即可。

  1. cloudml models create -n linear -v v1 -u fds://cloud-ml/linear -d cloudml/tensorflow:1.0.0

定制镜像

如果需要定制镜像,我们对模型服务容器的启动进行了封装,用户构建的Docker镜像需要符合一些约定,同时镜像镜像最好能暴露在公网允许匿名下载。

Docker镜像启动命令如下,并且会把AKSK和FDS endpoint作为环境变量传入,并且mount GPU相关的设备目录,运行的参数如下。

  1. "/model_service.py", model_service.model_name, model_service.model_uri, model_service.model_version

最简单的镜像只有一个文件,在本地编写 model_service.py ,注意需要 chmod +x 添加可执行权限。

  1. #!/usr/bin/env python
  2. import SimpleHTTPServer
  3. import SocketServer
  4. def main():
  5. PORT = 9000
  6. Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
  7. httpd = SocketServer.TCPServer(("", PORT), Handler)
  8. print "serving at port", PORT
  9. httpd.serve_forever()
  10. if __name__ == "__main__":
  11. main()

然后编写Dockerfile,只需要保证安装了model_service.py需要的依赖即可,基于Xiaomi Cloud-ML官方镜像可以获得更快的下载速度但不是必须的。

  1. FROM cloud-ml/dev-tensorflow-cpu:0.12.0-xm1.0.0
  2. ADD ./model_service.py /
  3. EXPOSE 9000
  4. CMD /model_service.py

然后我们可以在本地build这个容器镜像。

  1. sudo docker build -t cloudml/http_model_service .

现在本地模型服务端的运行参数,测试命令如下,然后访问本地的9000端口看服务是否正常。

  1. sudo docker run -it -p 9000:9000 cloudml/http_model_service "/model_service.py" "mymodel" "fds://foo/bar" "v1"

参数介绍

  • -d 表示用户指定的Docker镜像地址,注意不可与 -F 和 -V 参数同时使用。

原文: http://docs.api.xiaomi.com/cloud-ml/modelservice/08_use_docker_image.html