定制模型服务Docker镜像
简介
Xiaomi Cloud-ML支持Bring Your Own Image功能,使用方法和 定制训练任务Docker镜像 相同。
使用示例
用户创建模型服务时指定Docker镜像地址即可。
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相关的设备目录,运行的参数如下。
"/model_service.py", model_service.model_name, model_service.model_uri, model_service.model_version
最简单的镜像只有一个文件,在本地编写 model_service.py
,注意需要 chmod +x
添加可执行权限。
#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer
def main():
PORT = 9000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
if __name__ == "__main__":
main()
然后编写Dockerfile,只需要保证安装了model_service.py需要的依赖即可,基于Xiaomi Cloud-ML官方镜像可以获得更快的下载速度但不是必须的。
FROM cloud-ml/dev-tensorflow-cpu:0.12.0-xm1.0.0
ADD ./model_service.py /
EXPOSE 9000
CMD /model_service.py
然后我们可以在本地build这个容器镜像。
sudo docker build -t cloudml/http_model_service .
现在本地模型服务端的运行参数,测试命令如下,然后访问本地的9000端口看服务是否正常。
sudo docker run -it -p 9000:9000 cloudml/http_model_service "/model_service.py" "mymodel" "fds://foo/bar" "v1"
参数介绍
-d
表示用户指定的Docker镜像地址,注意不可与-F
和-V
参数同时使用。