度小滿自動機器學習平臺實踐
隨著 AI 技術的發展,不同業務涉及的 AI 技術越來越多樣,同時 AI 模型參數量逐年爆發式增長,如何克服 AI 算法落地面臨的開發成本高、對人工依賴強、算法不穩定及落地周期長等問題,成為困擾人工智能從業者的難題。而“自動機器學習平臺”是解決 AI 落地壓力的關鍵方法。今天會和大家分享下度小滿在搭建自動機器學習平臺 ATLAS 的實踐經驗。
一、機器學習平臺
首先介紹一下度小滿機器學習平臺的背景、發展過程以及現狀。
1、業務場景
度小滿是一家金融科技公司,公司內部的業務場景主要分為三個方面:
- 智能風控:涉及關系數據挖掘、文本數據挖掘、情感分析等 NLP 技術,及人臉識別等 CV 技術。
- 智能獲客:涉及常見的廣告獲客技術,如個性化定價、個性化推薦、創意廣告以及用戶畫像。
- 智能經營:涉及圖神經網絡、因果推斷及 OCR 等 AI 算法技術。
由于業務涉及的 AI 技術非常多樣,給 AI 算法落地帶來了很大的挑戰。
2、AI 算法落地難題
AI 算法落地存在一個不可能三角:很難同時實現算法開發的高效率、低成本和高質量。
- AI 算法成本高昂:首先 AI 算法開發的門檻很高。如金融風控當中使用的 OCR 技術、人臉識別技術準入門檻很高,并不是所有公司都能掌握,且只有少部分公司能做到頂尖水平。其次 AI 算法硬件資源消耗大。如訓練一個人臉識別模型,或者一個大規模的 NLP 模型,需要投入大量的計算資源,這是一個無形的門檻。
- AI 算法效果不穩定:AI 算法效果依賴于專家經驗,不同的人會產出不同的結果,存在不穩定因素。
- AI 算法交付周期長:一個成熟的算法從開發到部署上線開發周期動輒長達數月以上,并且很多時候需要根據豐富的業務場景做定制化開發,最后模型的產出與算法落地之間存在鴻溝。
面對這些AI落地的難題,我認為唯一的解決方案是使用機器學習平臺。
3、AI 算法生產流程
下面從 AI 算法的生產流程來理解 AI 算法落地過程中遇到的具體困難。
AI 算法落地主要分為數據管理、模型訓練、算法優化及部署發布四個部分,其中模型訓練和算法優化之間是一個反復迭代的過程。
在算法開發的每一個步驟里面,對參與該步驟的人員的技術要求的差異很大:
- 數據管理:要求技術人員理解業務,并且理解數據治理,及大數據相關技術。
- 模型訓練和算法優化:要求理解算法模型的基本原理、擁有算法優化的經驗。
- 部署發布:要求熟悉后端開發和 web server 相關技術。
從各個步驟需要的技術棧可以看出,很難有一個或者兩三個技術人員完全掌握所有的技術,并且每一個涉及人工的步驟,都是造成生產不穩定的生產瓶頸。而使用機器學習平臺可以解決這兩個問題。
4、機器學習平臺ATLAS
我們的機器學習平臺 ATLAS 貫穿 AI 生產的全流程,旨在替代 AI 算法落地過程中的人工參與,達到高效產出、給 AI 算法研發提能增效的目標。
ATLAS 涉及以下四個平臺:
- 標注平臺:負責生產訓練可用的標注數據;
- 數據平臺:負責大規模數據治理;
- 訓練平臺:負責模型的訓練優化;
- 部署平臺:提供高效、低成本、高可用的部署方案。
這四個平臺之間也是循環迭代的關系。下面分別介紹這幾個平臺的設計細節及運轉過程。
5、ATLAS:數據與訓練
數據與訓練部分涵蓋了標注平臺、數據平臺和訓練平臺。
(1) 標注平臺
標注平臺主要為 AI 算法的訓練提供標注數據,自從深度學習誕生以來,模型已經具有了很高的復雜度,AI 算法效果的瓶頸從模型設計上轉移到了數據質量和數量上,所以數據的高效生產是在 AI 算法落地中至關重要的環節。
ATLAS 的數據標注平臺主要有兩方面的能力特性:多場景覆蓋和智能標注。
- 多場景覆蓋:ALTAS 標注平臺覆蓋了公司內部業務涉及的所有算法場景。包括 OCR 當中文本檢測、文本識別、人臉檢測及人臉比對,CV 領域的圖像分類,NLP 領域的實體關系、文本標簽等任務的數據標注。
- 智能標注:為了提高數據標注的效率,ATLAS 標注平臺也提供智能標注。包括智能預標注和智能糾錯。智能預標注是指利用已經訓練好的模型預先給數據進行標注,然后再人工審核,提高標注效率。智能糾錯是指參考預標注結果,對置信度低的標注結果啟動重標流程。
(2) 數據平臺
數據平臺主要實現大規模數據治理,在治理的過程中能夠兼顧靈活性,動態地匹配樣本。在保存了上億用戶的5000維度以上的特征的基礎上,可以做到一個在線的實時查詢。動態匹配樣本可以滿足不同場景的樣本選擇和數據的選擇要求。
(3) 訓練平臺
訓練平臺是一個很重要的設施,分為五個層:
- 調度層:訓練平臺涉及硬件資源的管理,最底層的調度層就負責這些資源的調度。
- 控制層:在調度層之上是控制層,通過把機器學習的任務變成一些工作流來實現異步和分布式工作流控制。
- 功能層:實現了一些機器學習平臺的基礎功能,包括 AutoML、并行計算、圖計算。
- 應用層:基于底層的一些技術能力,把 AI 算法開發的技術和能力包封裝成各種不同的特定功能流水線。
- 用戶層:在應用層之上,用戶可以使用這些預先設定好的基礎功能來完成工作目標。
6、ATLAS:部署上線
我們的部署采用類 Serverless 的架構,之所以說它是類 Serverless 是因為它并不是完全的 Serverless 的服務。因為我們的服務面向的并不是廣泛通用的應用場景,只面向模型的在線服務,所以不需要考慮更多的場景兼容。
在 API 接口這一層提供了模型會接觸到的三個部分:
- 基本的特征加工
- 模型本身的預測
- 對于外部數據訪問的能力
對于用戶來說,只有圖中橙色部分是用戶需要關注的,平臺提供的 API 可以減少開發成本,并且可以兼容幾乎市面上所有的算法。借助 API 開發一個模型,從開發完成到落地上線可以在一天之內甚至半天之內完成。在此之上我們通過集群管理,可以為平臺提供很好的穩定性保障、流量管理和容量管理。
7、ATLAS:優化迭代
下面演示在 ATLAS 上的兩個優化迭代的場景。
- 場景一:在線模型持續迭代
例如在一個 OCR 模型的落地過程中,舊模型部署之后會產生一些 bad case,這些 bad case 和已有的標注數據融合之后成為新的數據集,再通過 AutoML 優化流水線優化舊模型產生新模型,新模型部署之后再循環往復。通過這樣的循環可以讓模型保持額外的1%的準確率的提升,由于 OCR 的模型精度很高,一般會在95%以上,所以1%也是很大的提升。
- 場景二:AutoML 指導優化
對于簡單重復的優化流程使用全流程 AutoML 替代,對需要專家經驗參與的場景使用AutoML 作為輔助優化,并且使用全流程 AutoML 的結果作為 Baseline,選擇最優的模型部署上線。在我們公司內部有60%以上的場景通過這樣的優化方式獲得性能提升,提升效果從1%到5%不等。
二、自動機器學習
下面介紹一下我們運用了哪些 AutoML 的技術,以及我們所做的改進。
1、專家建模與 AutoML
首先介紹一下 AutoML 相比傳統的專家建模有哪些優勢。
AutoML 的優勢分為三個方面:
- 效率方面:AutoML 可以大大縮短 AI 算法研發周期,一天之內可以產出傳統專家建模數月才能產出的模型;
- 門檻方面:AutoML 可以減少或者完全不需要專家的參與,降低了研發門檻;
- 穩定性方面:專家建模依賴人工經驗,優化效果不穩定,而 AutoML 可以排除經驗的影響,充分挖掘算法潛力。
2、AutoML簡介
下面來介紹一下 AutoML 中常用的技術。
AutoML 常用的技術包括三個方面:
- 超參優化:最常用的是黑盒優化和多保真優化;
- 元學習:從任務性質或者先驗模型來進行學習;
- 網絡結構搜索:專門針對神經網絡的場景,涉及不同的搜索空間和搜索算法。
在實際工作過程中,會根據不同的任務場景選擇不同的技術,且這些技術可以聯合使用。
下面幾個部分分別介紹這三方面的技術。
3、自動機器學習平臺:自動優化流水線
?首先是超參優化部分。實際上在我們的自動優化流水線當中,是將整個機器學習流水線作為自動優化的目標,而不僅僅是針對超參優化。包括自動化的特征工程、模型選擇、模型訓練和自動集成等,這樣相比單獨的超參優化,降低了過擬合的可能性。
除此之外,我們自己實現了一個 AutoML 的框架 Genesis,來兼容主流的 AI 算法和AutoML 工具,且對擴展友好,能夠把平臺中不同的能力模塊相互正交,使得他們之間可以自由組合,實現更加靈活的自動優化流水線。?
4、自動機器學習平臺:元學習系統
我們的系統中也使用了元學習方法,下面介紹一下元學習方法的必要性和應用的重點場景。
(1) 元學習的必要性
在積累了大量實驗數據之后,我們發現數據集在元特征空間呈現明顯的聚集性,所以我們假設在元特征空間分布接近的數據集的最優解也會接近。基于這個假設,我們使用歷史任務的超參指導新任務的參數優化,發現超參搜索收斂速度會更快,且在有限的預算下,算法效果可以額外提升1%。
(2) 應用場景
- 場景一:已有數據集衍生
在大數據的應用場景中,有時會需要對已有數據集進行合并,例如將數據集 A 和數據集 B 合并產生新的數據集 C,如果用數據集 A 和數據集 B 的超參作為數據集 C 的冷啟動來指導數據集 C 的超參優化,一方面可以鎖定搜索空間,另一方面可以達到最優的參數優化結果。
- 場景二:數據集重復采樣
在實際開發過程中有時會需要對數據集進行采樣,再對采樣后的數據集進行超參優化,因為采樣后的數據的元特征空間分布與原始數據是接近的,所以用原始數據集的超參去指導采樣數據的超參優化,就可以提高優化效率。
5、自動機器學習平臺:深度學習優化
最后是我們針對深度學習場景所做的自動優化。分為超參優化和對 NAS 的探索兩個方面:
- 深度學習超參優化
深度學習的開發瓶頸在于訓練時間,一次迭代時間需要數小時到數天,那么使用傳統貝葉斯優化需要迭代二、三十次,訓練時長長達一個月到幾個月。所以我們會在深度學習超參優化的部分使用 Hyperband 方法為貝葉斯優化提供種子,加速超參搜索進程。在此基礎之上,我們還會運用歷史數據的信息來優化冷啟動,以及用歷史的替代模型做集成,都會比隨機初始化以更快收斂速度達到全局最優解。
- NAS探索
實際開發場景中,不同的部署場景對模型的規模和時間性能要求不同,其次神經網絡結構的優化是模型優化的重要部分,我們需要排除這個步驟里的人工干擾。所以我們提出了這個基于權重糾纏的 One-shot NAS 的方法,搜索效率可以達到經典的 DARTS 方法的3倍以上的,并且搜索到的子網模型的參數量和計算成本都是可控的,我們可以在目標之內選擇合適的模型。除此之外,我們還支持 MobileNet、ResNet 等多樣空間來滿足不同的 CV 任務需求。
三、規模與效率
最后來討論一下我們在機器學習平臺建設過程中碰到的規模和效率的問題。
1、深度學習困境
我們之所以會關注規模和效率問題,是因為深度學習面臨著模型規模和計算需求之間的沖突。
更多的模型參數意味著更好的模型表現是行業的共識。而深度學習存在如下的摩爾定律:
- 模型參數規模一年翻十倍
- 硬件性能18個月翻一倍
所以高速增長的計算需求與硬件性能之間的鴻溝必須通過優化來解決。
2、數據并行
最常用的優化方法就是并行,包括數據并行、模型并行等。其中最常用的是數據并行的技術。
ATLAS 平臺的數據并行技術有以下特征:
- 作為 ATLAS 基礎功能,可以實現無感使用;
- 不僅能支持人工神經網絡模型,也支持 Boosting 模型,如 XGB、LGBM 等;
- 支持多種通信架構的優化并行效率;
- 就優化效果來說,對于神經網絡模型和 Boosting 模型,吞吐都有線性的提升,而且對于神經網絡模型來說,并行訓練提高了可訓練規模,可以加快收斂速度,最終能夠提高模型精度。
3、模型并行
還有一些模型不能只靠數據并行解決訓練效率問題,還需要引入模型并行技術。
ATLAS 的模型并行主要分為兩個方面:
- 場景一:層內并行
一些網絡模型的全連接層參數規模非常大,如 arcFace 的分類規模高達幾十、上百萬甚至上千萬,這樣的一個全連接層不可能通過一張 GPU 卡覆蓋。這時需要引入層內并行技術,不同節點計算同一張量的不同部分。
- 場景二:層間并行(流水并行)
同時也會用到層間并行技術,即在不同的節點上面計算網絡的不同層的數據,將沒有依賴的計算前置來減少計算過程中的 IDLE(GPU 等待時間)。
4、圖并行
除了可以用張量描述的線性數據以外,我們做了一些圖數據并行訓練的探索。
對圖數據來說,不管是采樣還是其他操作都需要動態跨節點,而且圖數據一般規模都很大,我們內部的圖數據達到了百億的規模,這樣的圖數據的計算很難在單機上完成。
圖數據分布式計算的瓶頸在于映射表,傳統的映射表的空間復雜度為 O(n),如10億個點10億條邊的圖數據占內存160GB,形成分布式訓練的規模天花板。我們提出了一個空間復雜度為 O(1)的方法,通過重排節點和邊的 ID,只保留映射邊界,達到圖并行訓練規模可任意擴展的效果。
5、訓練效率
同時我們也做了一些訓練效率方面的優化。
- GPU 利用率優化
GPU 的很多時間都消耗在讀取數據,GPU 空等,通過事前培訓、事中監控預警、事后分析可以使 GPU 平均使用率提升一倍。
- 反向傳播重計算
我們還使用了反向傳播重計算技術。對于一些參數非常多的模型,在正向傳播的過程中,我們并不保存所有的層的計算結果,僅保留部分節點的 checkpoint,在反向傳播時空白參數節點從 checkpoint 開始重新計算。通過這種方式可以減少50%以上的內存資源,訓練效率提高35%以上。
四、總結與思考
最后談談在機器學習平臺的建設中的經驗和思考。
我們總結了如下一些經驗:
- 首先,機器學習平臺是解決我們AI算法落地的一個最有效的方案;
因為我們 AI 算法落地涉及到的,技術和內容是方方面面的,我不可能要求任意任一個環節上的同學都會了解整個全局,那我們一定要有一個平臺能提供這些基礎的能力來幫助大家去解決這些問題。
- 其次,我們認為 AutoML 的應用是機器學習平臺的核心建設能力;
因為只有把自動化或者 AutoML 的應用做得好了,才能夠更有效的去解放算法專家的生產力,讓算法專家可以去做一些更深入的算法,或者能力的建設來提高機器學習的上限。
- 最后,就是在這個設計過程中,因為是更多的是考慮一個內部應用的場景,我們的功能和能力的設計,會針對我們的業務實際,優先滿足業務的要求。
展望未來:
- 首先,會將 ATLAS 的能力適配更多的場景,做到更高的效率。
- 其次,我們會探索 3D 并行等訓練優化技術在超大規模語言模型上面的應用,使我們的算法效果和行業前沿 AI 算法的水平接近。
五、問答環節
Q1:開源的AutoML框架,我們嘗試過哪些推薦哪些?
A1:開源的 AutoML 框架現在用的比較多的就是 Optuna,還嘗試過 Auto-Sklearn 和 AutoWeka,然后給大家推薦一個網站是 automl.org,因為其實現在做這個領域的人還是比較少的,這個網站是幾個在 AutoML 領域的專家教授建的一個網站,上面有很多的 AutoML 的開源學習資料,大家都可以去參考。開源框架我們比較推薦的是我們用的 Optuna 去做調參,因為它的算法的來說的話就不是就這種最基礎的貝葉斯優化,它是一個 TPE 的算法,比較適合參數量非常大的一些場景,貝葉斯優化還是更適合參數比較少的一些場景,不過我的建議是說大家可能針對不同的場景嘗試一些不同的方法,因為就做更多嘗試之后,大家可能會對什么場景適合什么方法更有經驗。
Q2:機器學習平臺的開發周期是多久?
A2:我們的機器學習平臺從建設開始到現在已經經過3、4年的時間。最開始我們先解決部署應用的問題,然后后面是開始建設我們的生產能力,比如計算和訓練。如果從零開始搭建的話,我建議大家可以參考一些開源的框架先搭建起來,然后看看在使用過程中,針對自己的業務場景會遇到什么樣的問題,好明確后面的開發方向。
Q3:交叉驗證的時候怎么消除過擬合?
A3:這可能是一個更具體的算法優化的問題,但在我們的優化流水線里面,我們是通過采樣的方法來訓練的,通過這樣的方式讓我們的任務能夠見到數據集的更多的角度,或者說方面,然后再通過把這些采樣之后訓練得到的 top 模型集成起來,來讓我們的模型有更強的泛化能力,這在我們的場景里面也是非常重要的一個方法。
Q4:我們構建整個機器學習學習平臺,開發周期和人員投入大概是多少啊?
A4:這個開發周期剛才講過,大概是三到四年的時間。然后人員投入的話,目前是有六七個同學,在早期的話比這個人數還要少。
Q5:虛擬化GPU會不會對機器學習平臺有提升?
A5:首先這個同學提到的虛擬化 GPU,應該是指資源的分割和隔離吧。我們做機器學習平臺的話,虛擬化 GPU 應該是一個必須的能力,就是說我們一定要把資源做到虛擬化,才能做更好的資源調度和分配。然后在這個基礎之上的話,我們可能還會把我們的 GPU 的顯存和它的計算資源去做分割,然后把不同大小的資源塊去分給不同任務使用,但這一點實際上我們沒有在訓練里面去用,因為訓練的任務通常會對計算的能力有更高的要求,不會是一個更小的資源消耗的應用場景,我們在推理的場景里面是會用到的。我們在實際應用過程當中發現虛擬化技術沒有很好的開源免費的方案,有部分的云服務廠商會提供一些收費的方案,所以說我們自己在部署上使用的是分時復用的方案,就是把一些計算要求高的任務和一些計算要求低的任務去做混布,來做到分時的復用,在一定程度上能達到提高容量的效果。
Q6: 多節點分布式并行訓練加速比怎么樣?能接近線性嗎?
A6:我們是可以接近一個線性的加速比的,就是我們自己測的話,比較好的時候大概可以達到一個80到90的程度。當然,如果節點數量非常多,可能還會需要做進一步的優化,現在可能大家發論文或者看到論文里面會提到說32個或者64個節點可以達到80、90的加速比,那可能是要有一些更專門的優化。但我們在機器學習平臺里面的話,有可能會要針對更廣泛的場景,在實際的場景里面,大多數的訓練可能是4個 GPU 卡、8個 GPU 卡,最多16個 GPU 卡就能夠滿足要求。
Q7:使用 AutoML 時,用戶需要配置哪些參數?整個計算大概需要多少算力和時間?
A7:我們的 AutoML 最理想的情況,用戶是不需要配置任何參數的。當然我們會根據用戶的需求,允許用戶自己去調整,或者確定一些參數。時間消耗的話,就是我們所有的 AutoML 場景,我們的目標都是希望能在一天之內去完成優化。然后算力的話,如果是一般的大數據建模,比如樹模型 XGB、LGBM 這些的話,就是一臺機器都可以搞定;如果是 GPU 的任務的話,要看這個 GPU 任務本身的一個規模,基本上就是原有的訓練規模的2到3倍的算力,就可以完成 AutoML 的訓練。
Q8:有哪些開源的機器學習框架可以參考?
A8:這個問題剛才提到過,就是像 Optuna,Auto-Sklearn 還有 AutoWeka 這些都是可以參考的。然后剛才有說到那個 automl.org 的這個網站,上面有很多資料,大家可以去學習一下。
Q9:與 EasyDL 的關系是什么?
A9:EasyDL 是百度的,我們這個框架是完全自研的。
今天的分享就到這里,謝謝大家。