图灵平台是美团配送技术团队搭建的一站式算法平台,图灵平台中的在线服务框架——图灵OS主要聚焦于机器学习和深度学习在线服务模块,为模型和算法策略的线上部署和计算提供统一的平台化解决方案,可以有效提高算法迭代效率。本文将与你们探讨图灵OS在建设和实践中的思考和优化思路,但愿能对你们有所帮助或者启发。
AI能够说是目前互联网行业煊赫一时的“明星”。不管是老牌巨头,仍是流量新贵,都在大力研发AI技术,为自家的业务赋能。美团很早就开始探索不一样的机器学习模型在各类业务场景的应用,从最开始的线性模型、树模型,再到近几年的深度神经网络、BERT、DQN等,并成功应用于搜索、推荐、广告、配送等业务,也取得了较好的效果与产出。html
美团配送技术部建设的算法平台——Turing(下称图灵平台),旨在提供一站式的服务,覆盖数据预处理、特征生成、模型训练、模型评估、模型部署、在线预测、AB实验、算法效果评估的全流程,下降了算法工程师的使用门槛,帮助他们脱离繁琐的工程化开发,把有限的精力聚焦于业务和算法逻辑的迭代优化。具体的实践,你们可参考美团技术团队此前推送的一篇技术博客《一站式机器学习平台建设实践》。前端
随着机器学习平台、特征平台、AB平台等陆续完成,配送技术团队发如今线预测部分逐渐成为算法开发和迭代的瓶颈,为此,咱们开始启动图灵在线服务框架的总体研发。本文将与你们详细探讨图灵平台中的在线服务框架——图灵OS(Online Serving)的设计和实践,但愿对你们可以有所帮助或者启发。算法
随着图灵平台逐渐成熟,包括美团配送在内,已经有超过18个业务方接入了图灵平台,总体概况大体以下:共接入10+个BU(业务单元),100%覆盖美团配送核心业务场景,支持500+个在线模型、2500+个特征、180+个算法策略,天天支持百亿次的在线预测。经过图灵平台赋能,算法迭代周期由天级别降至小时级别,大幅提高了配送算法的迭代效率。后端
图灵平台是一站式算法平台,整体架构以下图1所示,底层依托于Kubernetes和Docker,实现了对CPU/GPU等资源的统一调度和管理,集成了Spark ML、XGBoost、TensorFlow等机器学习/深度学习框架,包含特征生产、模型训练、模型部署、在线推理、AB实验等一站式平台功能,支撑了美团配送及闪购、骑行、买菜、地图等事业部的调度、时间预估、配送范围、搜索、推荐等各种AI应用。图灵平台主要包括机器学习平台、特征平台、图灵在线服务(Online Serving)、AB实验平台四大功能。缓存
图灵OS主要指图灵平台的在线服务模块,聚焦于机器学习/深度学习在线服务,目标是让离线训练好的模型可以快速上线,有效提高各业务部门的算法迭代效率,快速拿到结果,对业务产生价值。如下将重点介绍图灵在线服务(Turing Online Serving)。安全
在美团配送业务发展初期,为了支撑业务的快速发展,快速支持算法上线、快速试错,各个业务线的工程方独自开发在线预测的一系列功能,也就是咱们所熟知的“烟囱模式”。此种模式各自为战,很是灵活,可以快速支持业务的个性化需求。但随着业务规模的逐渐扩大,这种“烟囱模式”的缺点就凸显了出来,主要表如今如下三个方面:服务器
“烟囱模式”在业务发展早期作出了不可磨灭的贡献,但随着业务体量的增加,这种方式的边际收益逐渐下降到了不可忍受的程度,亟需一个统一的在线服务框架来进行改变。网络
目前,市面上大部分主流开源的机器学习在线服务框架仅提供了模型预测功能,不包含预处理和后处理模块,以下图2所示。架构
好比谷歌TensorFlow Serving是一个用于机器学习模型Serving的高性能开源在线服务框架,提供gRPC/HTTP接口供外部调用,支持模型热更新与自动模型版本管理,同时解决了资源调度、服务发现等痛点,对外提供稳定可靠的服务。可是TensorFlow Serving不包含预处理和后处理模块,须要将业务工程方将输入预处理成张量传递给TensorFlow Serving进行模型计算,而后再对模型计算结果进行后处理。预处理和后处理的逻辑对于算法策略很是重要,迭代也比较频繁,这部分跟模型结合比较密切,更适合由算法同窗负责,若是由工程方实现,则工程同窗只是单纯的实现算法同窗设计的逻辑,耦合过于严重,迭代效率低,并且还容易致使设计和具体实现不一致,引起线上事故。并发
为了解决上述问题,为用户提供更方便易用的算法平台,图灵平台建设了统一的在线服务框架,经过整合模型计算和预处理/后处理等模块,以算法版本的形式进行呈现,并进行迭代,免去了与算法与工程之间复杂的交互。
这里咱们对算法定义进行了扩展,本文中的算法(也称算法策略)能够理解成一个组合函数:y=f1(x)+fi(x)+…+fn(x),其中fi(x)能够是规则计算、模型计算(机器学习和深度学习)或者非模型算法计算(好比遗传算法、运筹优化等)。该组合函数中任何组合因子的调整(好比模型输入输出变动、模型类型变动或者规则调整)均可看做是一次算法版本的迭代。算法迭代是算法开发-上线-效果评估-改进的循环过程。Turing OS的目标就是优化算法的迭代效率。
为了解决“烟囱模式”开发过程当中的重复造轮子和平台化能力缺失的问题,咱们着手搭建了图灵OS 1.0框架。该框架整合了模型计算和预处理、后处理模块,把繁杂的特征获取和预处理、模型计算、后处理等逻辑都封装在图灵在线服务框架中以SDK的形式对外提供。算法工程师基于图灵在线服务SDK开发个性化的预处理和后处理逻辑;业务工程集成图灵在线服务SDK和算法包,调用SDK提供的接口进行模型计算和算法计算。
经过图灵OS 1.0,咱们解决了各业务方独自开发、独自迭代以及重复造轮子的问题,大大简化了算法工程师和工程研发人员的开发工做,并且工程是经过图灵在线服务框架间接调用算法预处理和模型计算,不直接跟算法进行交互,必定程度上也减轻了工程和算法的耦合问题。
如图3所示,该阶段的图灵在线服务框架集成了如下功能:
图灵OS 1.0解决了各业务线重复造轮子、特征混乱和平台能力缺失等问题,经过提供一站式平台化服务,支撑了美团配送各业务线大规模算法在线预测的场景和高性能计算的需求;使算法同窗更加关注算法策略自己的迭代优化,提升了算法迭代的效率。可是对于前述的工程、算法、平台三方耦合问题,尚未很好的解决,主要体如今:
基于上述几点可知,算法、工程和图灵平台三方高耦合,致使各自都存在不少痛点,如图4所示。这些问题严重影响了算法迭代效率,算法迭代上线测试工期长,效率低:
所以,必须将算法、工程和图灵平台更好的解耦,既知足算法快速迭代的需求,又能知足业务工程端稳定性的诉求,合做双赢。
针对图灵OS 1.0框架中算法、工程和图灵平台三方高耦合的痛点,咱们研发了图灵OS 2.0框架,目标是解决算法、工程、图灵平台三者耦合的问题,让算法迭代无需依赖工程发版,图灵平台新功能上线无需业务工程升级SDK,进一步提高算法迭代效率和工程开发效率。
围绕解耦算法、工程和图灵平台的目标,在图灵OS 2.0框架中,咱们设计研发了算法包插件化热部署框架、算法数据通道和算法编排框架等功能,支持算法自助迭代上线。同时设计研发了以沙箱引流、实时回放、性能压测和Debug测试等功能为一体的算法验证平台,保证了算法策略的高性能、正确性及稳定性。图灵OS 2.0框架解耦了算法、工程和图灵平台,实现了算法与工程迭代的各自闭环。大部分算法迭代的整个流程无需工程研发人员、测试工程师的参与,算法工程师在小时级便可完成算法策略的迭代上线;经过图灵OS 2.0的赋能,算法的研发迭代效率获得了大幅提高。
图灵OS 2.0具体功能特性以下:
如下将对上述几个功能特性进行展开介绍,看看图灵OS 2.0是如何解决算法、工程和图灵平台三方耦合痛点的。
为了解决业务工程和图灵平台的耦合痛点,即图灵在线服务SDK部署在业务工程中,SDK版本收敛难度大的问题,咱们主要从SDK轻量化、简单易接入、稳定可扩展、安全可靠等几个方面考虑对图灵在线服务SDK进行了拆分和改造:
经过对图灵OS SDK进行标准化轻量化改造,咱们解决了业务工程和图灵平台之间耦合的痛点。经过对图灵OS进行服务化改造,解决了算法和业务工程之间耦合的痛点。可是算法和图灵平台之间耦合的痛点依然存在且痛点增长:算法迭代上线依赖图灵OS服务发版,并未能达到三方解耦的目标。
为了解决算法与图灵平台之间的耦合痛点,进一步提高算法策略的迭代效率,咱们下一步的设计思路是算法插件化,图灵OS容器化:将算法包做为一个插件,部署到图灵OS中,算法包发版不要求图灵OS发版,甚至不须要重启图灵OS,如图7所示。
经过上述手段,咱们解决了算法、工程和图灵平台三者在发版迭代时的耦合问题。可是除了上述的耦合以外,还有一些复杂算法场景,算法与业务工程依然存在耦合,主要体如今算法依赖业务工程的如下两点数据:
为了解决上述两点,咱们提出了数据通道(Data Channel)的概念,使算法自己具有自主获取数据的能力。在算法内部算法可经过图灵OS提供注解的方式支持数据通道,算法与业务工程的交互接口仅需传递一些关键参数及上下文数据便可,算法内部自行组装该数据通道所需参数。通过数据通道化的改造,算法接口进一步简化,算法与工程耦合度进一步下降,算法内部调用算法的问题,咱们可经过下面介绍的算法编排来进行解决。
一个完整的算法计算流程包括算法计算部分,以及针对输入的预处理逻辑和计算结果的后处理逻辑等,算法计算能够是N次规则计算,N次模型计算(机器学习和深度学习等),或者非模型的算法计算(好比遗传算法、运筹优化等),或者多种类型算法组合。咱们把这种具备独立输入输出的计算逻辑单元抽象为一个算子,算子可编排、可复用,通用的两类算子以下:
多个算子之间经过串行或者并行的方式组合为一个有向无环图(DAG),造成了算子编排,当前咱们有两种方式实现算子编排:
从算法工程师的视角来看,图灵OS以搭积木的方式提供服务,经过组合一个个独立的子功能及算子,以标准的方式串并联,从而造成知足各式各样需求的在线系统。
在该架构下,算法的工做主要有以下三部分:1)算法工程师进行业务流程的抽象与建模;2)算法工程师进行独立的算子开发与测试;3)算法工程师基于业务流程抽象进行算子的编排与组合。算子编排为业务功能上线和算法迭代进一步赋能,业务算法迭代效率进一步提高。
上文介绍了图灵OS做为一个容器可部署多个算法包的多个版本,并支持算法包热部署。图灵OS经过插件化热部署以及编排等功能,解耦了业务工程、算法以及图灵的三方耦合,极大地提高了算法的迭代效率。为了进一步知足业务的要求,咱们提供了两种图灵OS部署集成模式:Standalone模式和Embedded模式。
Standalone(独立模式)
Standalone模式下,图灵OS是独立于业务服务单独部署的,业务服务经过轻量级SDK调用算法,图灵轻量级SDK内部封装了图灵OS的自定义路由,以及Thrift-RPC调用图灵OS服务的逻辑。
Embedded(内嵌模式)
在某些高并发及高性能要求的复杂场景中,对咱们图灵OS的集成模式及性能提出了更高的要求。在独立部署模式下,业务工程每一次算法计算都有RPC的消耗,所以咱们实现了图灵OS新的集成模式——Embedded。在Embedded模式下,咱们对外提供图灵OS框架代码包,业务方在本身的工程服务中集成图灵OS框架包,业务服务同时也做为一个图灵OS容器,仍是经过轻量级SDK调用算法,在业务服务本地进行算法计算。内嵌图灵OS的特色以下:
在算法包插件部署时,之内嵌模式集成的业务工程将做为容器装载相应的算法包,路由到本地进行算法计算,以下图9所示。
Standalone和Embedded模式各有利弊,谁都没有绝对的优点,使用时须要根据具体的业务场景进行选择。两种模式的对好比下:
部署模式 | 优势 | 缺点 | 适用场景 |
---|---|---|---|
Standalone | 耦合度更低,业务方只依赖图灵轻量级SDK | 须要搭建图灵OS集群,占用机器资源;有RPC调用开销 | 适合大批量调用,须要分布式多机异步并行计算的业务场景 |
Embedded | 复用业务方机器,资源利用率高;少了RPC调用,性能高 | 没法充分发挥多机异步分布式并行,只能单机并行 | 适合小批量调用,对单次调用RT性能要求较高的业务场景 |
在图灵OS支持算法插件热部署以后,算法迭代效率相比以前大幅提高,算法工程师的上线自由度也获得大幅增长,无需通过业务工程和测试的排期开发和测试;可是也引入了新的问题:
当时的可选方案是算法策略先部署上线,灰度切小流量,而后再分析统一埋点日志评测算法效果。该方案的缺陷是没法在上线前对算法效果进行评测,问题发现时间过晚。若是灰度的功能有问题,会对线上的业务形成影响,产生Bad Case。针对上述上线前校验环节的各个问题,咱们研发了图灵沙箱,在不干扰线上业务稳定的前提下,实现了算法的全链路仿真实验。
图灵沙箱是一个与图灵OS服务物理隔离但运行环境彻底一致的服务,流量通过沙箱不会对线上业务形成任何影响。以下图10所示,线上流量引流到线上环境沙箱,图灵OS和图灵沙箱的各环境配置及数据都一致(版本、参数、特征、模型等)。算法新版本(以下图10中算法包1的版本V3)先部署沙箱,引流验证算法正确性,同时还能够在沙箱内引流进行算法性能压测。图灵沙箱做为算法验证流程的自动化工具,提高了算法测试效率,进一步提高了算法版本的迭代效率。
为了方便分析算法效果及异常时排查问题,咱们须要把算法计算过程当中的输入、输出、所用的特征以及模型等数据都记录下来,以便还原现场。可是算法计算过程当中会产生大量的数据,对存储和记录带来了挑战:
为了更好地记录和存储这些重要数据,图灵OS设计研发了统一回放平台,针对上述问题给出了解决方案,以下图11所示:
经过图灵沙箱和统一回放,图灵OS具有了快速验证算法数据正确性的能力,可是在算法计算性能分析方面缺乏自动化工具。图灵OS经过整合公司全链路压测系统Quake(Quake介绍详见《全链路压测平台(Quake)在美团中的实践》)的能力,复用统一回放平台采集的流量数据来构造请求,对部署了新版算法包的图灵OS或图灵沙箱进行压力测试。
压测过程当中记录算法在不一样QPS场景下的性能表现,主要包括CPU和内存等应用指标,TP时延和超时率等响应耗时数据,并与线上真实性能、历史压测数据和服务承诺的SLA进行对比分析给出压测报告及优化指南,存在明显性能问题时将阻断算法包的上线流程。图灵OS也接入了美团内部性能诊断优化平台Scalpel,能够生成压测过程当中线程堆栈和性能热点的分析报告,辅助用户快速定位性能瓶颈点,为具体优化方向提供参考。
经过图灵OS的算法插件化改造和动态热部署的能力,咱们解耦了算法、工程和图灵平台,实现了算法与工程迭代的各自闭环,提高了研发效率,算法迭代上线周期大幅缩短:
经过使用图灵OS提供的沙箱引流验证和性能压测诊断等自动化工具,算法策略迭代的效率进一步提高,算法迭代上线周期大幅缩短,由天级别提高至小时级别。算法工程师自主开发,而后部署图灵OS进行自测调试,部署沙箱进行引流测试,经过压测平台评估效果性能,最后自主部署上线,整个流程无需工程研发人员及图灵工程师的参与,达到自动运维的目标;同时经过各类手段保证算法策略的执行性能及图灵OS的运行稳定性。
图灵OS(即图灵在线服务框架2.0)建设已有大半年的时间,总体概况大体以下:当前已搭建20+个图灵OS集群,已接入25+个算法包、50+个算法,每个月算法包部署上线次数200+次;天天支持百亿次算法策略计算。经过图灵OS赋能,大部分算法迭代整个流程无需工程研发人员、测试工程师的参与,算法工程师在小时级便可完成算法策略的迭代上线。
当前,一个图灵OS集群可承载单业务线的多个算法包或单个部门的多个子业务线算法包,算法包和图灵OS集群可动态关联及动态部署,图灵OS同时支持业务线级别和算法包级别的物理资源隔离。为了方便业务方的使用,咱们提供了完善的接入文档和视频课程。除了图灵平台方搭建图灵OS集群以外,任何一个业务方基本上能够在1小时内构建出本身的图灵OS服务。咱们同时提供了最佳实践文档与性能调优配置等,使得业务方在没有指导的状况下能够自行解决大部分问题。目前咱们正在建设自动化运维工具,进一步下降了图灵OS的接入门槛和运维成本。
固然,确定没有完美的算法平台及算法在线服务框架,图灵OS还有很大的进步空间。随着咱们对机器学习和深度学习线上服务的持续探索,会有愈来愈多的应用场景须要图灵OS支持,将来咱们会在如下方面持续进行建设:
永波、季尚、艳伟、非凡等,均来自美团配送技术部算法平台组,负责图灵平台建设等相关工做。
若是你想近距离感觉一下图灵平台及图灵OS的魅力,欢迎加入咱们。美团配送技术团队诚招机器学习平台、算法工程方向等的技术专家和架构师,共同面对复杂业务和高并发流量的挑战,共建全行业最大的即时配送网络和平台,迎接美团配送业务全面智能化的时代。感兴趣同窗可投递简历至:houyongbo@meituan.com(邮件标题注明:美团配送技术团队)。
阅读美团技术团队更多技术文章合集
前端 | 算法 | 后端 | 数据 | 安全 | 运维 | iOS | Android | 测试
| 在公众号菜单栏对话框回复【2020年货】、【2019年货】、【2018年货】、【2017年货】等关键词,可查看美团技术团队历年技术文章合集。
| 本文系美团技术团队出品,著做权归属美团。欢迎出于分享和交流等非商业目的转载或使用本文内容,敬请注明“内容转载自美团技术团队”。本文未经许可,不得进行商业性转载或者使用。任何商用行为,请发送邮件至tech@meituan.com申请受权。