如何快速部署一个机器学习在线预测系统

七牛的自定义数据处理平台提供高性能 GPU 计算机群及自动伸缩容器集群方便开发者对云存储中的大量图片/音视频/文档数据进行云端机器学习,包括图像分类、视频分析、语音识别以及自然语言处理等等。简单易用的自定义数据处理平台可以帮助开发者快速构建机器学习应用,实现在云端进行训练、分类和预测。


本文介绍如何使用七牛自定义数据处理平台快速部署一个机器学习在线预测系统。主要分为以下三个步骤:



  • 第一步:构建机器学习应用容器镜像



  • 第二步:在平台上注册及部署机器学习应用



  • 第三步:使用机器学习系统在线预测




前期准备





  • 本地运行 Docker 版本需为 1.12.0 及以上



  • 一个已开发好的机器学习项目应用


本示例使用开源人脸识别项目 Openface 进行实践, Openface 是用 Torch 和 Python 实现的一个基于深度神经网络的开源人脸识别系统,该项目已提供 Docker 镜像。


网址:https://cmusatyalab.github.io/openface/



一、构建机器学习应用镜像


开发完机器学习应用后需要将其构建成一个基于 Linux ,可运行的 Docker 镜像。Docker 镜像在构建时需要在 Dockerfile 中指定入口程序(ENTRYPOINTCMD),同时该入口需要满足:



  • 启动后监听 9100 端口



  • 接受 HTTP POST /handler?cmd=XXX&url=XXX 的请求,并返回数据处理结果



  • 在一个自定义的路径上接收 HTTP GET 请求,并返回该程序当前的健康状态(可选)


镜像制作完毕后,建议在本地运行该 Docker 镜像,并发送两种数据请求和健康检查请求,来确认镜像功能正常。镜像的构建和验证可以参考 Demo



二、在平台上注册及部署机器学习应用


1、首先通过命令行 qdoractl 工具上传机器学习应用的容器镜像推送到七牛自定义数据处理镜像仓库,运行如下命令:屏幕快照 2017-03-23 下午5.29.50


提示:怎么获取或者找到Access Key 和 Secret Key



2、注册一个机器学习应用,运行如下命令:


屏幕快照 2017-03-23 下午5.30.00


注:<ufop> 为机器学习应用在线预测时调用的接口名称,只能由 0-9、a-z、-、_ 组成,第一位必须是字母,长度为 4-20 个字符以内。在自定义数据处理平台上具有唯一性,创建后不能修改。


本示例将开源人脸识别项目 Openface 注册为 faced:


屏幕快照 2017-03-23 下午5.30.06


3、生成发布版本的配置文件,运行如下命令:


屏幕快照 2017-03-23 下午5.30.17


当前目录会生成一份名叫 dora.yaml 的配置文件,该配置文件包含下列参数:


image (65)


修改 dora.yaml 的配置文件。如下是一个已经修改好的配置文件的内容:


屏幕快照 2017-03-23 下午5.30.25


4、基于当前目录下配置文件 dora.yaml,向服务器发出一个创建发布版本请求,运行如下命令:


屏幕快照 2017-03-23 下午5.30.32


5、调整实例数,创建完一个发布版本后,运行如下命令:


屏幕快照 2017-03-23 下午5.30.40


image (64)


如例:


屏幕快照 2017-03-23 下午5.30.47


调整实例数命令成功后,命令行工具会提示查看这次实例调整的最终执行状况,运行如下命令:


屏幕快照 2017-03-23 下午5.34.51


可以看到机器学习应用的两个实例已经正常启动了。



三、使用机器学习系统在线预测


机器学习应用的实例启动之后,就可以直接通过 URL 调用注册的接口名称进行在线预测。使用方式如下:


屏幕快照 2017-03-23 下午5.31.00


image (63)


本示例已经使用 Openface 项目对 Trump 的一些个人照片进行了学习训练,当将从七牛云存储中访问一张新的 Trump 的照片时,调用注册的接口名称 faced 识别是否为 Trump 的照片,得到如下信息:


image (62)


表示 87% 的确认这张照片是 Trump 的照片。