首页
/
每日頭條
/
生活
/
單機訓練速度提升640倍
單機訓練速度提升640倍
更新时间:2024-11-15 08:48:04

【導讀】:近期,快手宣布将在2020年春節前實現3億DAU,快手商業化營收步伐也随之加速。快手從2018年“商業化元年”開始推行個性化的廣告推薦。截止5月底,快手DAU已經突破2億。随着用戶和使用時長的迅速增長,為了更好地挖掘海量用戶和實時數據的核心價值,推薦模型需要快速叠代,從而對用戶興趣遷移的做出迅捷的反應。因此,模型訓練效率成為連接商業效率和用戶興趣的關鍵一環。

單機訓練速度提升640倍(單機訓練速度提升640倍)1

基于曆史原因,行業内推薦模型的訓練大都通過CPU來實現。然而随着模型從Logistic Regression到深度神經網絡的演化以及硬件的發展,基于CPU的訓練系統或許已經不再是最合适的解決方案了。本着不盲從、不抄襲、堅持原創技術路線的原則,快手西雅圖FeDA智能決策實驗室推出了名為"Persia"的基于GPU的廣告推薦訓練系統。以往需要50台CPU機器訓練20小時的系統,如今隻需要一台普通的GPU機器在一到兩小時完成,單機效率提升高達640倍。這意味着:

· 以往使用五十台計算機,一天隻能嘗試一個新想法,新系統隻需一台計算機,一兩個小時就能嘗試一個新想法。

· 以往同時隻能有一兩個同學嘗試新模型,新系統可以讓很多同學同時嘗試各自的新想法。

這套系統已經在快手商業化内部迅速推廣使用,讓大家可以快速試錯和測試新模型以及特征。項目發起者是一位來自羅切斯特大學的實習生。他提出的GPU解決方案得到他在羅切斯特大學的導師、FeDA智能決策實驗室負責人劉霁和公司内很多算法策略專家的肯定。

FeDA實驗室随即成立了項目組,并決定以項目發起人最喜愛的漫畫角色Persia(“佩爾西亞”)命名,展開了緊鑼密鼓的開發。團隊首先以PyTorch為基礎平台着手解決各種技術難題,然後實現并優化TensorFlow版本。經過4個月的開發和通力合作,Persia GPU廣告訓練系統初步成型。系統同時支持PyTorch和TensorFlow兩套方案,以方便模型開發同學的不同偏好。目前,Persia已支持多個業務項目,每位研發人員隻需要一台機器便可以迅速地叠代試錯。

單機訓練速度提升640倍(單機訓練速度提升640倍)2

快手AI概覽

Persia背後的技術

Persia實現高效訓練背後的技術包含GPU分布式訓練、高速數據讀取等多個方面。

一、 GPU 分布式運算加速模型訓練效率

近年來,GPU訓練已在圖像識别、文字處理等應用上取得巨大成功。GPU訓練以其在卷積等數學運算上的獨特效率優勢,極大地提升了訓練機器學習模型,尤其是深度神經網絡的速度。然而,在廣告模型中,由于大量的稀疏樣本存在(比如用戶id),每個id在模型中都會有對應的Embedding向量,因此廣告模型常常體積十分巨大,以至于單GPU無法存下模型。目前往往将模型存在内存中,由CPU進行這部分巨大的Embedding層的運算操作。這既限制了訓練的速度,又導緻實際生産中無法使用比較複雜的模型——因為使用複雜模型會導緻CPU對給定輸入計算時間過長,無法及時響應請求。

廣告模型的構成:在廣告模型中,模型往往由下圖中的三部分構成:

單機訓練速度提升640倍(單機訓練速度提升640倍)3

l 用戶id、廣告id 等構成的Embedding層。每個id對應一個預設大小的向量,由于id數量往往十分巨大,這些向量常常會占據整個模型體積的99%以上。假設我們有m1種這樣的id: {idi}i=1m1,它們對應的Embedding層 {Ei}i=1m1将會輸出m1個向量:{Ei(idi)}i=1 m1。

l 圖像信息、LDA等實數向量特征。這部分将會與id對應的Embedding vector 組合在一起,輸入到DNN中預測點擊率等。假設我們有m2種這樣的向量:{densei}i=1m2。

l DNN。這部分是一個傳統神經網絡,接受Embedding vector和實數向量特征,輸出點擊率等希望預測的量:prediction=DNN([E1(idi),E2(id2),…,Em1(idm1),dense1,dense2,…,densem2])。

Persia使用多種技術訓練廣告模型,我們将在接下來幾節依次介紹。

1. 大模型Embedding分片訓練

廣告模型的Embedding部分占模型體積和計算量的大部分。很有可能無法放入單個GPU的顯存中。為了使用GPU運算以解決CPU運算速度過慢的問題,但又不受制于單GPU顯存對模型大小的限制,Persia系統使用多GPU分散存儲模型,每個GPU隻存儲模型一部分,并進行多卡協作查找Embedding向量訓練模型的模式。

Persia将第i個Embedding層Ei 放入第 (i%總顯卡數) 個顯卡中,從而使每個顯卡隻存放部分Embedding。與此同時,實數向量特征和DNN部分則置于第0個顯卡中。在使用Persia時,它将自動在各個顯卡中計算出 {Ei}i=1m1的值(如果對于一個Embedding輸入了多個id,則計算其中每個值對應的Embedding vector的平均),并傳送給第0個顯卡。第0個顯卡會合并這些Embedding vector和實數向量特征,輸入DNN中進行預測。

當求解梯度時,第0個顯卡會将各個Embedding層輸出處的導數傳回各個顯卡,各個顯卡各自負責各自Embedding的反向傳播算法求梯度。大緻結構如下圖所示:

單機訓練速度提升640倍(單機訓練速度提升640倍)4

GPU分配的負載均衡:由于将 Embedding 依次分配在每個GPU上,可能導緻部分GPU負載顯著高于其他GPU,為了讓每個GPU都能充分發揮性能,Persia訓練系統還支持對Embedding運算在GPU上進行負載均衡。

給定k個GPU,當模型的m1 個Embedding層對應GPU負載分别為 l1,l2,…,lm1,Persia将會嘗試将Embedding分為k 組S1,S2,…,Sk,并分别存放在對應GPU 上,使得每組∑i∈Sjli,∀j 大緻相等。這等價于如下優化問題:

minS1,…,SkVariancej[∑i∈Sjli],

s.t. ∑i∈SjVi≤C,

其中Vi 是第i個模型的大小,C是單個GPU的顯存大小。Persia使用貪心算法得到該問題的一個近似解,并依此将不同Embedding均勻分散在不同GPU上,以達到充分利用GPU的目的。當需要精确求解最優的Embedding放置位置時,Persia還可以通過integer optimization給出精确解。

2. 簡化小模型多 GPU 分布訓練

當模型大小可以放入單個GPU時,Persia也支持切換為目前在圖像識别等任務中流行的AllReduce分布訓練模式。這樣不僅可以使訓練算法更加簡單,在某些情景下還可以加快訓練速度。

使用這種訓練模式時,每個GPU都會擁有一個同樣的模型,各自獲取樣本進行梯度計算。在梯度計算後,每個GPU隻更新自己顯存中的模型。需要注意的是即使模型可以置于一個GPU的顯存中,往往Embedding部分也比較大,如果每次更新都同步所有GPU上的模型,會大大拖慢運算速度。因此Persia在AllReduce模式下,每次更新模型後,所有GPU使用AllReduce同步DNN部分,而Embedding部分每隔幾個更新才同步一次。這樣,即不會損失太多信息,又保持了訓練速度。

此外,在TensorFlow上,Persia還支持TensorFlow的"Replicated", "PS", "PS" "Asynchronous" 模式多卡訓練,它們的主要區别如下圖:

單機訓練速度提升640倍(單機訓練速度提升640倍)5

二、 模型準确度提升

同步更新:由于普遍使用的傳統異步 SGD 有梯度的延遲問題,若有n台計算機參與計算,每台計算機的梯度的計算實際上基于n個梯度更新之前的模型。在數學上,對于第t步的模型xt,傳統異步SGD的更新為:

xt 1←xt−learning rate×g(xt−τt),

其中g(xt−τt)是訓練樣本的損失函數在τt 個更新之前的模型上的梯度。而 τt 的大小一般與計算機數量成正比,當計算機數量增多,xt−τt 與 xt 相差就越大,不可避免地導緻模型質量的降低。Persia的訓練模式在Embedding分片存儲時沒有這種延遲問題,而在AllReduce模式下也僅在Embedding層有常數量級的延遲,因此模型質量也有所提升。

優化算法:與此同時,Persia還可以使用Adam等momentum optimizer,并為其實現了sparse版本的更新方式,比PyTorch/TensorFlow内置的dense版本更新在廣告任務上快3x-5x。這些算法在很多時候可以在同樣時間内得到比使用 SGD或Adagrad更好的模型。

三、 訓練數據分布式實時處理

快手Persia的高速GPU訓練,需要大量數據實時輸入到訓練機中,由于不同模型對樣本的需求不同,對于每個新實驗需要的數據格式可能也不同。因此 Persia需要:

· 簡單靈活便于修改的數據處理流程,

· 可以輕易并行的程序架構,

· 節約帶寬的數據傳輸方式。

為此,Persia系統實現了基于Hadoop集群的實時數據處理系統,可以應不同實驗需求從HDFS中使用任意多計算機分布式讀取數據進行多級個性化處理傳送到訓練機。傳輸使用高效消息隊列,并設置多級緩存。傳輸過程實時進行壓縮以節約帶寬資源。

1. 并行數據處理

數據處理pipeline:為了使Persia獲取數據的方式更靈活,Persia使用dataflow構建數據處理pipeline。在Persia中可以定義每一步處理,相當于一個函數,輸入為上一個處理步驟的輸出,輸出提供給下一個處理步驟。我們定義這些函數為 {fi}i=1p。在Persia中,這些函數可以單獨定義修改。在每個函數的入口和出口,Persia有數據隊列緩存,以減少每個函數獲取下一個輸入的時間。這些函數的運行可以完全并行起來,這也是pipeline的主要目的。以在食堂就餐為例,pipeline的運行就像這樣:

數據壓縮和傳輸:全部處理之後,數據處理任務會将數據組成mini-batch并使用zstandard高速壓縮每個batch,通過ZeroMQ将壓縮數據傳輸給訓練機進行訓練。定義batching操作為函數 B,壓縮操作為函數C,則每個數據處理任務相當于一個函數C(B(fp(fp−1( f1(raw data from HDFS))))) 。

Queue server:在Hadoop集群中Persia将啟動多個數據處理任務,每個數據處理任務之間完全獨立。數據處理任務本身并不知道處理哪些數據,而是通過請求訓練機得知訓練數據的位置。這樣的好處是,在Persia中訓練機可以應自己需求動态控制使用什麼樣的訓練數據,而數據處理任務相當于一個無狀态的服務,即使訓練機更換了新的訓練任務也不需要重啟數據處理任務。具體來說,在Persia中訓練機會啟動一個queue server進程,該queue server将會應數據處理任務的請求返回下一個需要讀取的數據文件。Persia的每個數據處理任務會同時從queue server請求多個文件,并行從HDFS讀取這些文件。

整個系統的構造如下圖:

單機訓練速度提升640倍(單機訓練速度提升640倍)6

2. 實時訓練

由于Persia的數據處理任務在獲取數據時完全依賴于訓練機的指示,Persia支持對剛剛生成的數據進行在線訓練的場景,隻需要使queue server返回最近生成的數據文件即可。因此,Persia在訓練時的數據讀取模式上非常靈活,對queue server非常簡單的修改即可支持任意數據讀取的順序,甚至可以一邊訓練一邊決定下一步使用什麼數據。

3. 更快的數據讀取速度:訓練機共享内存讀取數據

由于訓練機要同時接收從不同數據處理任務發送來的大量數據,并進行解壓縮和傳輸給訓練進程進行實際訓練的操作,接收端必須能夠進行并行解壓和高速數據傳輸。為此,Persia使用ZeroMQ device接收多個任務傳輸而來的壓縮數據,并使用多個解壓進程讀取該device。每個解壓進程獨立進行解壓,并與訓練進程共享内存。當結束解壓後,解壓進程會将可以直接使用的batch樣本放入共享内存中,訓練任務即可直接使用該batch進行訓練,而無需進一步的序列化反序列化操作。

訓練效果

Persia系統在單機上目前實現了如下訓練效果:

· 數據大小:百T數據。

· 樣本數量:25億訓練樣本。

· 8卡V100計算機,25Gb帶寬:總共1小時訓練時間,每秒64萬樣本。

· 8卡1080Ti計算機,10Gb帶寬:總共不到2小時訓練時間,每秒40萬樣本。

· 4卡1080Ti達30萬樣本/秒,2卡1080Ti達20萬樣本/秒。

· Persia同樣數據上Test AUC高于原ASGD CPU平台。

· Persia支持很大batch size,例如25k。

綜上,Persia不僅訓練速度上遠遠超過CPU平台,并且大量節省了計算資源,使得同時嘗試多種實驗變得非常方便。

展望:分布式多機訓練

未來,Persia系統将展開分布式多GPU計算機訓練。有别于成熟的計算機視覺等任務,由于在廣告任務中模型大小大為增加,傳統分布式訓練方式面臨計算機之間的同步瓶頸會使訓練效率大為降低。Persia系統将支持通訊代價更小、系統容災能力更強的去中心化梯度壓縮訓練算法。據快手FeDA智能決策實驗室負責人劉霁介紹,該算法結合新興的異步去中心化訓練 (Asynchronous decentralized parallel stochastic gradient descent, ICML 2018) 和梯度壓縮補償算法 (Doublesqueeze: parallel stochastic gradient descent with double-pass error-compensated compression, ICML 2019),并有嚴格理論保證,快手Persia系統在多機情景下預計還将在單機基礎上做到數倍到數十倍效率提升。

來源:消費日報網

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
荷葉羅裙一色裁下一句是什麼
荷葉羅裙一色裁下一句是什麼
荷葉羅裙一色裁下一句是什麼?荷葉羅裙一色裁下一句:芙蓉向臉兩邊開,下面我們就來說一說關于荷葉羅裙一色裁下一句是什麼?我們一起去了解并探讨一下這個問題吧!荷葉羅裙一色裁下一句是什麼荷葉羅裙一色裁下一句:芙蓉向臉兩邊開。《采蓮曲》【作者】王昌齡...
2024-11-15
徐州女子學校
徐州女子學校
徐州一名女學霸憑借六門學科第一的成績,霸榜學校的光榮榜,她的照片和姓名多次上榜,其中,語文、數學、英語、曆史、生物、政治獲“單科優秀”,以六科第一的成績拿下第一,成為“學習标兵”,高顔值與實力并存!網友評論:她是天才吧,一科第一可以是努力,...
2024-11-15
burberry圍巾真假分别
burberry圍巾真假分别
Burberry家的格紋圍巾可謂是秋冬必備的單品了,不過市面上的假貨也是多到超乎想象~今天就來跟小奢一起看看巴寶莉圍巾如何辨别真僞吧!1.看logo标:正品Logo字體較粗,注意字母B右側和U底部弧度偏尖,而仿品Logo字體偏細,字母B右側...
2024-11-15
為什麼現在老鷹越來越少
為什麼現在老鷹越來越少
老鷹的壽命可以長達70歲。但是在40歲時,它必須突破一個死亡陷阱,因為:它的爪子已經蒼老到沒法抓東西;它的喙也已經老化得貼近胸口,無法啄食;它的羽毛也鈣化到飛翔起來都很艱難。40歲老鷹的處境,像不像40歲人遇到的“中年危機”,上有老、小有小...
2024-11-15
關于鮮花的詩句
關于鮮花的詩句
關于鮮花的詩句?雨打梨花深閉門,忘了青春,誤了青春____唐寅《一剪梅·雨打梨花深閉門》,下面我們就來說一說關于關于鮮花的詩句?我們一起去了解并探讨一下這個問題吧!關于鮮花的詩句雨打梨花深閉門,忘了青春,誤了青春。____唐寅《一剪梅·雨打...
2024-11-15
Copyright 2023-2024 - www.tftnews.com All Rights Reserved