本文根据美团配送资深技术专家郑艳伟在2019SACC(中国系统架构师大会)上的演讲内容整理而成,主要介绍了美团配送技术团队在建设一站式机器学习平台过程中的经验总结和探索,希望对从事此领域的同学有所帮助。
2019年7月份,美团外卖的日订单量已经突破3000万单,占有了相对领先的市场份额。围绕着用户、商户、骑手,美团配送构建了全球领先的即时配送网络,建设了行业领先的美团智能配送系统,形成了全球规模最大的外卖配送平台。
如何让配送网络运行效率更高,用户体验更好,是一项非常有难度的挑战。我们需要解决大量复杂的机器学习和运筹优化等问题,包括ETA预测、智能调度、地图优化、动态定价、情景感知、智能运营等多个领域。同时,我们还需要在体验、效率和成本之间达到平衡。
如果要解决上述的机器学习问题,就需要有一个功能强大且易用的机器学习平台来辅助算法研发人员,帮助大家脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。
目前业界比较优秀的机器学习平台有很多,既有大公司研发的商用产品,如微软的Azure、亚马逊的SageMaker、阿里的PAI平台、百度的PaddlePaddle以及腾讯的TI平台,也有很多开源的产品,如加州大学伯克利分校的Caffe、Google的TensorFlow、Facebook的PyTorch以及Apache的SparkMLlib等。而开源平台大都是机器学习或者深度学习基础计算框架,聚焦于训练机器学习或深度学习模型;公司的商用产品则是基于基础的机器学习和深度学习计算框架进行二次开发,提供一站式的生态化的服务,为用户提供从数据预处理、模型训练、模型评估、模型在线预测的全流程开发和部署支持,以期降低算法同学的使用门槛。
公司级的一站式机器学习平台的目标和定位,与我们对机器学习平台的需求不谋而合:为用户提供端到端的一站式的服务,帮助他们脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。鉴于此,美团配送的一站式机器学习平台应运而生。
美团配送机器学习平台的演进过程可以分为两个阶段:
初始阶段,大家对机器学习平台要发展成什么样子并不明确,很多事情也想不清楚。但是为了支撑业务的发展,必须快速上线、快速试错。因此,在此阶段,各个业务线独自建设自己的机器学习工具集,按照各自业务的特殊需求进行各自迭代,快速支持机器学习算法上线落地应用到具体的业务场景,也就是我们所熟知的“烟囱模式”。此种模式各自为战,非常灵活,能够快速支持业务的个性化需求,为业务抢占市场赢得了先机。但随着业务规模的逐渐扩大,这种“烟囱模式”的缺点就凸显了出来,主要表现在以下两个方面:
为了避免各部门重复造轮子,提升研发的效率,同时统一业务指标和特征的计算口径,标准化配送侧的数据体系,美团配送的研发团队组建了一个算法工程小组,专门规整各业务线的机器学习工具集,希望建设一个统一的机器学习平台,其需求主要包括以下几个方面:
平台化阶段,我们对美团配送机器学习平台的目标定位是:一站式机器学习平台,给算法同学提供一站式服务,覆盖算法同学调研、开发、上线、评估算法效果的全流程,包括:数据处理、特征生产、样本生成、模型训练、模型评估、模型发布、在线预测和效果评估。为了响应这个目标,大家还给平台取了个大胆的名字——Turing,中文名称为图灵平台,虽然有点“胆大包天”,但是也算是对我们团队的一种鞭策。
1)首先在获取数据阶段,支持在线和离线两个层面的处理,分别通过采样、过滤、归一化、标准化等手段生产实时和离线特征,并推送到在线的特征库,供线上服务使用。
2)模型训练阶段,支持分类、回归、聚类、深度学习等多种模型,并支持自定义Loss损失函数。
3)模型评估阶段,支持多种评估指标,如AUC、MSE、MAE、F1等。
4)模型发布阶段,提供一键部署功能,支持本地和远程两种模式,分别对应将模型部署在业务服务本地和部署在专用的在线预测集群。
5)在线预测阶段,支持AB实验,灵活的灰度发布放量,并通过统一埋点日志实现AB实验效果评估。
离线训练平台的目标是:搭建可视化训练平台,屏蔽多个训练框架的差异,降低算法RD的接入门槛。
为了降低算法RD进入机器学习领域的门槛,我们开发了带有可视化界面的离线训练平台,通过各种组件的拖拉拽组合成DAG图,从而生成一个完整的机器学习训练任务。
目前支持的组件大致分为:输入、输出、特征预处理、数据集加工、机器学习模型、深度学习模型等几大类,每种类别都开发了多个不同的组件,分别支持不同的应用场景。同时为了不失去灵活性,我们也花费了一番心思,提供了多种诸如自定义参数、自动调参、自定义Loss函数等功能,尽量满足各个不同业务方向算法同学各种灵活性的需求。
我们的离线训练平台在产出模型时,除了产出模型文件之外,还产出了一个MLDL(MachineLearningDefinitionLanguage)文件,将各模型的所有预处理模块信息写入MLDL文件中,与模型保存在同一目录中。当模型发布时,模型文件连带MLDL文件作为一个整体共同发布到线上。在线计算时,先自动执行MLDL中的预处理逻辑,然后再执行模型计算逻辑。通过MLDL打通了离线训练和在线预测,贯穿整个机器学习平台,使得线下和线上使用同一套特征预处理框架代码,保证了线下和线上处理的一致性。
在发布模型时,我们还提供了模型绑定特征功能,支持用户把特征和模型的入参关联起来,方便在线预测时模型自动获取特征,极大地简化了算法RD构造模型输入时获取特征的工作量。
前面介绍了,我们的图灵平台集成了SparkML、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数据库的高性能,乍一看去,好像可以满足业务的需求,但实际使用时,也存在着严重的性能问题。
因此,我们需要对离线特征从存储和获取进行优化。我们提出了特征组的概念,同一维度的特征,按照特征组的结构进行聚合成一个KV,大大减少了Key的数目;并且提供了相对完善的管理功能,支持对特征组的动态调整(组装、拆分等)。
相比于传统配送,即时配送无论是在位置信息、骑手负载,还是在当前路网情况,以及商家出餐情况等方面都是瞬息变化的,实时性要求非常高。为了让机器学习算法能够即时的在线上生效,我们需要实时地收集线上各种业务数据,进行计算,提炼成算法所需要的特征,并实时更新。
AB实验并不是个新兴的概念,自2000年谷歌工程师将这一方法应用在互联网产品以来,AB实验在国内外越来越普及,已成为互联网产品运营精细度的重要体现。简单来说,AB实验在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户流量对应分成几组,在保证每组用户特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。
即时配送领域的AB实验是围绕用户、商户、骑手三者进行,用户/商户/骑手之间不再是相互独立的,而是相互影响相互制约的。针对此类场景,现有的分流方案会造成不同策略的互相干扰,无法有效地评估各个流量各个策略的优劣。
鉴于上述的问题,我们将配送侧的AB实验分为三个阶段:事前的AA分组,事中的AB分流,事后的效果评估。
1)加强深度学习的建设。
2)在线预测平台化,进一步解耦算法和工程。
艳伟,美团配送技术团队资深技术专家。
如果你想近距离感受一下图灵平台的魅力,欢迎加入我们。美团配送技术团队诚招调度履约方向、LBS方向、机器学习平台、算法工程方向的技术专家和架构师,共建全行业最大的单一即时配送网络和平台,共同面对复杂业务和高并发流量的挑战,迎接配送业务全面智能化的时代。感兴趣同学可投递简历至:tech@meituan.com(邮件标题注明:美团配送技术团队)。