2019年7月份,美团外卖的日订单量已经突破3000万单,占有了相对领先的市场份额。围绕着用户、商户、骑手,美团配送构建了全球领先的即时配送网络,建设了行业领先的美团智能配送系统,造成了全球规模最大的外卖配送平台。html
如何让配送网络运行效率更高,用户体验更好,是一项很是有难度的挑战。咱们须要解决大量复杂的机器学习和运筹优化等问题,包括ETA预测、智能调度、地图优化、动态订价、情景感知、智能运营等多个领域。同时,咱们还须要在体验、效率和成本之间达到平衡。算法
若是要解决上述的机器学习问题,就须要有一个功能强大且易用的机器学习平台来辅助算法研发人员,帮助你们脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。数据库
目前业界比较优秀的机器学习平台有不少,既有大公司研发的商用产品,如微软的Azure、亚马逊的SageMaker、阿里的PAI平台、百度的PaddlePaddle以及腾讯的TI平台,也有不少开源的产品,如加州大学伯克利分校的Caffe、Google的TensorFlow、Facebook的PyTorch以及Apache的Spark MLlib等。而开源平台大都是机器学习或者深度学习基础计算框架,聚焦于训练机器学习或深度学习模型;公司的商用产品则是基于基础的机器学习和深度学习计算框架进行二次开发,提供一站式的生态化的服务,为用户提供从数据预处理、模型训练、模型评估、模型在线预测的全流程开发和部署支持,以期下降算法同窗的使用门槛。缓存
公司级的一站式机器学习平台的目标和定位,与咱们对机器学习平台的需求不谋而合:为用户提供端到端的一站式的服务,帮助他们脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。鉴于此,美团配送的一站式机器学习平台应运而生。网络
美团配送机器学习平台的演进过程能够分为两个阶段:并发
初始阶段,你们对机器学习平台要发展成什么样子并不明确,不少事情也想不清楚。可是为了支撑业务的发展,必须快速上线、快速试错。所以,在此阶段,各个业务线独自建设本身的机器学习工具集,按照各自业务的特殊需求进行各自迭代,快速支持机器学习算法上线落地应用到具体的业务场景,也就是咱们所熟知的“烟囱模式”。此种模式各自为战,很是灵活,可以快速支持业务的个性化需求,为业务抢占市场赢得了先机。但随着业务规模的逐渐扩大,这种“烟囱模式”的缺点就凸显了出来,主要表如今如下两个方面:框架
为了不各部门重复造轮子,提高研发的效率,同时统一业务指标和特征的计算口径,标准化配送侧的数据体系,美团配送的研发团队组建了一个算法工程小组,专门规整各业务线的机器学习工具集,但愿建设一个统一的机器学习平台,其需求主要包括如下几个方面:机器学习
平台化阶段,咱们对美团配送机器学习平台的目标定位是:一站式机器学习平台,给算法同窗提供一站式服务,覆盖算法同窗调研、开发、上线、评估算法效果的全流程,包括:数据处理、特征生产、样本生成、模型训练、模型评估、模型发布、在线预测和效果评估。为了响应这个目标,你们还给平台取了个大胆的名字——Turing,中文名称为图灵平台,虽然有点“胆大包天”,可是也算是对咱们团队的一种鞭策。函数
1)首先在获取数据阶段,支持在线和离线两个层面的处理,分别经过采样、过滤、归一化、标准化等手段生产实时和离线特征,并推送到在线的特征库,供线上服务使用。高并发
2)模型训练阶段,支持分类、回归、聚类、深度学习等多种模型,并支持自定义Loss损失函数。
3)模型评估阶段,支持多种评估指标,如AUC、MSE、MAE、F1等。
4)模型发布阶段,提供一键部署功能,支持本地和远程两种模式,分别对应将模型部署在业务服务本地和部署在专用的在线预测集群。
5)在线预测阶段,支持AB实验,灵活的灰度发布放量,并经过统一埋点日志实现AB实验效果评估。
离线训练平台的目标是:搭建可视化训练平台,屏蔽多个训练框架的差别,下降算法RD的接入门槛。
为了下降算法RD进入机器学习领域的门槛,咱们开发了带有可视化界面的离线训练平台,经过各类组件的拖拉拽组合成DAG图,从而生成一个完整的机器学习训练任务。
目前支持的组件大体分为:输入、输出、特征预处理、数据集加工、机器学习模型、深度学习模型等几大类,每种类别都开发了多个不一样的组件,分别支持不一样的应用场景。同时为了避免失去灵活性,咱们也花费了一番心思,提供了多种诸如自定义参数、自动调参、自定义Loss函数等功能,尽可能知足各个不一样业务方向算法同窗各类灵活性的需求。
咱们的离线训练平台在产出模型时,除了产出模型文件以外,还产出了一个MLDL(Machine Learning Definition Language)文件,将各模型的全部预处理模块信息写入MLDL文件中,与模型保存在同一目录中。当模型发布时,模型文件连带MLDL文件做为一个总体共同发布到线上。在线计算时,先自动执行MLDL中的预处理逻辑,而后再执行模型计算逻辑。经过MLDL打通了离线训练和在线预测,贯穿整个机器学习平台,使得线下和线上使用同一套特征预处理框架代码,保证了线下和线上处理的一致性。
在发布模型时,咱们还提供了模型绑定特征功能,支持用户把特征和模型的入参关联起来,方便在线预测时模型自动获取特征,极大地简化了算法RD构造模型输入时获取特征的工做量。
前面介绍了,咱们的图灵平台集成了Spark ML、XGBoost、TensorFlow三种底层训练框架,基于此,咱们的训练平台产出的机器学习模型种类也很是多,简单的有LR、SVM,树模型有GBDT、RF、XGB等,深度学习模型有RNN、DNN、LSTM、DeepFM等等。而咱们的模型管理平台的目标就是提供统一的模型注册、发现、部署、切换、降级等解决方案,并为机器学习和深度学习模型提供高可用的线上预测服务。
模型管理平台支持本地和远程两种部署模式:
对于超大规模模型,单机没法装载,须要对模型进行Sharding。鉴于美团配送的业务特性,能够按照配送城市/区域进行分区训练,每一个城市或区域产出一个小模型,多个分区模型分散部署到多个节点上,解决单节点没法装载大模型的问题。分区模型要求咱们必须提供模型的路由功能,以便业务方精准地找到部署相应分区模型的节点。
同时,模型管理平台还收集各个服务节点的心跳上报信息,维护模型的状态和版本切换,确保全部节点上模型版本一致。
配送线上业务天天会记录许多骑手、商家、用户等维度的数据,这些数据通过ETL处理获得所谓的离线特征,算法同窗利用这些离线特征训练模型,并在线上利用这些特征进行模型在线预测。离线特征平台就是将存放在Hive表中的离线特征数据生产到线上,对外提供在线获取离线特征的服务能力,支撑配送各个业务高并发及算法快速迭代。
最简单的方案,直接把离线特征存储到DB中,线上服务直接读取DB获取特征Value。读取DB是个很重的操做,这种方案明显不能知足互联网大并发的场景,直接被Pass掉。
第二种方案,把各个离线特征做为K-V结构存储到Redis中,线上服务直接根据特征Key读取Redis获取特征Value。此方案利用了Redis内存K-V数据库的高性能,乍一看去,好像能够知足业务的需求,但实际使用时,也存在着严重的性能问题。
典型的业务场景:好比咱们要预测20个商家的配送时长,假设每一个商家须要100个特征,则咱们就须要20*100=2000个特征进行模型计算,2000个KV。若是直接单个获取,知足不了业务方的性能需求;若是使用Redis提供的批量接口Mget,若是每次获取100个KV,则须要20次Mget。缓存mget的耗时TP99约5ms,20次Mget,TP99接近100ms,也没法知足业务方的性能需求(上游服务超时时间约50ms)。
所以,咱们须要对离线特征从存储和获取进行优化。咱们提出了特征组的概念,同一维度的特征,按照特征组的结构进行聚合成一个KV,大大减小了Key的数目;而且提供了相对完善的管理功能,支持对特征组的动态调整(组装、拆分等)。
相比于传统配送,即时配送不管是在位置信息、骑手负载,仍是在当前路网状况,以及商家出餐状况等方面都是瞬息变化的,实时性要求很是高。为了让机器学习算法可以即时的在线上生效,咱们须要实时地收集线上各类业务数据,进行计算,提炼成算法所须要的特征,并实时更新。
AB实验并非个新兴的概念,自2000年谷歌工程师将这一方法应用在互联网产品以来,AB实验在国内外愈来愈普及,已成为互联网产品运营精细度的重要体现。简单来讲,AB实验在产品优化中的应用方法是:在产品正式迭代发版以前,为同一个目标制定两个(或以上)方案,将用户流量对应分红几组,在保证每组用户特征相同的前提下,让用户分别看到不一样的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。
互联网领域常见的AB实验,大可能是面向C端用户进行流量选择,好比基于注册用户的UID或者用户的设备标识(移动用户IMEI号/PC用户Cookie)进行随机或者哈希计算后分流。此类方案普遍应用于搜索、推荐、广告等领域,体现出千人千面个性化的特色。此类方案的特色是实现简单,假设请求独立同分布,流量之间独立决策,互不干扰。此类AB实验之因此可以这样作是由于:C端流量比较大,样本足够多,并且不一样用户之间没有相互干扰,只要分流时足够随机,即基本能够保证请求独立同分布。
即时配送领域的AB实验是围绕用户、商户、骑手三者进行,用户/商户/骑手之间再也不是相互独立的,而是相互影响相互制约的。针对此类场景,现有的分流方案会形成不一样策略的互相干扰,没法有效地评估各个流量各个策略的优劣。
鉴于上述的问题,咱们将配送侧的AB实验分为三个阶段:事前的AA分组,事中的AB分流,过后的效果评估。
因为即时配送的场景较为特殊,好比按照配送区域或城市进行AB实验时,因为样本空间有限,很难找到没有差别的对照组和实验组,所以咱们设计了一种分时间片AB对照的分流方法:支持按天、小时、分钟进行分片,多个时间片进行轮转切换,在不一样区域、不一样时间片之间,对不一样的策略进行交替切换进行AB分流,最大限度减小线下因素的影响,确保实验科学公正。
目前图灵平台支撑了美团配送、小象、LBS平台等BU的算法离线训练、在线预测、AB实验等,使算法RD更加关注算法策略自己的迭代优化,显著提升了算法RD的效率。将来咱们会在如下方面继续深刻探索:
1)增强深度学习的建设
2)在线预测平台化,进一步解耦算法和工程