在线服务
训练后的模型可以用于接收输入并进行推理(表情分类)。本例中模型接收图片作为输入,并返回图片上识别出的表情类别为结果。
我们使用Docker进行代码和模型的封装,你可以下载本文提供的镜像,也可以自己生成镜像。
下载镜像
你可以跳过下面的“自己生成镜像”步骤。
下载镜像:
sudo docker pull uhub.service.ucloud.cn/uai_demo/slim_infer:latest
你需要将该镜像重新docker tag成你自己uhub镜像库中的镜像,例如uhub.ucloud.cn/
自己生成镜像
文件准备
我们使用Docker进行代码和模型的封装,需要准备如下数据文件:
|_ slim/ |_ sliminfer.py |_ checkpoint_dir/ |_ checkpoint |_ info.json |_ labels.txt |_ model.ckpt... |_ slim.conf |_ slim_infer.Dockerfile |_ sliminfer.py
其中checkpoint_dir保存了模型训练中得到模型文件以及生成tfrecord文件中得到的info.json和labels.txt。
slim.conf介绍
{ "http_server" : { "exec" : { "main_class": "slimModel", "main_file": "sliminfer" }, "tensorflow" : { "model_dir" : "/data/output" } }, "infor" : { "preprocessing_name" : "None", "model_name" : "vgg_19", "eval_image_size" : "None" } }
- 其中http_server.exec.main_file定义了入口python模块:sliminfer.py(注:这边需要将.py 删除,因为django会以模块的形式import sliminfer)
- 其中http_server.exec.main_class定义了推理服务的对象类:slimModel
- 其中http_server.tensorflow.model_dir定义了模型的路径
- 其中infor.preprocessing_name给出了图像预处理方法(这里应该与模型训练时输入的preprocessing_name参数保持一致)
- 其中infor.model_name给出了模型名称(这里应该与模型训练时输入的model_name参数保持一致)
- 其中infor.eval_image_size给出了图片的resize大小(这里应该与模型训练时输入的train_image_size参数保持一致)
slim_infer.Dockerfile介绍
FROM uhub.service.ucloud.cn/uaishare/cpuuaiserviceubuntu-16.04python-2.7.6tensorflow-1.6.0:v1.2
EXPOSE 8080 ADD ./slim/. /ai-ucloud-client-django/. ADD ./sliminfer.py /ai-ucloud-client-django/sliminfer.py ADD ./slim.conf /ai-ucloud-client-django/conf.json ADD ./checkpointdir/ /data/output/ ENV UAISERVICE_CONFIG /ai-ucloud-client-django/conf.json CMD cd /ai-ucloud-client-django && gunicorn -c gunicorn.conf.py httpserver.wsgi
- 其中定义了使用的基础镜像uhub.service.ucloud.cn/uaishare/cpu_uaiservice_ubuntu-16.04_python-2.7.6_tensorflow-1.6.0:v1.2
- export 8080端口
- 将当前目录下code/下的文件复制到/ai-ucloud-client-django/
- 将slim.conf 放入/ai-ucloud-client-django/conf.json
- 指定UAI Inference server在启动时使用/ai-ucloud-client-django/conf.json 配置文件
- 启动http server
生成镜像
准备好以上文件之后,我们可以通过slim_infer.Dockerfile生成Docker镜像。
sudo docker build -t uhub.service.ucloud.cn//slim_infer -f slim_infer.Dockerfile .
本地测试
得到镜像之后,我们可以在本地进行测试。
sudo docker run -it -p 8080:8080 uhub.service.ucloud.cn//slim_infer
我们使用fer2013数据集中的图片进行测试:
curl -X POST http://localhost:8080/service -T /data/fer/pic/angry/00000_1.jpg
命令行中会输出该图像的表情类别。
UAI-Inference平台测试
可以在部署CPU在线服务APP上查看部署在线服务的具体操作步骤。 当部署完毕之后,我们可以在详细页面获取在线服务的URL地址。
我们可以通过如下命令来测试,这里的URL即为这个在线服务的URL地址:
curl -X POST http:///service -T /data/fer/pic/angry/00000_1.jpg
命令行中会输出该图像的表情类别。