日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决大规模机器学习的三大痛点?

發布時間:2024/9/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决大规模机器学习的三大痛点? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

阿里妹導讀:阿里巴巴電商平臺有上億的用戶和產品,每天產生百億規模的用戶反饋數據。比如淘寶首頁的猜你喜歡場景,每天就有100億規模的用戶行為數據。如此超大規模的訓練數據,給分布式機器學習帶來了巨大的挑戰,也引入了有趣的研究問題。

2017年,阿里巴巴推薦算法團隊和計算平臺PAI團隊合作打造了eXtreme Parameter Sever (XPS) 機器學習平臺,其中eXtreme寓意為“追求極致”, 體現我們希望設計具有極致性能和效果的機器學習平臺的愿景。XPS平臺已經廣泛全流量運行在手機淘寶的猜你喜歡、生活研究所、飛豬旅行和天貓推薦等大數據場景。

2017年雙11購物狂歡節當天,小時級XNN模型在猜你喜歡和天貓推薦場景上線,穩定和快速地使用了用戶雙11的實時行為信息,顯著提升了雙11當天的收入和用戶價值。在性能上,XPS平臺上的例行算法,現在每天能輕松處理100億規模樣本1000億規模的特征,算法運行速度快,容錯能力強,資源利用率高。本文將對XPS平臺的整體結構進行介紹,希望通過這些分享和大家交流我們在分布式算法設計和框架優化上的經驗。

近年來,阿里巴巴個性化推薦和個性化搜索給用戶帶來了很好的體驗,用戶行為數量也隨之大幅增長。特別是移動終端的業務飛速發展,用戶和商品兩個維度都呈現爆發式增長,用戶和產品狀態也隨時間持續動態變化。在這種動態的超大規模的數據體量下,打造高效的分布式機器學習平臺,精準預測用戶對產品的點擊率和轉化率是非常有價值的,也是很有挑戰的。

規模龐大且高頻變化的特征和樣本,給分布式機器學習平臺的設計帶來的挑戰具體可以歸結為樣本、特征和分布式規模三個方面:

在樣本方面,我們每天面對的是百億規模的訓練數據,累計六個月的歷史訓練數據就超過了萬億規模。顯然,傳統的全量多輪迭代的機器學習算法已經不太適合這樣規模的訓練樣本,因為這類算法需要消耗的計算資源極多,也無法很好地引入數據的時序性。

在特征方面,大規模樣本下特征總量輕易超過千億量級,傳統的特征編號方法需要消耗極多的機器資源和耗費很長的計算時間來完成特征編號,而且對新出現的特征也難以及時進行編號。從資源消耗和時間消耗上看,特征序列化編號方法已經是不可承受的步驟。此外,采用類似TensorFlow里通過string_to_hash_bucket的方法將特征映射到固定范圍的做法,雖然保證固定了tensor的shape,減少了參數總量,但是在特征總數巨大的時候則又引入了大量的哈希沖突,影響了算法效果。

在分布式規模方面,大規模特征下給Server的存儲和分布式計算性能帶來巨大壓力。舉例來說,1萬億個32位float浮點數就需要3.63TB的存儲空間,再加上需要保留的歷史梯度等,往往需要300到600臺server才能使各個進程的內存占用控制在一個合理范圍。Server數成倍增長,導致并行請求數也線性增長,給通信也帶來較大壓力。同時,存儲量以及單任務進程數的增長,也給集群調度、容錯、網絡、IO帶來較大的壓力。

面對這些挑戰,XPS平臺提出了很多創新的技術來應對,向“極限參數服務器”的目標前進了一步:

在樣本處理問題上,我們采用流式學習算法為主的算法選型來解決大規模樣本問題。在流式學習下,對每一批新數據,直接在當前模型上進行增量訓練,并產出下一個模型,無需加載全量數據進行多輪全量學習。流式學習算法選型,平衡了數據規模和資源消耗問題,更輕量級地應對了大規模樣本的問題;

在特征處理問題上,采用了將特征哈希映射為哈希值的方法替代特征編號機制。在節省內存、提升性能的同時,支持了特征的動態稀疏化正則機制和表示向量維度的動態擴張機制,解決了特征總量過大的問題;

在分布式規模方面,通過異步Checkpoint和Exactly Once Failover以及高性能的ArrayHashMap等機制,加上動態稀疏化正則機制等特征處理技術,保證了分布式訓練的性能,提高了Server的存儲效率。

面對這些大規模下的機器學習問題,eXtreme Parameter Server在阿里巴巴內部應運而生,針對性地解決了大規模樣本和大規模特征的挑戰,并得到了廣泛的應用。

XPS在阿里巴巴內部的猜你喜歡、天貓、購物鏈路、飛豬、生活研究所、阿里媽媽等業務場景廣泛應用,對用戶點擊率、線上收入提升、線上用戶價值提升效果顯著。

下面我們對XPS平臺的系統結構和數據流程、分布式優化、核心算法和算子體系進行介紹。

一、系統結構和數據流程

1.1 系統結構

XPS平臺整體結構如下圖所示。在數據源上,底層支持OSS File、MaxCompute離線存儲、流式數據源Streaming DataHub和Kafka等數據源。用戶在MaxCompute上同時完成離線數據處理和XPS算法調用。集群調度使用了阿里集團的飛天集群調度,能夠有效避免資源搶占,高效利用計算資源;在算法層,XPS提供了XNN/XFTRL/XSVD/XGBOOST/FM等算法;在業務層,我們支持了推薦、廣告和搜索等業務場景。

業務方通過MaxCompute中的SQL進行XPS平臺的算法調用,配置選擇需要的算法和優化算子,能夠快速地完成訓練任務的搭建。預估服務會來抓取XPS產出的模型,提供給線上做預估服務。XPS提供了完善的容錯機制,用戶任務失敗會自動被重新拉起訓練。

1.2 數據流程

目前,XPS平臺在阿里巴巴內部建立了完善的數據流解決方案,我們與阿里集團各個團隊合作,形成了從訓練數據生產、特征工程、模型訓練、模型評估、模型部署、模型打分的數據流程,XPS整體數據處理流程如下圖所示。

數據生產、特征工程、模型訓練和模型評估階段,我們采用了阿里的MaxCompute離線存儲系統。平臺上單個任務能夠輕松應對每天百億規模的訓練數據,千億特征規模的特征學習。通過支持大規模的特征,能充分挖掘了數據中蘊含的數據規律。模型訓練采用流式調度,在流式調度學習下,每次學習只需要加載之前存儲的模型,輸入新樣本進行訓練產出新模型,部署到線上進行預估。整體上,相比全量計算,流式學習節約了大量計算資源。

在預估服務端,我們采用阿里內部的rtp-xps服務,我們將模型轉化為tf格式,采用tf-serving來做預估服務。在模型評估方面,我們基于rtp-xps和MaxCompute研發了自己的一致性測試方案和工具,結合tf-serving可以實現快速的特征和模型一致性測試。在特征工程上,我們在開發XPS的過程中,開發了一套高性能的SessionServer服務,SessionServer提取了用戶一段時間的前文行為數據,這些數據更好地幫助我們理解用戶,也捕捉了用戶的實時行為特性。

二、分布式優化

為了能夠支持千億規模特征、萬億規模樣本,我們針對分布式機器學習場景下的異步通信做了專門優化。XPS框架自主研發了高性能的通信框架,在分布式機器學習場景下的異步通信場景下較傳統的MPI通信性能提升1~2倍。通過這些優化手段,XPS的Server數能夠橫向擴展至800個,完成千億特征萬億參數規模的機器學習任務。分布式優化技術具體包括下面幾個方面:

2.1 特征哈希化

XPS框架支持直接輸入哈希散列計算后的特征ID,或者對輸入的字符串特征自動計算哈希值。這樣整個計算過程和輸出模型均只保存哈希值。我們與在線inference服務打通,輸入樣本、輸出模型以及訓練迭代、通信都能直接哈希散列特征ID,在實際線上的模型訓練中,節省了一半的內存,并且性能也提升了1倍。

2.2 動態特征擴縮容

在流式學習場景,一個顯著的特點是快速變化的動態特征。每時每刻都有新的特征加入,也有老的特征被刪除,在引入實時的自動化會話特征之后,在較短時間內會有千億量級的特征插入和刪除。在這種情形下,需要底層框架能夠支持高頻、動態的特征增刪和通信。XPS框架針對高頻增刪特征場景做了專門的優化,重新設計實現了XPS-ArrayHashMap,采用realloc/mremap方式手工管理內存,插入、刪除KV的性能顯著高于std::unordered_map、google::DenseMap等哈希表實現;更為重要的是,XPS-ArrayHashMap支持直接零拷貝通信,消除了序列化、反序列化步驟。

2.3 全局Checkpoint和Exactly Once Failover

萬億參數的總存儲空間可以達到10TB級別。在這個量級的存儲空間需求下,使用400-800個server是很常見的需求。而大量的server進程和worker進程給分布式參數服務器帶來很高的穩定性和擴展性壓力。針對這種場景,XPS框架支持了多Worker并行加載、輸出模型,異步Checkpoint和異步Failover等機制,對節點失效能夠零感知自動化恢復。

不同于獨立的HPC集群,阿里集團的飛天集群在并行節點數量很大時,遇到個別節點故障的概率是比較高的。XPS框架支持完善的Failover功能,在各類流式數據源和離線數據源上,都支持Exactly Once的Failover,能夠將數據流和模型都恢復到節點失敗的前一刻,從而做到節點重啟后不丟數據和不重復計算。

2.4 高并發通信

XPS框架自主研發了高性能的通信框架,在分布式機器學習場景下的異步通信場景下較傳統的MPI通信性能提升1~2倍。針對大規模的特征場景,XPS的通信層對稀疏矩陣能夠支持零拷貝收發,并通過稀疏層、稠密層分別合并通信,減少通信包數量并降低了通信延遲。通過這些優化手段,使得XPS的Server數能夠橫向擴展至800個,從而能夠支持在訓練過程中存儲千億特征,萬億參數的規模。

2.5 表示學習優化

學習稀疏特征的表示向量對稀疏特征的計算和通信優化是最重要的,我們對稀疏哈希特征下的Embedding矩陣計算進行了深度優化,極致地優化表示向量學習中的性能。具體地,通過Pull通信操作得到的表示向量組雖然表示一個稀疏矩陣,但全部表示向量在一個連續的緩沖區中,用這段通信buffer數據可直接構造ArrayHashMap,不需要內存拷貝。通過這樣的哈希表實現的稀疏特征索引接口,計算時能夠以O(1)時間復雜度訪問到通信傳過來的各稀疏特征的表示向量,這樣,稀疏表示向量組無須轉換成稠密格式也能被高效地使用,消除了創建中間稠密矩陣的開銷,大幅加快了minibatch的Embedding矩陣計算。

三、核心算法

大規模的訓練樣本,全量多輪迭代算法即使優化得再高效,也無法避免每天需要重新訓練全量數據的問題,顯然這已經不適合大數據的發展。流式學習算法選型,能夠平衡了數據規模和資源消耗問題,輕松應對了大規模樣本的學習問題。以流式學習算法為核心的分布式機器學習平臺,在算法調參、算法評估、算法監控等各方面都有很多有趣的優化內容。

XPS旨在設計超大規模數據場景下高效的流式學習算法平臺,我們當前主要設計了線性算法XFTRL、雙線性算法XSVD和深度學習算法XNN。

3.1 XFTRL算法

XFTRL算法是對經典線性算法FTRL的擴展,是為了解決大規模數據下FTRL的一些缺點而提出的。我們在使用FTRL算法的時候,遇到了很多數值問題和穩定性問題,為了解決這些問題,我們設計了幾個優化點:

第一,引入正則防止奇異權重。在實踐中,我們發現FTRL算法在運行中容易發生權重突然陡增的現象,通過在FTRL中引入變量z的二正則,可以有效抑制權重突然過大的現象;

第二,引入權重版本控制和梯度平均讓更新更平滑。我們在更新梯度時,引入了Pull權重和Push梯度時的權重版本差打折機制,來減輕分布式下的梯度更新時worker和server的權重不一致的問題。我們進一步對minibatch下Server端的梯度和做平均,讓模型權重更新過程更加平滑;

第三, 引入流式學習下的參數衰減機制。我們對FTRL算法中的w, z和n等變量在每次更新完之后,乘以一個衰減系數,讓整個模型權重偏向最新數據,更好地捕獲數據的時效性。

3.2 XSVD算法

XSVD算法是針對電商系統中“用戶”、“產品”和“歷史行為產品”三個核心元素,通過改進SVD++提出的算法。SVD++是推薦領域經典的算法,但我們很少看到大規模數據場景下的解決方案。我們的核心動機是解決SVD++算法在萬億樣本下的可學習性問題。在流式學習的算法設計基調下,我們需要將SVD算法改造為流式場景下可學習的模式。很容易想到,對SVD++中的反饋產品隱向量累加項,只取當前行為的前K次行為作為反饋項,就可以實現流式學習。其次,為了讓XSVD算法也具有LR算法的表達能力,我們也將用戶,產品和會話特征也作為普通的特征,和隱向量一起做聯合學習。此外,為了豐富XSVD的表達能力,我們還在XSVD中引入阿里內部的SLRM算法的“模型特征化”的轉化思想,通過將SLIM算法中需要學習的產品序對關系映射為學習產品序對的特征權重的方式在XSVD中引入了SLIM思想。

3.3 XNN算法

XNN算法是我們提出的深度學習算法,其結構圖如下圖所示。XNN主要包含了輸入層(InputLayer)、轉化層(TransformLayer)、乘積激活層(MultiActiveLayer)和輸出層(OutputLayer)。

XNN網絡的InputLayer對輸入的離散特征、組合特征和連續特征進行處理,每個one-hot編碼的特征會進行short和long編碼,然后按照特征組進行累加(reduce_sum)操作。TransformLayer對輸入層InputLayer進行各種歸一化變化然后推送給MultiActiveLayer,MultiActiveLayer進行逐層的矩陣連乘和激活操作,最后頂層被Sigmoid激活算子作用后輸出。XNN的輸入數據按照特征組來組織,以降低在做reduce_sum時cache miss的代價。矩陣操作混合使用Eigen矩陣庫和CBlas矩陣庫,平衡數據接口的簡潔性和計算的高效性。

相比經典的深度學習算法,它主要有以下優點:

動態特征稀疏化正則。我們根據每個特征f的動態效用值Utlity(f)實現特征的動態增加和動態刪除, 當Utility(f)大于一定閾值時創建特征并學習特征權重,小于一定閾值時擦除特征并刪除特征權重。動態特征的設計思想有效控制了可學習的特征總量;
動態表達維度擴張。我們根據每個特征f的動態信息量Infomation(f),給不同特征賦予不同的隱向量維度,對重要特征進行高維壓縮,不重要的特征進行低維壓縮,提高特征價值,提升內存使用效率。
自動化會話特征建模。我們在模型中自動統計長期、中期和短期的會話特征,把會話特征加入神經網絡進行特征統計值和隱表達的聯合學習,自動化會話特征思想將在算子設計中詳細介紹。
分頻次正則。我們對不同頻次的特征采用不同的正則系數,以避免局部過擬合,最大化測試準度。在性能方面,猜你喜歡場景累計的全量數據,包含了千億規模的特征和萬億規模的樣本,單個樣本平均一百個特征,在5600核16TB內存的資源開銷下(和MR任務混部的普通CPU集群),XNN算法可以在7小時內完成每天增量的百億規模的流式樣本的學習。

XFTRL、XSVD和XNN算法是XPS平臺比較獨特的新算法,XPS平臺還支持以下經典算法: XGBOOST、Factorization Machine、OWL-QN、Word2Vector等。未來,我們會不斷擴展XPS的算法集,提出更多的創新算法。我們還將進一步研究流式學習下更多的工程特性,比如去中心化設計、慢機的智能化處理和通信層機制優化,建立更加完善的流式學習機器學習平臺機制。

四、算子體系

在開發XPS的過程中,我們抽象了一些通用的算法思想,逐步形成了XPS的算子體系。使用XPS平臺的算法用戶設計一個新算法的時候,設計完算法之后,只需要選擇系統中的算子進行搭配,就可以完成算法開發。算子體系的設計,不僅加速了算法構建過程,提升了算法開發、調試的效率,同時還增強算法的表達能力。我們主要設計了下面的算子:

4.1 流式評估算子

針對XPS的流式訓練數據,我們設計了流式評估框架,極大地加速了我們的調參工作,有效地幫助我們進行模型正確性效驗。流式測試算子具體思想也十分簡單,每經過M個Batch的訓練,我們就對未來的N個Batch的數據做一次評估,并觀察預估數據上的AUC, MAE, RMSE, 最大權值和最小權重等指標,同時密切關注預估準度PCOPC(Predict Click Over Post Click)。這樣的評估機制,極大地提升了參數調試的效率。同時,在訓練結束時,這些指標也反應出模型的質量,訓練框架會檢查這些參數,只有它們達到一定的正確性標準,才產出模型給預估服務模塊進行模型部署。

4.2 自動化會話特征算子

在點擊率預估和轉化率預估場景,用戶在最近一段時間內的會話特征的重要性是很高的。一般的系統中,用于提供會話特征的SessionServer能提供的只是一定維度的統計。我們提出了Automatic Session這種“特征模型化”的設計思想。具體而言,模型一邊進行數據訓練,一邊統計每個特征在一定的時間內的曝光和點擊,然后計算每個特征在不同周期的點擊率,加入到訓練特征中其他特征一起訓練。Automatic Session的加入,極大地豐富了我們的特征體系。我們提供了長中短三個衰減系數項,用戶可以在任何XPS算法中通過配置這三個衰減系數引入自動化會話特征算子,增強模型本身的表達能力。

4.3 梯度平均算子

頻率過低的特征的學習容易造成模型權重過度分散而引入過擬合,頻率過高的特征因為局部過度更新也容易過擬合。Server端每次更新權重的時候,會根據特征頻次對梯度做不同方式的打折。

4.4 異步更新控制算子

異步更新控制算子根據Pull模型權重和Push梯度時模型權重的版本差做梯度打折,防止了異步更新的效率損失。版本差低的梯度更新值置信度更高,版本差高的梯度更新值置信度更低。

除了以上算子而外,XPS里面還有激活函數選擇算子,正則選擇算子,變量衰減算子和安全性檢查算子。

對于XPS的算法開發用戶,我們在提供高效的分布式擴展性的基礎上,還抽象了一套面向算法開發者的SDK,對用戶屏蔽了復雜的分布式調度、通信和同步、異步等底層細節。算法開發用戶只需要考慮算法總體流程、Worker上計算梯度的邏輯以及Server上更新模型的邏輯,選擇算法算子體現中的算子,就可以開發出千億特征的算法。一個XPS新算法的構建過程,一般會包含下面9個步驟:

完成新算法Worker端梯度計算代碼;
選擇加入自動化會話特征,以豐富特征體系;
加入流式測試算子,方便快速調參和模型監控;
選擇梯度平均函數保持更新的平滑性;
選擇異步更新控制算子的版本差控制函數類型;
通過激活函數選擇算子來選擇激活函數;
通過正則選擇算子來選擇正則方法;
選擇變量衰減值,激活變量衰減算子,進行變量的流式衰減;
選擇安全性檢查算子對梯度值、更新值和模型最大最小值進行安全性檢查和安全性控制。

通過XPS的算子抽象設計,算法開發用戶對算法的優化算子有了更多靈活性的選擇。在這種方式下,用戶可以集中精力進行算法創新性研究,而忽略不必關心的技術細節。在阿里集團中,XPS平臺已經幫助用戶研發了SLRM新算法,其他新算法也在研究之中。

經過大量的實踐,eXtreme Parameter Server平臺已經成為阿里集團解決超大規模樣本和特征學習問題的新一代分布式機器學習系統。2017年,XPS被廣泛應用到阿里集團的搜索,廣告和推薦等場景,算法開發用戶數量也在快速增長。2018年,我們將在XPS中建設圖像和NLP算法;我們也正在完善TensorFlow編程模式,將支持用戶使用python編程接入TensorFlow,方便用戶能快速地編寫自己的模型,并且調用高效的XPS的Sever功能;我們還在整合強化學習算法框架和引入阿里基礎特征服務系統AliBasicFeatureServer。

高速發展的阿里集團,未來將會遇到更多的大數據研究問題,這些問題很挑戰,也很迷人。XPS將會在極限化參數服務器的設計理念下堅定前行。XPS算法負責人范朝盛和工程負責人陳緒表示: eXtreme Parameter Sever的目標是設計追求極致性能和效果的分布式參數服務器,我們走出了一步,未來還有很長的路要走,我們將努力用AI技術改變我們的生活。

總結

以上是生活随笔為你收集整理的如何解决大规模机器学习的三大痛点?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。