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