隨著AI 技術的發展,不同業務涉及的AI 技術越來越多樣,同時AI 模型參數量逐年爆發式成長,如何克服AI 演算法落地面臨的開發成本高、對人工依賴強、演算法不穩定及落地週期長等問題,成為困擾人工智慧從業人員的難題。而「自動機器學習平台」是解決 AI 落地壓力的關鍵方法。今天會和大家分享下度小滿在建立自動機器學習平台 ATLAS 的實務經驗。
#先介紹度小滿機器學習平台的背景、發展過程以及現狀。
#度小滿是一家金融科技公司,公司內部的業務場景主要分為三個面向:
由於業務涉及的 AI 技術非常多樣,因此為 AI 演算法落地帶來了很大的挑戰。
AI 演算法落地存在一個不可能三角:很難同時實現演算法開發的高效率、低成本和高品質。
面對這些AI落地的難題,我認為唯一的解決方案是使用機器學習平台。
#下面從AI 演算法的生產流程來理解AI 演算法落地過程中遇到的具體困難。
AI 演算法落地主要分為資料管理、模型訓練、演算法最佳化及部署發布四個部分,其中模型訓練和演算法最佳化之間是一個反覆迭代的過程。
在演算法開發的每一個步驟裡面,對參與該步驟的人員的技術要求的差異很大:
從各個步驟所需的技術堆疊可以看出,很難有一個或兩三個技術人員完全掌握所有的技術,並且每一個涉及人工的步驟,都是造成生產不穩定的生產瓶頸。而使用機器學習平台可以解決這兩個問題。
#我們的機器學習平台ATLAS 貫穿AI 生產的全流程,旨在取代AI 演算法落地過程中的人工參與,達到高效率產出、給AI 演算法研發提能增效的目標。
ATLAS 涉及以下四個平台:
這四個平台之間也是循環迭代的關係。以下分別介紹這幾個平台的設計細節及運作流程。
資料與訓練部分涵蓋了標註平台、資料平台和訓練平台。
(1) 標註平台
標註平台主要為AI 演算法的訓練提供標註數據,自從深度學習誕生以來,模型已經具有了很高的複雜度,AI 演算法效果的瓶頸從模型設計上轉移到了數據質量和數量上,所以數據的高效生產是在AI 演算法落地中至關重要的環節。
ATLAS 的資料標註平台主要有兩方面的能力特性:多場景覆蓋和智慧標註。
#(2) 資料平台
資料平台主要實現大規模資料治理,在治理的過程中能夠兼顧彈性,動態地匹配樣本。在保存了上億用戶的5000維度以上的特徵的基礎上,可以做到一個線上的即時查詢。動態配對樣本可以滿足不同場景的樣本選擇和資料的選擇要求。
(3) 訓練平台
訓練平台是一個很重要的設施,分為五個層:
我們的部署採用類Serverless 的架構,之所以說它是類Serverless 是因為它並不是完全的Serverless 的服務。因為我們的服務面向的並不是廣泛通用的應用場景,只面向模型的線上服務,所以不需要考慮更多的場景相容。
在API 介面這一層提供了模型會接觸到的三個部分:
對使用者來說,只有圖中橘色部分是使用者需要關注的,平台提供的API 可以減少開發成本,並且可以相容於幾乎市面上所有的演算法。借助 API 開發一個模型,從開發完成到落地上線可以在一天之內甚至半天內完成。在此之上我們透過叢集管理,可以為平台提供良好的穩定性保障、流量管理和容量管理。
#下面示範在 ATLAS 上的兩個最佳化迭代的場景。
#例如在一個OCR 模型的落地過程中,舊模型部署之後會產生一些bad case,這些bad case 和已有的標註資料融合之後成為新的資料集,再透過AutoML 優化管線優化舊模型產生新模型,新模型部署之後再循環往復。透過這樣的循環可以讓模型保持額外的1%的準確率的提升,由於 OCR 的模型精度很高,一般會在95%以上,所以1%也是很大的提升。
##對於簡單重複的最佳化流程使用全流程AutoML 替代,對需要專家經驗參與的場景使用AutoML 作為輔助最佳化,並且使用全流程AutoML 的結果作為Baseline,選擇最優的模型部署上線。在我們公司內部有60%以上的場景透過這樣的優化方式獲得效能提升,提升效果從1%到5%不等。
#下面介紹我們運用了哪些AutoML 的技術,以及我們所做的改進。
#首先介紹AutoML 相比傳統的專家建模有哪些優勢。
AutoML 的優點分為三個面向:
以下來介紹 AutoML 中常用的技術。
#AutoML 常用的技術包含三個面向:
在實際工作過程中,會根據不同的任務場景選擇不同的技術,而這些技術可以結合使用。
下面幾個部分分別介紹這三方面的技術。
3、自動機器學習平台:自動最佳化管線首先是超參優化部分。實際上在我們的自動優化管線當中,是將整個機器學習管線作為自動優化的目標,而不僅僅是針對超參優化。包括自動化的特徵工程、模型選擇、模型訓練和自動整合等,這樣相比單獨的超參優化,降低了過度擬合的可能性。
除此之外,我們自己實作了一個AutoML 的框架Genesis,來相容主流的AI 演算法和AutoML 工具,且對擴充友好,能夠把平台中不同的能力模組相互正交,使得他們之間可以自由組合,實現更靈活的自動優化管線。
我們的系統中也使用了元學習方法,以下介紹元學習方法的必要性和應用的重點場景。
(1) 元學習的必要性
在累積了大量實驗數據之後,我們發現資料集在元特徵空間呈現明顯的聚集性,所以我們假設在元特徵空間分佈接近的資料集的最優解也會接近。基於這個假設,我們使用歷史任務的超參來指導新任務的參數最佳化,發現超參搜尋收斂速度會更快,且在有限的預算下,演算法效果可以額外提升1%。
(2) 應用場景
在大數據的應用程式場景中,有時會需要對已有資料集進行合併,例如將資料集A 和資料集B 合併產生新的資料集C,如果以資料集A 和資料集B 的超參作為資料集C 的冷啟動來指導資料集C 的超參優化,一方面可以鎖定搜尋空間 ,另一方面可以達到最優的參數最佳化結果。
##在實際開發過程中有時會需要對資料集進行取樣,再對採樣後的資料集進行超參優化,因為採樣後的資料的元特徵空間分佈與原始資料是接近的,所以用原始資料集的超參去指導採樣資料的超參優化,就可以提高最佳化效率。
5、自動機器學習平台:深度學習最佳化####深度學習超參優化########## ###########深度學習的開發瓶頸在於訓練時間,一次迭代時間需要數小時到數天,那麼使用傳統貝葉斯優化需要迭代二、三十次,訓練時長長達一個月到幾個月。所以我們會在深度學習超參最佳化的部分使用 Hyperband 方法為貝葉斯最佳化提供種子,加速超參搜尋進程。在此基礎之上,我們還會運用歷史資料的資訊來優化冷啟動,以及用歷史的替代模型做集成,都會比隨機初始化以更快收斂速度達到全局最優解。 ##########
#在實際開發場景中,不同的部署場景對模型的規模和時間效能要求不同,其次神經網路結構的最佳化是模型最佳化的重要部分,我們需要排除這個步驟裡的人工幹擾。所以我們提出了這個基於權重糾纏的One-shot NAS 的方法,搜尋效率可以達到經典的DARTS 方法的3倍以上的,並且搜尋到的子網模型的參數量和計算成本都是可控的,我們可以在目標之內選擇合適的模型。除此之外,我們也支援 MobileNet、ResNet 等多元空間來滿足不同的 CV 任務需求。
#最後來討論我們在機器學習平台建立過程中碰到的規模和效率的問題。
#我們之所以會關注規模和效率問題,是因為深度學習面臨著模型規模與計算需求的衝突。
#更多的模型參數意味著更好的模型表現是產業的共識。而深度學習存在如下的摩爾定律:
#所以高速成長的運算需求與硬體效能之間的鴻溝必須透過優化來解決。
#最常用的最佳化方法就是並行,包括資料並行、模型並行等。其中最常用的是資料並行的技術。
#ATLAS 平台的資料平行技術有下列特徵:
######### ########就優化效果來說,對於神經網路模型和Boosting 模型,吞吐都有線性的提升,而且對於神經網路模型來說,並行訓練提高了可訓練規模,可以加快收斂速度,最終能夠提高模型精度。 ##################3、模型並行################還有一些模型不能只靠資料並行解決訓練效率問題,還需要引進模型並行技術。 ###########################ATLAS 的模型並行主要分為兩個面向:#########
#一些網路模型的全連接層參數規模非常大,如arcFace 的分類規模高達幾十、上百萬甚至上千萬,這樣的一個全連接層不可能透過一張GPU 卡覆蓋。這時需要引入層內並行技術,不同節點計算同一張量的不同部分。
同時也會用到層間平行技術,也就是在不同的節點上面計算網路的不同層的數據,將沒有依賴的運算前置來減少計算過程中的IDLE(GPU 等待時間)。
#除了可以用張量描述的線性資料以外,我們做了一些圖資料並行訓練的探索。
對圖資料來說,不管是取樣或其他操作都需要動態跨節點,而且圖資料一般規模都很大,我們內部的圖數據達到了百億的規模,這樣的圖數據的計算很難在單機上完成。
圖資料分散式計算的瓶頸在於映射表,傳統的映射表的空間複雜度為O(n),如10億點10億條邊的圖資料佔記憶體160GB,形成分散式訓練的規模天花板。我們提出了一個空間複雜度為 O(1)的方法,透過重排節點和邊的 ID,只保留映射邊界,達到圖並行訓練規模可任意擴展的效果。
#同時我們也做了一些訓練效率的最佳化。
##GPU 使用率最佳化
反向傳播重計算
最後談談在機器學習平台的建置中的經驗與思考。
#########我######們總結以下一些經驗:####因為我們AI 演算法落地涉及到的,技術和內容是方方面面的,我不可能要求任意任一個環節上的同學都會了解整個全局,那我們一定要有一個平台能提供這些基礎的能力來幫助大家去解決這些問題。
因為只有把自動化或AutoML 的應用做得好了,才能夠更有效的去解放演算法專家的生產力,讓演算法專家可以去做一些更深入的演算法,或是能力的建構來提高機器學習的上限。
A1:開源的AutoML 框架現在用的比較多的就是Optuna,也嘗試過Auto-Sklearn 和AutoWeka,然後給大家推薦一個網站是automl.org,因為其實實作在做這個領域的人還是比較少的,這個網站是幾個在AutoML 領域的專家教授建的一個網站,上面有很多的AutoML 的開源學習資料,大家都可以去參考。開源框架我們比較推薦的是我們用的Optuna 去做調參,因為它的演算法的來說的話就不是就這種最基礎的貝葉斯優化,它是一個TPE 的演算法,比較適合參數量非常大的一些場景,貝葉斯優化還是更適合參數比較少的一些場景,不過我的建議是說大家可能針對不同的場景嘗試一些不同的方法,因為就做更多嘗試之後,大家可能會對什麼場景適合什麼方法更有經驗。
A2:我們的機器學習平台從建造開始到現在已經經過3、4年的時間。最開始我們先解決部署應用的問題,然後後面是開始建立我們的生產能力,例如計算和訓練。如果從零開始搭建的話,我建議大家可以參考一些開源的框架先搭建起來,然後看看在使用過程中,針對自己的業務場景會遇到什麼樣的問題,好明確後面的開發方向。
A3:這可能是一個更具體的演算法最佳化的問題,但在我們的最佳化管線裡面,我們是透過採樣的方法來訓練的,透過這樣的方式讓我們的任務能夠見到資料集的更多的角度,或者說方面,然後再透過把這些採樣之後訓練得到的top 模型整合起來,來讓我們的模型有更強的泛化能力,這在我們的場景裡面也是非常重要的一個方法。
#A4:這個開發週期剛剛講過,大概是三到四年的時間。然後人員投入的話,目前是有六、七個同學,在早期的話比這個人數還要少。
A5:首先這個同學提到的虛擬化 GPU,應該是指資源的分割與隔離吧。我們做機器學習平台的話,虛擬化 GPU 應該是必須的能力,就是說我們一定要把資源做到虛擬化,才能做更好的資源調度和分配。然後在這個基礎之上的話,我們可能還會把我們的GPU 的顯存和它的運算資源去做分割,然後把不同大小的資源塊去分給不同任務使用,但這一點實際上我們沒有在訓練裡面去用,因為訓練的任務通常會對計算的能力有更高的要求,不會是一個更小的資源消耗的應用場景,我們在推理的場景裡面是會用到的。我們在實際應用過程中發現虛擬化技術沒有很好的開源免費的方案,有部分的雲端服務廠商會提供一些收費的方案,所以說我們自己在部署上使用的是分時復用的方案,就是把一些計算要求高的任務和一些計算要求低的任務去做混布,來做到分時的複用,在一定程度上能達到提高容量的效果。
A6:我們是可以接近一個線性的加速比的,就是我們自己測的話,比較好的時候大概可以達到一個80到90的程度。當然,如果節點數量非常多,可能還會需要做進一步的優化,現在可能大家發論文或看到論文裡面會提到說32個或64個節點可以達到80、90的加速比,那可能是要有一些更專門的優化。但我們在機器學習平台裡面的話,有可能會要針對更廣泛的場景,在實際的場景裡面,大多數的訓練可能是4個GPU 卡、8個GPU 卡,最多16個GPU 卡就能夠滿足要求。
A7:我們的 AutoML 最理想的情況,使用者是不需要設定任何參數的。當然我們會根據使用者的需求,允許使用者自己去調整,或確定一些參數。時間消耗的話,就是我們所有的 AutoML 場景,我們的目標都是希望在一天之內完成最佳化。然後算力的話,如果是一般的大數據建模,比如樹模型XGB、LGBM 這些的話,就是一台機器都可以搞定;如果是GPU 的任務的話,要看這個GPU 任務本身的一個規模,基本上就是原有的訓練規模的2到3倍的算力,就可以完成AutoML 的訓練。
A8:這個問題剛剛提到過,就是像 Optuna,Auto-Sklearn 還有 AutoWeka 這些都是可以參考的。然後剛才有說到那個 automl.org 的這個網站,上面有很多資料,大家可以去學習。
A9:EasyDL 是百度的,我們這個框架是完全自研的。
今天的分享就到這裡,謝謝大家。
以上是度小滿自動機器學習平台實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!