专栏首页AI的那些事儿总结一下模型工程化部署的几种方式

总结一下模型工程化部署的几种方式

昨天我看到公众号的后台有同学留言说我好几天没有更新公众号了,我开玩笑的回复,我的公众号遵循国家法定假日。在这里感谢大家的支持,一直默默地关注着我的公众号。

最近有好多同学无论是在群里,还是在公众号后台留言中都跟我提到了模型的线上部署和工程化的问题,今天我就来聊聊的对于这一块的认识和工程实践。

在企业中,我们做模型的目的就是为了能够让它来更好的解决产品在实际生产过程中所遇到的具体的问题,而模型训练好之后,下一步要做的就是将其部署上线。AI对于很多企业来讲是一个新的领域,所以很多企业在训练好一个模型之后,对于模型部署方面总是会显得束手无策。

在企业中,我们所做的AI项目,从大的方面来分,可以分成在线模型和离线模型两种,每一种类型的模型根据业务场景的不同会有不同的选择,例如,我们在推荐系统中,很多任务并不是要求实时得出结果的,尤其是在做召回的这个阶段,有时候一天做一次召回,有时候可能一周做一次召回都可以,针对于这类的模型,我们就没有必要去关注他的实时效率问题。再比如,有些文本审核平台,需要实时审核用户的发帖信息和一些在线的言论,有一些敏感的内容一旦发出去,就很有可能导致一些非常严重的后果,那么这个时候,我们就需要模型能够进行实时预测,此时,对于模型预测的效率要求就非常高了,甚至对于并发量还有一定的要求;还有一种情况,就是我们可能不一定需要实时给用户进行反馈,但是可能需要在几分钟只能告诉用户一个结果,对于这样的情况,我们一般叫做nearline模型,那么下面我们就针对于这几种模型的部署来做一个简单的探讨。

离线模型(Offline)

离线模型存在于很多业务场景中,其中最常见的业务场景就是用在推荐系统的召回阶段,由于在推荐系统中,召回并不要求是实时的,可以根据业务的需要,调整成每天一次,或者每几个小时跑一次即可,因此,这类的模型,一般我们只需要使用Linux下的crontab定时任务脚本,每隔一段时间来启动一次就可以,然后将log文件输出到指定的文件下即可。这种方式一般来讲仅限离线模型的部署,其本质上就是一段定时任务的代码。在这里我们不做过多的展开。

在线(Online)/近似在线(NearLine)模型

在线模型或者说是实时模型是我们这次要重点来说的一种模型的部署。在生产系统中,实时推理和预测是最常见的需求,也是对于很多深度学习模型来说所必须达到的点。下面我们来说一下深度学习模型在实时预测时常见的几种部署方法:

将模型预测直接打包成http接口

将模型直接打包成一个http接口的形式是在企业中比较常见的模型上线的方式,所谓的将预测直接打包成http接口实际上一般是指将我们训练好的模型直接在线上进行预测。我们来试想一个场景,当一个模型训练好之后,我们如果想要验证这个模型的好坏,我们首先能想到的办法就是找一批数据来测试一下。实际上,将模型预测直接打包成http接口也是利用了这样的思路。

在这里,我们可以将训练好的模型提前进行加载,并初始化若干个消息队列和worker,当有新的待预测数据进入的时候,我们直接将数据通过消息队列传入到模型中进行推理和预测,最终得到结果。

而对于外层接收输入,我们一般可以将接收的地方使用flask打包成一个http接口,等待传入即可。

使用这种方式直接打包成http接口的好处在于打包和部署相对比较方便,对于一些相对比较轻量级且对并发量要求不是很高的情况下相对还是比较好用的。使用值得注意的是,如果对于一个相对比较大的模型来讲,这种方式推理的时间相对就会比较长,从用户输入到结果返回可能需要200ms左右。

PMML

PMML是一套通用的且与平台和环境无关的模型表示语言,也是目前机器学习在模型部署方面的一种标准部署方案,其形式是采用XML语言标记形式。我们可以将自己训练的机器学习模型打包成PMML模型文件的形式,然后使用目标环境的解析PMML模型的库来完成模型的加载并做预测。

PMML是一套基于XML的标准,通过 XML Schema 定义了使用的元素和属性,主要由以下核心部分组成:

数据字典(Data Dictionary),描述输入数据。

数据转换(Transformation Dictionary和Local Transformations),应用在输入数据字段上生成新的派生字段。

模型定义 (Model),每种模型类型有自己的定义。

输出(Output),指定模型输出结果。

目前,大部分机器学习库都支持直接打包成PMML模型文件的相关函数,例如在Python中的LightGBM库,XGBoost库,Keras库等,都有对PMML的支持,直接使用相应的命令就可以生成,而在Java、R等语言中,也有相关的库可以进行PMML文件生成的命令。

一般来讲,使用PMML文件进行预测的过程如下:

由于其平台无关性,导致PMML可以实现跨平台部署,是企业中部署机器学习模型的常见解决方案。

TensorFlow Serving

使用TensorFlow Serving进行模型部署对于TensorFlow开发者而言是一件非常nice的事情,其实网上有很多关于TensorFlow Serving的介绍,也有专门讲如何使用TensorFlow Serving进行模型部署的。实际上,我们使用TensorFlow Serving进行服务部署,一般需要2台以上机器,其中一台作为TensorFlow Serving的服务器,这台服务器是专门来做模型部署和预测用,对于这台服务器,一般我们建议使用GPU服务器,这样会使整个推理预测的过程变得很快;另外一台服务器是业务服务器,也就是接收用户的输入以及其他业务处理的服务器。我们可以把模型部署到TensorFlow Serving的服务器上,而一般我们只需要先在服务器上使用docker创建一个TensorFlow Serving服务,然后将模型文件上传上去,当有请求进来的时候,业务服务会直接对模型所在的服务器发起服务调用,并得到模型预测的结果。一般来讲,整个流程如下:

这种方式对于一直在使用TensorFlow进行模型开发的同学来说非常方便,只需要简单的几行代码就能搞定。

本文分享自微信公众号 - AI的那些事儿(clever-ai),作者:黄鸿波

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 推荐系统常用算法总结(适合刚入门的同学)

    从推荐算法的理论来讲,主要可以从召回层和排序层两个方面来说,虽然召回层和排序层都是使用算法和模型来做,但是针对于不用的阶段,所用的模型也有一定的差...

    黄鸿波
  • (推荐,我的深度总结)聊聊为什么技术要先广后精,对技术新人的几点建议

    在我30岁生日那天的文章中,我在文末给技术新人的几点建议中,第一点就提出来了“技术要先广后精”这个想法,今天我想针对这一点来谈谈我的看法。

    黄鸿波
  • 聊聊如何从程序员晋升为管理者(我的肺腑之言)

    上个月我写了一篇《从算法工程师到主管的转变,需要改变的是什么》,这篇文章是站在一个已经当得上技术主管的角度来写的,那么今天我们换一个角度,来聊一聊如何从程序员晋...

    黄鸿波
  • 冠状病毒时代下的AI

    冠状病毒是2020年的“黑天鹅”。这种病毒首次出现,不仅是一个出人意料的极端异常事件,而且人类试图控制这种病毒的反应也在世界各地的医疗、商业、金融、零工经济、信...

    磐创AI
  • 飞桨工程师亲授调参技巧,可使MobileNetv3-YOLOv3模型压缩70%,推理速度提升1倍

    随着端侧算力日益增长,以及模型小型化方案日趋成熟,使得高精度的深度学习模型在移动端、嵌入式等终端设备上流畅运行成为可能。然而将深度学习融合到终端设备上依旧面临平...

    用户1386409
  • 统计学习方法概论

    1.统计学习 统计学习的对象是数据,它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去。统计学习...

    机器学习AI算法工程
  • 大幅提升开发效率!这几个调参技巧你不可不知!

    随着端侧算力日益增长,以及模型小型化方案日趋成熟,使得高精度的深度学习模型在移动端、嵌入式等终端设备上流畅运行成为可能。

    GitHubDaily
  • 机器学习模型出错的四大原因及如何纠错

    【新智元导读】本文介绍了机器学习模型出错的常见原因, 讨论了如何用偏差和方差、精确率和召回率这些指标来评测模型的问题,并基于 Andrew Ng 在斯坦福机器学...

    新智元
  • 图灵奖得主推荐新书:图模型手册(500页PDF下载)

    图灵奖获得者 Judea Pearl 在 Twitter 推荐了一本新书《图模型手册》,他认为,这本书很好地刻写了图模型领域自 20 世纪 80 年代成立以来是...

    新智元
  • Kaggle&TianChi分类问题相关纯算法理论剖析导读Bias-Variance-TradeofGBDT 理论剖析GBDT 实战剖析

    17/12/30-update :很多朋友私密我想要代码,甚至利用金钱诱惑我,好吧,我沦陷了。因为原始代码涉及到公司的特征工程及一些利益trick,所以我构造了...

    sladesal

扫码关注云+社区

领取腾讯云代金券