在互聯(lián)網(wǎng)行業(yè)里有很多需要利用深度學(xué)習(xí)模型預(yù)估點(diǎn)擊率的場景,比如廣告系統(tǒng)、推薦系統(tǒng),和搜索引擎。有些重要的場景背后是很大的用戶流量,體驗(yàn)了重要的商業(yè)價(jià)值,所以有數(shù)十人甚至數(shù)百人的團(tuán)隊(duì)在不斷優(yōu)化預(yù)估效能。這些團(tuán)隊(duì)為了優(yōu)化自己負(fù)責(zé)的場景甚至專門研發(fā)深度學(xué)習(xí)工具鏈。
同時(shí),大量小眾的預(yù)估場景對應(yīng)著不小的流量,但是無法配置專門的團(tuán)隊(duì),更不可能開發(fā)專門的工具。這類場景因?yàn)閿?shù)量眾多,所以總體商業(yè)價(jià)值毫不弱于上述主流場景,甚至符合長尾分布的 20/80 比例 —— 其總體商業(yè)價(jià)值數(shù)倍于主流場景。
在我們研發(fā)和推廣 ElasticDL 的過程里,接觸到了很多負(fù)責(zé)此類小眾場景的用戶們。比如螞蟻集團(tuán)的各種大促活動(dòng),以及餓了么和菜鳥等業(yè)務(wù)的營銷推薦活動(dòng)。這些業(yè)務(wù)場景中,通常是一個(gè)算法工程師需要負(fù)責(zé)多個(gè)場景的建模。這就帶來一個(gè)重要需求 —— 提供一套通用工具以提高大量小眾預(yù)估場景下算法工程師的建模效率。另外,小眾場景里的訓(xùn)練數(shù)據(jù)可不小 —— 本文梳理的場景都需要分布式訓(xùn)練。
之前的文章《ElasticDL:同時(shí)提升集群利用率和研發(fā)效率的分布式深度學(xué)習(xí)框架》里我們介紹過 ElasticDL 通過 Kubernetes-native 的彈性調(diào)度能力,提升機(jī)群資源利用率到 >90%。同時(shí),作為一個(gè) Keras 模型的分布式訓(xùn)練系統(tǒng),ElasticDL 只需要用戶提供模型定義,不需要用戶定義訓(xùn)練循環(huán) (training loop),更不需要用戶開發(fā)分布式訓(xùn)練循環(huán)。實(shí)際上,由于 TensorFlow 社區(qū)貢獻(xiàn)了很多 Keras 模型,比如 tf.keras.applications 里有很多 CV 領(lǐng)域的模型,DeepCTR 庫里有很多 CTR 預(yù)估相關(guān)的模型,用戶可以直接使用的。所以實(shí)際上 ElasticDL 在小眾場景中的使用可以完全不需要用戶 coding。這樣的易用性在推廣過程中得到了用戶的好評。
tf.keras.applications
https://tensorflow.google.cn/api_docs/python/tf/keras/applications?hl=zh-cn
DeepCTR
https://github.com/shenweichen/DeepCTR
基于 no-code 的特點(diǎn),ElasticDL 團(tuán)隊(duì)的主力工程師王勤龍為螞蟻的可視化建模平臺 PAI 增加了 ElasticDL 組件,使得大量用戶可以通過在 Web 頁面里拖拽和配置組件的方式實(shí)現(xiàn) AI 訓(xùn)練。此文基于螞蟻、餓了么、和飛豬的同事們的反饋梳理,為大家解釋 TensorFlow 社區(qū)累積的 Keras 模型對中小 AI 場景的價(jià)值,以及如何經(jīng)由 ElasticDL 實(shí)現(xiàn)這些價(jià)值。
小眾預(yù)估場景對模型研發(fā)效率的期待
小眾預(yù)估場景具有如下特點(diǎn):
應(yīng)用周期短,可能是應(yīng)用在某個(gè)短時(shí)間的大促營銷活動(dòng)。所以算法工程師也需要在短時(shí)間內(nèi)能完成預(yù)估模型的開發(fā)。
業(yè)務(wù)場景復(fù)雜多樣,比如商品推薦的點(diǎn)擊預(yù)估、營銷活動(dòng)的目標(biāo)人群預(yù)估、優(yōu)惠券的核銷預(yù)估等,一個(gè)算法工程有可能會(huì)同時(shí)負(fù)責(zé)不同場景的預(yù)估建模,不同場景所使用的特征和模型可能區(qū)別很大,所說提高小眾場景的預(yù)估模型的開發(fā)效率十分重要。
樣本數(shù)據(jù)量大。雖然是小眾場景,但是在大數(shù)據(jù)時(shí)代,公司都會(huì)積累了很多歷史樣本數(shù)據(jù)。訓(xùn)練的數(shù)據(jù)越多,有助于提升預(yù)估模型精度。所以在分布式集群上加速預(yù)估模型的訓(xùn)練對生產(chǎn)應(yīng)用十分重要。
小眾預(yù)估場景的這些特點(diǎn)不僅需要提高建模效率,也給集群管理系統(tǒng)帶來了挑戰(zhàn)。由于此類場景數(shù)量眾多,在集群上給每個(gè)場景單獨(dú)劃分資源是不切合實(shí)際的。同時(shí)小眾場景的訓(xùn)練作業(yè)時(shí)多時(shí)少,給其調(diào)度資源時(shí)既要考慮是否滿足訓(xùn)練任務(wù)的需求,也要考慮集群資源利用率。前者決定了用戶的模型訓(xùn)練效率,后者決定了公司成本。
使用 Keras 提高預(yù)估模型編程效率
使用 ElasticDL 來做分布式訓(xùn)練,用戶主要需要使用 Keras API 來定義一個(gè) Keras Model,如下所示:
import tensorflow as tf def forward(): inputs = tf.keras.layers.Input(shape=(4, 1), name="input") x = tf.keras.layers.Flatten()(inputs) outputs = tf.keras.layers.Dense(3, name="output")(x) return tf.keras.Model(inputs=inputs, outputs=outputs, name="simple-model")
深度學(xué)習(xí)預(yù)估模型一般包含兩個(gè)部分:
樣本特征預(yù)處理定義。將原始特征數(shù)據(jù)轉(zhuǎn)換成適合深度學(xué)習(xí)使用的數(shù)據(jù),比如標(biāo)準(zhǔn)化、分箱等變換。
深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)定義。定義網(wǎng)絡(luò)結(jié)構(gòu)來擬合數(shù)據(jù)分布,提供模型預(yù)估精度。
在特征預(yù)處理上,TensorFlow 在其最新版本中提供了很多 preprocessing layers 來方便用戶做特征預(yù)處理。使用這些 preprocessing layer,用戶可以很方便地將特征預(yù)處理計(jì)算邏輯與模型網(wǎng)絡(luò)結(jié)構(gòu)結(jié)合在一起構(gòu)造一個(gè)完整的 Keras 模型。
preprocessing layers
https://keras.io/api/layers/preprocessing_layers/
但是很多預(yù)估場景的特征數(shù)量很大,可能涉及用戶屬性、商品屬性、地理位置等特征。對每個(gè)特征都手動(dòng)編程定義預(yù)處理邏輯,也是件繁瑣的事。同時(shí)特征預(yù)處理定義還需要一些樣本特征的統(tǒng)計(jì)信息來保證特征變換的準(zhǔn)確性,比如標(biāo)準(zhǔn)化操作需要特征的均值和標(biāo)準(zhǔn)差,分箱需要特征值的分布信息來確定分箱邊界。在阿里巴巴集團(tuán),大多數(shù)預(yù)估場景的數(shù)據(jù)都是以結(jié)構(gòu)化表形式存儲在阿里云的 MaxCompute 中。針對此類數(shù)據(jù),我們結(jié)合 MaxCompute 的大數(shù)據(jù)計(jì)算能力開發(fā)了自動(dòng)生成預(yù)處理 Layer 功能。用戶只需要選擇使用的特征列,就可以自動(dòng)完成特征統(tǒng)計(jì)并根據(jù)統(tǒng)計(jì)結(jié)果生成預(yù)處理的 Layer,用戶只需關(guān)心模型的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)的定義。
在預(yù)估模型的網(wǎng)絡(luò)結(jié)構(gòu)定義上,DeepCTR模型庫提供了很多前沿的 CTR 預(yù)估模型。用戶可以很方便地調(diào)用這些模型來構(gòu)造自己的預(yù)估模型。針對常用的 CTR 深度學(xué)習(xí)預(yù)估模型,我們在螞蟻集團(tuán)的 PAI 平臺上封裝了一個(gè) ElasticDL-DeepCTR 組件,該組件能根據(jù)數(shù)據(jù)集自動(dòng)生成特征預(yù)處理邏輯,并預(yù)置了 Wide&Deep、DeepFM、xDeepFM等算法,用戶只需配置參數(shù)即可進(jìn)行分布式模型訓(xùn)練。
彈性調(diào)度提升訓(xùn)練效率
小眾預(yù)估場景所使用的樣本數(shù)量一般也很大,幾百萬到幾千萬條不等,單機(jī)訓(xùn)練很慢滿足模型的訓(xùn)練效率,往往需要在分布式集群上來加速模型訓(xùn)練。因?yàn)樾”婎A(yù)估場景的數(shù)量多,單獨(dú)給每個(gè)場景劃分資源訓(xùn)練模型無疑會(huì)大幅增加集群管理員的工作。但是資源劃分少會(huì)影響訓(xùn)練速度,劃分過多則可能造成資源浪費(fèi)。所以通常的做法是,這些小眾預(yù)估場景的模型訓(xùn)練共享一個(gè)資源池。但是共享一個(gè)資源池很難同時(shí)兼顧用戶體驗(yàn)和集群資源利用率。小眾預(yù)估場景的模型訓(xùn)練作業(yè)往往時(shí)多時(shí)少。作業(yè)少的時(shí)候,資源池空閑造成資源浪費(fèi);作業(yè)多的時(shí)候,后面提交的任務(wù)需要排隊(duì)等待。
ElasticDL 的彈性訓(xùn)練則能很好地解決了這個(gè)問題。通常一個(gè) Kubernetes 集群上的資源是多個(gè)租戶共用的,這些租戶可能運(yùn)行著各種不同的計(jì)算任務(wù),比如在線服務(wù)任務(wù)、數(shù)據(jù)計(jì)算任務(wù)等。為了保證不同租戶的 Service-Level Objective (SLO),集群管理者會(huì)給各租戶分配資源配額。每個(gè)租戶有高優(yōu)先級使用自己的資源配額來執(zhí)行計(jì)算任務(wù),如果配置內(nèi)的資源有空閑,其他租戶則能用低優(yōu)先級使用該租戶配額里空閑的資源。如果使用過程中,原有租戶計(jì)算任務(wù)增加,則其他租戶需要?dú)w還使用的資源。由于集群中不同租戶的使用峰值和低谷一般是錯(cuò)開的,所以集群中經(jīng)常存在空閑資源。模型訓(xùn)練的租戶使用 ElasticDL 則能以低優(yōu)先級方式借調(diào)其他組租戶的空閑資源來訓(xùn)練模型。就算訓(xùn)練過程中 ElasticDL 作業(yè)的 worker 被原有租戶搶占了,訓(xùn)練作業(yè)不會(huì)終止失敗。ElasticDL 會(huì)在集群里尋找其他租戶的空閑資源來啟動(dòng)新的 worker,并將新 worker 加入訓(xùn)練作業(yè)。
在螞蟻集團(tuán),幾十個(gè)租戶同時(shí)使用一個(gè) Kubernetes 集群,我們在集群上只劃分了很少的資源來啟動(dòng) ElasticDL 作業(yè)的 master 和 PS 進(jìn)程,而資源需求大且數(shù)量多的 worker 進(jìn)程則全部使用低優(yōu)先級的資源來運(yùn)行。這樣只要集群有空閑資源,訓(xùn)練作業(yè)就能快速開始,從而提升了這些小眾預(yù)估模型的訓(xùn)練效率,也同時(shí)提升了集群資源利用率。
應(yīng)用案例
以下我們簡述幾個(gè)阿里經(jīng)濟(jì)體內(nèi)使用 ElasticDL 提升模型研發(fā)效能的小眾場景。
螞蟻財(cái)富的理財(cái)活動(dòng)推薦
支付寶 818 金選理財(cái)節(jié)活動(dòng),新發(fā)基金策略(用于某債基帶貨)和黃金雨活動(dòng)策略(用于促活躍)需要使用 CTR 預(yù)估來提升活動(dòng)效果。該場景積累了幾百萬樣本數(shù)據(jù),且樣本中包含用戶屬性、理財(cái)產(chǎn)品屬性等很多特征。使用 ElasticDL 預(yù)估方案,非常方便地將 DeepFM 使用到了此次活動(dòng)中。相比之前使用的規(guī)則策略,活動(dòng)期間,頁面的點(diǎn)擊率有明顯提升。
餓了么補(bǔ)貼投放預(yù)估
餓了么 C 端補(bǔ)貼(天降紅包/高溫補(bǔ)貼券包項(xiàng)目)是通過對用戶發(fā)放紅包以撬動(dòng)用戶下單的目的進(jìn)行發(fā)放的,因此在不同門檻/面額組合下對用戶核銷/下單概率的預(yù)估是將平臺收益最大化(ROI 最大化)的必要條件。類似邏輯同樣適用在 B 端補(bǔ)貼上(百億補(bǔ)貼項(xiàng)目),只不過 B 端補(bǔ)貼需要疊加用戶對門店屬性的適應(yīng)/偏好/LBS限制/物流限制等更復(fù)雜的情況。ElasticDL 提供的 CTR 預(yù)估方案非常簡單易用,訓(xùn)練的 xDeepFM 模型上線后效果很好。為后續(xù)的核銷率擬合/ROI 優(yōu)化提供了堅(jiān)實(shí)有力的基礎(chǔ)。
小結(jié)
針對 Keras 模型,ElasticDL 利用 TensorFlow 的 Eager execution 在 Kubernetes 上實(shí)現(xiàn)了彈性分布式訓(xùn)練,讓用戶只需提供 Keras 模型定義就可以提交分布式訓(xùn)練作業(yè)。同時(shí)由于 TensorFlow 社區(qū)擁有豐富的 Keras 模型庫,用戶可以做到 no-code 就能完成一個(gè)預(yù)估模型的應(yīng)用。
由于 ElasticDL 在阿里經(jīng)濟(jì)體內(nèi)部的展示的應(yīng)用價(jià)值,ElasticDL 的另一位主力工程師齊俊在配合阿里云團(tuán)隊(duì),爭取盡快讓阿里經(jīng)濟(jì)體之外的用戶可以在阿里云上使用 ElasticDL。這項(xiàng)對接工作結(jié)束之后,我們再為大家?guī)砀隆?/p>
責(zé)任編輯:lq
-
模型
+關(guān)注
關(guān)注
1文章
3521瀏覽量
50431 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8960瀏覽量
140248 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122799
原文標(biāo)題:案例分享 | No-Code AI:用 ElasticDL 和社區(qū) Keras 模型庫實(shí)現(xiàn)大量小眾預(yù)估場景
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ABAQUS內(nèi)置了豐富的材料模型庫

評論