本文來自美團(tuán)技術(shù)研究院
AI是目前互聯(lián)網(wǎng)行業(yè)炙手可熱的“明星”,無論是老牌巨頭,還是流量新貴,都在大力研發(fā)AI技術(shù),為自家的業(yè)務(wù)賦能。配送作為外賣平臺閉環(huán)鏈條上重要的一環(huán),配送效率和用戶體驗是配送業(yè)務(wù)的核心競爭力。隨著單量上漲、騎手增多、配送場景復(fù)雜化,配送場景的各種算法在更快(算法需要快速迭代、快速上線)、更好(業(yè)務(wù)越來越依賴機(jī)器學(xué)習(xí)算法產(chǎn)生正向的效果)、更準(zhǔn)(算法的各種預(yù)測如預(yù)計送達(dá)時間等,需要準(zhǔn)確逼近真實值)的目標(biāo)下也面臨日益增大的挑戰(zhàn)。算法從調(diào)研到最終上線發(fā)揮作用,需要有一系列的工程開發(fā)和對接,由此引發(fā)了新的問題:如何界定算法和工程的邊界,各司其職,各善其長?如何提升算法迭代上線的速度和效率?如何快速準(zhǔn)確評估算法的效果?本文將為大家分享美團(tuán)配送技術(shù)團(tuán)隊在建設(shè)一站式機(jī)器學(xué)習(xí)平臺過程中的一些經(jīng)驗和探索,希望對大家能有所幫助或者啟發(fā)。
1. 業(yè)務(wù)背景
2019年7月份,美團(tuán)外賣的日訂單量已經(jīng)突破3000萬單,占有了相對領(lǐng)先的市場份額。圍繞著用戶、商戶、騎手,美團(tuán)配送構(gòu)建了全球領(lǐng)先的即時配送網(wǎng)絡(luò),建設(shè)了行業(yè)領(lǐng)先的美團(tuán)智能配送系統(tǒng),形成了全球規(guī)模最大的外賣配送平臺。

如何讓配送網(wǎng)絡(luò)運行效率更高,用戶體驗更好,是一項非常有難度的挑戰(zhàn)。我們需要解決大量復(fù)雜的機(jī)器學(xué)習(xí)和運籌優(yōu)化等問題,包括ETA預(yù)測、智能調(diào)度、地圖優(yōu)化、動態(tài)定價、情景感知、智能運營等多個領(lǐng)域。同時,我們還需要在體驗、效率和成本之間達(dá)到平衡。

2. 美團(tuán)配送機(jī)器學(xué)習(xí)平臺演進(jìn)過程
2.1 為什么建設(shè)一站式機(jī)器學(xué)習(xí)平臺
如果要解決上述的機(jī)器學(xué)習(xí)問題,就需要有一個功能強(qiáng)大且易用的機(jī)器學(xué)習(xí)平臺來輔助算法研發(fā)人員,幫助大家脫離繁瑣的工程化開發(fā),把有限的精力聚焦于算法策略的迭代上面。目前業(yè)界比較優(yōu)秀的機(jī)器學(xué)習(xí)平臺有很多,既有大公司研發(fā)的商用產(chǎn)品,如微軟的Azure、亞馬遜的SageMaker、阿里的PAI平臺、百度的PaddlePaddle以及騰訊的TI平臺,也有很多開源的產(chǎn)品,如加州大學(xué)伯克利分校的Caffe、Google的TensorFlow、Facebook的PyTorch以及Apache的Spark MLlib等。而開源平臺大都是機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)基礎(chǔ)計算框架,聚焦于訓(xùn)練機(jī)器學(xué)習(xí)或深度學(xué)習(xí)模型;公司的商用產(chǎn)品則是基于基礎(chǔ)的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)計算框架進(jìn)行二次開發(fā),提供一站式的生態(tài)化的服務(wù),為用戶提供從數(shù)據(jù)預(yù)處理、模型訓(xùn)練、模型評估、模型在線預(yù)測的全流程開發(fā)和部署支持,以期降低算法同學(xué)的使用門檻。公司級的一站式機(jī)器學(xué)習(xí)平臺的目標(biāo)和定位,與我們對機(jī)器學(xué)習(xí)平臺的需求不謀而合:為用戶提供端到端的一站式的服務(wù),幫助他們脫離繁瑣的工程化開發(fā),把有限的精力聚焦于算法策略的迭代上面。鑒于此,美團(tuán)配送的一站式機(jī)器學(xué)習(xí)平臺應(yīng)運而生。美團(tuán)配送機(jī)器學(xué)習(xí)平臺的演進(jìn)過程可以分為兩個階段:
- MVP階段:靈活,快速試錯,具備快速迭代能力。
- 平臺化階段:業(yè)務(wù)成指數(shù)級增長,需要機(jī)器學(xué)習(xí)算法的場景越來越多,如何既保證業(yè)務(wù)發(fā)展,又能解決系統(tǒng)可用性、擴(kuò)展性、研發(fā)效率等問題。
2.2 MVP階段
初始階段,大家對機(jī)器學(xué)習(xí)平臺要發(fā)展成什么樣子并不明確,很多事情也想不清楚。但是為了支撐業(yè)務(wù)的發(fā)展,必須快速上線、快速試錯。因此,在此階段,各個業(yè)務(wù)線獨自建設(shè)自己的機(jī)器學(xué)習(xí)工具集,按照各自業(yè)務(wù)的特殊需求進(jìn)行各自迭代,快速支持機(jī)器學(xué)習(xí)算法上線落地應(yīng)用到具體的業(yè)務(wù)場景,也就是我們所熟知的“煙囪模式”。此種模式各自為戰(zhàn),非常靈活,能夠快速支持業(yè)務(wù)的個性化需求,為業(yè)務(wù)搶占市場贏得了先機(jī)。但隨著業(yè)務(wù)規(guī)模的逐漸擴(kuò)大,這種“煙囪模式”的缺點就凸顯了出來,主要表現(xiàn)在以下兩個方面:
- 重復(fù)造輪子:特征工程、模型訓(xùn)練、模型在線預(yù)測都是各自研發(fā),從零做起,算法的迭代效率低下。
- 特征口徑混亂:各個業(yè)務(wù)方重復(fù)開發(fā)特征,相同特征的統(tǒng)計口徑也不一致,導(dǎo)致算法之間難以協(xié)同工作。

2.3 平臺化階段
為了避免各部門重復(fù)造輪子,提升研發(fā)的效率,同時統(tǒng)一業(yè)務(wù)指標(biāo)和特征的計算口徑,標(biāo)準(zhǔn)化配送側(cè)的數(shù)據(jù)體系,美團(tuán)配送的研發(fā)團(tuán)隊組建了一個算法工程小組,專門規(guī)整各業(yè)務(wù)線的機(jī)器學(xué)習(xí)工具集,希望建設(shè)一個統(tǒng)一的機(jī)器學(xué)習(xí)平臺,其需求主要包括以下幾個方面:

- 該平臺底層依托于Hadoop/Yarn進(jìn)行資源調(diào)度管理,集成了Spark ML、XGBoost、TensorFlow三種機(jī)器學(xué)習(xí)框架,并保留了擴(kuò)展性,方便接入其它機(jī)器學(xué)習(xí)框架,如美團(tuán)自研的MLX(超大規(guī)模機(jī)器學(xué)習(xí)平臺,專為搜索、推薦、廣告等排序問題定制,支持百億級特征和流式更新)。
- 通過對Spark ML、XGBoost、TensorFlow機(jī)器學(xué)習(xí)框架的封裝,我們實現(xiàn)了可視化離線訓(xùn)練平臺,通過拖拉拽的方式生成DAG圖,屏蔽多個訓(xùn)練框架的差異,統(tǒng)一模型訓(xùn)練和資源分配,降低了算法RD的接入門檻。
- 模型管理平臺,提供統(tǒng)一的模型注冊、發(fā)現(xiàn)、部署、切換、降級等解決方案,并為機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型實時計算提供高可用在線預(yù)測服務(wù)。
- 離線特征平臺,收集分揀線下日志,計算提煉成算法所需要的特征,并將線下的特征應(yīng)用到線上。
- 實時特征平臺,實時收集線上數(shù)據(jù),計算提煉成算法所需要的特征,并實時推送應(yīng)用到線上。
- 版本管理平臺,管理算法的版本以及算法版本所用的模型、特征和參數(shù)。
- AB實驗平臺,通過科學(xué)的分流和評估方法,更快更好地驗證算法的效果。
3. 圖靈平臺
平臺化階段,我們對美團(tuán)配送機(jī)器學(xué)習(xí)平臺的目標(biāo)定位是:一站式機(jī)器學(xué)習(xí)平臺,給算法同學(xué)提供一站式服務(wù),覆蓋算法同學(xué)調(diào)研、開發(fā)、上線、評估算法效果的全流程,包括:數(shù)據(jù)處理、特征生產(chǎn)、樣本生成、模型訓(xùn)練、模型評估、模型發(fā)布、在線預(yù)測和效果評估。為了響應(yīng)這個目標(biāo),大家還給平臺取了個大膽的名字——Turing,中文名稱為圖靈平臺,雖然有點“膽大包天”,但是也算是對我們團(tuán)隊的一種鞭策。1)首先在獲取數(shù)據(jù)階段,支持在線和離線兩個層面的處理,分別通過采樣、過濾、歸一化、標(biāo)準(zhǔn)化等手段生產(chǎn)實時和離線特征,并推送到在線的特征庫,供線上服務(wù)使用。2)模型訓(xùn)練階段,支持分類、回歸、聚類、深度學(xué)習(xí)等多種模型,并支持自定義Loss損失函數(shù)。3)模型評估階段,支持多種評估指標(biāo),如AUC、MSE、MAE、F1等。4)模型發(fā)布階段,提供一鍵部署功能,支持本地和遠(yuǎn)程兩種模式,分別對應(yīng)將模型部署在業(yè)務(wù)服務(wù)本地和部署在專用的在線預(yù)測集群。5)在線預(yù)測階段,支持AB實驗,靈活的灰度發(fā)布放量,并通過統(tǒng)一埋點日志實現(xiàn)AB實驗效果評估。

3.1 離線訓(xùn)練平臺
離線訓(xùn)練平臺的目標(biāo)是:搭建可視化訓(xùn)練平臺,屏蔽多個訓(xùn)練框架的差異,降低算法RD的接入門檻。為了降低算法RD進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域的門檻,我們開發(fā)了帶有可視化界面的離線訓(xùn)練平臺,通過各種組件的拖拉拽組合成DAG圖,從而生成一個完整的機(jī)器學(xué)習(xí)訓(xùn)練任務(wù)。目前支持的組件大致分為:輸入、輸出、特征預(yù)處理、數(shù)據(jù)集加工、機(jī)器學(xué)習(xí)模型、深度學(xué)習(xí)模型等幾大類,每種類別都開發(fā)了多個不同的組件,分別支持不同的應(yīng)用場景。同時為了不失去靈活性,我們也花費了一番心思,提供了多種諸如自定義參數(shù)、自動調(diào)參、自定義Loss函數(shù)等功能,盡量滿足各個不同業(yè)務(wù)方向算法同學(xué)各種靈活性的需求。

我們的離線訓(xùn)練平臺在產(chǎn)出模型時,除了產(chǎn)出模型文件之外,還產(chǎn)出了一個MLDL(Machine Learning Definition Language)文件,將各模型的所有預(yù)處理模塊信息寫入MLDL文件中,與模型保存在同一目錄中。當(dāng)模型發(fā)布時,模型文件連帶MLDL文件作為一個整體共同發(fā)布到線上。在線計算時,先自動執(zhí)行MLDL中的預(yù)處理邏輯,然后再執(zhí)行模型計算邏輯。通過MLDL打通了離線訓(xùn)練和在線預(yù)測,貫穿整個機(jī)器學(xué)習(xí)平臺,使得線下和線上使用同一套特征預(yù)處理框架代碼,保證了線下和線上處理的一致性。

在發(fā)布模型時,我們還提供了模型綁定特征功能,支持用戶把特征和模型的入?yún)㈥P(guān)聯(lián)起來,方便在線預(yù)測時模型自動獲取特征,極大地簡化了算法RD構(gòu)造模型輸入時獲取特征的工作量。

3.2 模型管理平臺
前面介紹了,我們的圖靈平臺集成了Spark ML、XGBoost、TensorFlow三種底層訓(xùn)練框架,基于此,我們的訓(xùn)練平臺產(chǎn)出的機(jī)器學(xué)習(xí)模型種類也非常多,簡單的有LR、SVM,樹模型有GBDT、RF、XGB等,深度學(xué)習(xí)模型有RNN、DNN、LSTM、DeepFM等等。而我們的模型管理平臺的目標(biāo)就是提供統(tǒng)一的模型注冊、發(fā)現(xiàn)、部署、切換、降級等解決方案,并為機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型提供高可用的線上預(yù)測服務(wù)。

模型管理平臺支持本地和遠(yuǎn)程兩種部署模式:
- 本地:模型和MLDL統(tǒng)一推送到業(yè)務(wù)方服務(wù)節(jié)點上,同時圖靈平臺提供一個Java的Lib包,嵌入到業(yè)務(wù)方應(yīng)用中,業(yè)務(wù)方通過本地接口的方式調(diào)用模型計算。
- 遠(yuǎn)程:圖靈平臺維護(hù)了一個專用的在線計算集群,模型和MLDL統(tǒng)一部署到在線計算集群中,業(yè)務(wù)方應(yīng)用通過RPC接口調(diào)用在線計算服務(wù)進(jìn)行模型計算。


對于超大規(guī)模模型,單機(jī)無法裝載,需要對模型進(jìn)行Sharding。鑒于美團(tuán)配送的業(yè)務(wù)特性,可以按照配送城市/區(qū)域進(jìn)行分區(qū)訓(xùn)練,每個城市或區(qū)域產(chǎn)出一個小模型,多個分區(qū)模型分散部署到多個節(jié)點上,解決單節(jié)點無法裝載大模型的問題。分區(qū)模型要求我們必須提供模型的路由功能,以便業(yè)務(wù)方精準(zhǔn)地找到部署相應(yīng)分區(qū)模型的節(jié)點。
同時,模型管理平臺還收集各個服務(wù)節(jié)點的心跳上報信息,維護(hù)模型的狀態(tài)和版本切換,確保所有節(jié)點上模型版本一致。

3.3 離線特征平臺
配送線上業(yè)務(wù)每天會記錄許多騎手、商家、用戶等維度的數(shù)據(jù),這些數(shù)據(jù)經(jīng)過ETL處理得到所謂的離線特征,算法同學(xué)利用這些離線特征訓(xùn)練模型,并在線上利用這些特征進(jìn)行模型在線預(yù)測。離線特征平臺就是將存放在Hive表中的離線特征數(shù)據(jù)生產(chǎn)到線上,對外提供在線獲取離線特征的服務(wù)能力,支撐配送各個業(yè)務(wù)高并發(fā)及算法快速迭代。

最簡單的方案,直接把離線特征存儲到DB中,線上服務(wù)直接讀取DB獲取特征Value。讀取DB是個很重的操作,這種方案明顯不能滿足互聯(lián)網(wǎng)大并發(fā)的場景,直接被Pass掉。第二種方案,把各個離線特征作為K-V結(jié)構(gòu)存儲到Redis中,線上服務(wù)直接根據(jù)特征Key讀取Redis獲取特征Value。此方案利用了Redis內(nèi)存K-V數(shù)據(jù)庫的高性能,乍一看去,好像可以滿足業(yè)務(wù)的需求,但實際使用時,也存在著嚴(yán)重的性能問題。典型的業(yè)務(wù)場景:比如我們要預(yù)測20個商家的配送時長,假設(shè)每個商家需要100個特征,則我們就需要20*100=2000個特征進(jìn)行模型計算,2000個KV。如果直接單個獲取,滿足不了業(yè)務(wù)方的性能需求;如果使用Redis提供的批量接口Mget,如果每次獲取100個KV,則需要20次Mget。緩存mget的耗時TP99約5ms,20次Mget,TP99接近100ms,也無法滿足業(yè)務(wù)方的性能需求(上游服務(wù)超時時間約50ms)。因此,我們需要對離線特征從存儲和獲取進(jìn)行優(yōu)化。我們提出了特征組的概念,同一維度的特征,按照特征組的結(jié)構(gòu)進(jìn)行聚合成一個KV,大大減少了Key的數(shù)目;并且提供了相對完善的管理功能,支持對特征組的動態(tài)調(diào)整(組裝、拆分等)。

3.4 實時特征平臺
相比于傳統(tǒng)配送,即時配送無論是在位置信息、騎手負(fù)載,還是在當(dāng)前路網(wǎng)情況,以及商家出餐情況等方面都是瞬息變化的,實時性要求非常高。為了讓機(jī)器學(xué)習(xí)算法能夠即時的在線上生效,我們需要實時地收集線上各種業(yè)務(wù)數(shù)據(jù),進(jìn)行計算,提煉成算法所需要的特征,并實時更新。

3.5 AB實驗平臺
AB實驗并不是個新興的概念,自2000年谷歌工程師將這一方法應(yīng)用在互聯(lián)網(wǎng)產(chǎn)品以來,AB實驗在國內(nèi)外越來越普及,已成為互聯(lián)網(wǎng)產(chǎn)品運營精細(xì)度的重要體現(xiàn)。簡單來說,AB實驗在產(chǎn)品優(yōu)化中的應(yīng)用方法是:在產(chǎn)品正式迭代發(fā)版之前,為同一個目標(biāo)制定兩個(或以上)方案,將用戶流量對應(yīng)分成幾組,在保證每組用戶特征相同的前提下,讓用戶分別看到不同的方案設(shè)計,根據(jù)幾組用戶的真實數(shù)據(jù)反饋,科學(xué)的幫助產(chǎn)品進(jìn)行決策。 互聯(lián)網(wǎng)領(lǐng)域常見的AB實驗,大多是面向C端用戶進(jìn)行流量選擇,比如基于注冊用戶的UID或者用戶的設(shè)備標(biāo)識(移動用戶IMEI號/PC用戶Cookie)進(jìn)行隨機(jī)或者哈希計算后分流。此類方案廣泛應(yīng)用于搜索、推薦、廣告等領(lǐng)域,體現(xiàn)出千人千面?zhèn)€性化的特點。此類方案的特點是實現(xiàn)簡單,假設(shè)請求獨立同分布,流量之間獨立決策,互不干擾。此類AB實驗之所以能夠這樣做是因為:C端流量比較大,樣本足夠多,而且不同用戶之間沒有相互干擾,只要分流時足夠隨機(jī),即基本可以保證請求獨立同分布。即時配送領(lǐng)域的AB實驗是圍繞用戶、商戶、騎手三者進(jìn)行,用戶/商戶/騎手之間不再是相互獨立的,而是相互影響相互制約的。針對此類場景,現(xiàn)有的分流方案會造成不同策略的互相干擾,無法有效地評估各個流量各個策略的優(yōu)劣。

鑒于上述的問題,我們將配送側(cè)的AB實驗分為三個階段:事前的AA分組,事中的AB分流,事后的效果評估。
- AA分組:將候選流量按照既定的規(guī)則預(yù)先分為對照組和實驗組,基于數(shù)理統(tǒng)計的理論確保對照組和實驗組在所關(guān)注的業(yè)務(wù)指標(biāo)上沒有顯著差異。
- AB分流:將線上請求實時分到對照或者實驗版本。
- 效果評估:根據(jù)對照組和實驗組的數(shù)據(jù)對比評估AB實驗的效果。

由于即時配送的場景較為特殊,比如按照配送區(qū)域或城市進(jìn)行AB實驗時,由于樣本空間有限,很難找到?jīng)]有差異的對照組和實驗組,因此我們設(shè)計了一種分時間片AB對照的分流方法:支持按天、小時、分鐘進(jìn)行分片,多個時間片進(jìn)行輪轉(zhuǎn)切換,在不同區(qū)域、不同時間片之間,對不同的策略進(jìn)行交替切換進(jìn)行AB分流,最大限度減少線下因素的影響,確保實驗科學(xué)公正。

4 總結(jié)與展望
目前圖靈平臺支撐了美團(tuán)配送、小象、LBS平臺等BU的算法離線訓(xùn)練、在線預(yù)測、AB實驗等,使算法RD更加關(guān)注算法策略本身的迭代優(yōu)化,顯著提高了算法RD的效率。未來我們會在以下方面繼續(xù)深入探索:1)加強(qiáng)深度學(xué)習(xí)的建設(shè)。
- 加強(qiáng)深度學(xué)習(xí)的建設(shè),全面支持深度學(xué)習(xí),實現(xiàn)深度學(xué)習(xí)相關(guān)組件與機(jī)器學(xué)習(xí)組件一樣,在可視化界面可以和任意組件組合使用。
- 離線訓(xùn)練支持更多常用深度學(xué)習(xí)模型。
- 支持直接寫Python代碼自定義深度學(xué)習(xí)模型。
2)在線預(yù)測平臺化,進(jìn)一步解耦算法和工程。
- 簡化圖靈平臺SDK,剝離主體計算邏輯,建設(shè)在線預(yù)測平臺。
- 在線預(yù)測平臺動態(tài)加載算法包,實現(xiàn)算法、業(yè)務(wù)工程方、圖靈平臺的解耦。
作者簡介
艷偉,美團(tuán)配送技術(shù)團(tuán)隊資深技術(shù)專家。