本文将站在读者是模型部署方面的小白的角度来详细介绍如何利用docker, gunicorn和flask来部署模型。写此文的目的,一方面是为了将我的经验分享给大家,另一方面也算是作为我的学习笔记,方便日后查阅。
关于docker, gunicorn 和 flask的基础知识,本文不做介绍,可以百度。我也在文末给出一些我看过的比较好的资料。
1.部署所需文件及详细内容
这里的模型是用来对mnist数字集进行分类的,相关内容来自于github上的项目(https://github.com/cloudxlab/ml)。我的操作系统为Ubuntu 16.04, 工作目录为 /home/user/flask_app/, 该目录下的文件和文件夹信息如下:
我们先要准备好主程序文件predictions.py(来自于github项目,https://github.com/cloudxlab/ml), 因为要用flask部署,所以对该程序做了一定的修改:
然后准备好Dockerfile, 具体如下:
其中gunicorn.sh的内容如下:
这里,我把gunicorn的配置文件写在了gunicorn_config.py中,其内容如下:
根据我的经验,配置文件里的ip地址不要用你本地宿主机的ip地址,否则会出错。
这个项目需要在docker安装的软件包都保存在requirements.txt中,内容如下:
2.部署步骤:
1.先查看一下本地机器上已有的docker 镜像文件:
2.然后在工作目录下,输入如下命令(将创建的镜像文件命名为ml_mnist):
注意,不要忘了最后的那个“ . ”, 它表示的是当前文件夹。然后再查看一下docker中的镜像文件:
可以看到,新的镜像"ml_mnist"已经生成了。
3.利用生成的镜像,创建我们需要的容器。可以把容器命名为 digit_deploy, 并且在/home/user/下生成访问日志文件和错误日志文件,使得即便退出了容器,我们也能在该目录下查看这些文件。
因为/home/user/是本地电脑的路径,而/home/project/app/log是容器内部的路径。注意这行命令的最后是镜像文件的ID。运行完这条命令后,我们的容器就会生成并启动。这里的 -p 8888:5000 表示宿主机端口到容器端口的映射。
3.测试访问生成的容器:
注意,如果你输入 curl http://0.0.0.0:5000/ 则会报错。原因是5000是容器的端口,它已经被映射到了宿主机的8888端口了。
另外,如果输入 curl http://192.168.x.xx:8888/ 则也可以成功访问。 其中,192.168.x.xx是公司内部局域网的网址。
如有问题,欢迎留言讨论。觉得本文不错,请点个赞,^_^!
关于Docker (第一个需要):
https://docker-curriculum.com
阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台