大家好 今天我們分享的主題是八卦分布式生鏈加速積極基於Covernetis在快手的一些成功經驗我們的團隊來自於快手AI平台和蘇利式聯邦理工學院我是連向如目前在快手AI平台擔任Senior Staff Research Scientist主要在團隊負責各種複雜AI產品的落地問題八卦框架的主體已經在今年開源大家可以通過掃描屏幕上的阿維碼或在Data上搜索八卦拼音來訪問我們的開源項目大家好 我是來自於快手AI特別訪問的李鑫鴻我在快手AI特別訪問的傑傑或者快手AI趴著拼音的研發與駕駛工作主要聚焦為虐這些叫做充電管理以及GTA-S的作業管理相關的工作首先 近些年來深度學習在工業界和學術界都產生了重大的影響像是計算機視覺自然語言處理 語音識別內容或廣告推薦等等重要的領域都免不了與訓練深度學習模型打交保通常來講深度學習的應用分為兩部分一部分是通過大量樣本對神經網絡進行訓練另一部分是將訓練好的模型部署到生產環境中進行推理和使用推理階段所使用到的推理服務一般和COVERNETX上最常見的外部服務非常相似而訓練部分則非常複雜涉及多個角色分布式的高性能協作我們本次的分享也主要圍繞訓練過程進行在快手我們在AI應用中所面臨的一個重要問題就是如何快速地處理大規模的訓練數據在推薦場景中快手每天要處理3億日活業用戶的行為數據在多媒體場景中快手所存儲的視頻每天的觀看時長加起來高達上萬年並且每秒鐘得有幾百個新上傳的視頻需要處理這些都一定程度上導致了模型的訓練時間成為業務迭代過程中的一個重要瓶頸在實際工業場景中想要解決這個問題並不是一件容易的事情首先不同訓練任務需要不同的軟件依賴和環境其次公司內要管理大量同時運行的訓練任務第三不同於一般的外部服務訓練節點之間有非常高的通訊量對通訊效率和延遲都具有極高的要求最後經過這些年的發展深度學習模型的計算開銷也變得越來越大對於第一個問題不同訓練任務需要不同的軟件依賴和環境近些年來實際上已經通過容器技術完美的解決了這個問題對於第二個問題管理大量同時運行的訓練任務問題其實社區在這個方向有不少結束的工作比如Coop Flow和Vocano在任務管理和資源調度上做了相當多的工作來嘗試解決這個問題但同時在實際落地場景中我們發現這個問題還有不少效盡一步發掘的地方比如在大規模計群中隨著時間變化往往有數量不等的閒置資源放出而訓練任務目前並不具有自動有效的利用閒置資源的能力再比如在負載業務場景中如果涉及到多庭協作就會產生對高級的資源分享和計費策略的需求對於第三個問題訓練任務的性質決定的節點間有非常大的通訊開銷對通訊效率和延遲有極高的要求Vocano在這方面實現了不少高級教育策略比如通過將任務使用的節點調度到一起降低節點間的通訊成本這方面八卦從另一個角度思考問題在有效利用這些高級教育策略優化的同時可以對訓練任務本身進行加速並降低訓練任務本身的通訊開銷綜合以上幾點八卦的目標是提供一個一戰式的解決方案解決前面所述的後三個問題首先在Covernet上有完善的支持對工業及各種場景提供訓練任務的加速方案其次對訓練任務本身提供一戰式的加速包括數據流讀取數據流處理到提渡計算等各個方面降低最後八卦希望降低訓練任務節點間的通訊開銷讓部署訓練任務對機器硬件網絡條件的要求限制降低我們接下來分三個小節來詳細介紹這三方面八卦所做的工作接下來我們有請Apple的高級工程師李湘宏來詳細介紹在Covernet上的工作以支持八卦的各種訓練場景我是李湘宏然後我在快手Apple我主要負責快手ARP2的平台的開發業加工工作然後接下來我將從快手的工業及實踐來講一下我們如何是來支持八卦的首先我們說從兩個大的方面來主要講解一個是在用戶在隊員的使用效率提升方面另外就是在用戶的T8的操作性能和可用性方面首先在用戶的大家使用提升方面我們做了兩個幾個事情一個是多種擴燒容然後另外就是多組合資源共享機制然後多一堆列主要是多一堆列另外就是我們在支持了常用的組調度以及聚合調度工程之後我們做了基於我們場景下的最愛機加多一機多種資源保障機制然後在用戶提升方面的話我們通過APR-7的catch包括我們在機群管理上面的catch還有我們的off-header catch來支持了來保護了機群的APR-7然後提升了機群的可能性另外一次我們off-header裡面也對帶著我們機群高病發的情況下做了一些病發限制然後來保證了機群的SLA首先現在我們來看一下我們如果通過各種資源的發現機制來支持八卦特度護手輪的首先我們有一個catch control manager然後通過不停地監聽多個機群的資源事件然後表述一個認為完成了之後後來把事件上報到上次的作業管理廠作業管理廠的話感知到這些是任務完成任務完成幫助事件之後它會根據一定的規則來觸發任務的自動下發在另一個方面我們可以看到我們可以通過拿到資源的監控信息然後根據資源的負擔然後來感知任務的進行自動下發對然後我們在調頭器和對聯力和對聯力上面我們做了什麼東西呢在GDP層面的話我們就通過首先我們都知道在同樣的這件事情往下不說調頭策略其實是對這件事的差異是非常大的然後我們的方案是做什麼呢通過支持根據流行的一些調頭策略包括股調度表調度和對家層的調度這些調頭策略之後我們就做了補占物理機調度感知透過結構調度通過這些調頭策略來適配我們的AR信用場景同時讓我們支持任務局的強債這個任務局強債是沒概念的比如說我們T8的默認調頭器是炮的級別強債對於一個AR信用人員來說大多數情況下一個炮的被強債之後可能整個作業就不可用了所以說我們通過支持任務局的強債來做到真正的AR用的強債然後對多級這些地點上其實我們在一個富達的公司裡面有多種組織的架構然後做多後來使用這些資源但是我T8和默認任務局的責任隔離是滿足不了富達結構的資源使用了訴求的所以說我們通過構建多級堆裂來讓我們做個不沒資源共享資源然後達到資源的對大化使用同時我們就對資源做了分級首先對每一個作用都有一個保障考察從保障考察之後如果還可以超用一些考察或者考用考察然後通過保障考察和考用考察結合來最大化了進行的使用然後我們再繼續的我們上面講的再繼續的調度和多元對列以及多種或什麼方面來提升了多元的使用效率那我們接下來再講我們如果說在公費界長期下在高並發任務長期下來怎麼保提高機制的可用性然後來保護其他機制首先我們卡特長出了是一個多機制的管理中心它都要做什麼呢首先要通過通過兼經各個提拔它進行的事件然後來完成一些泡的行情任務信息然後這樣用戶再查詢一些任務實力事件的時候或者任務實力的時候它又不需要帶去提拔它去查或者直接通過我們的開始去查我們也對比過在一個五千台機器的執行裏面假如說我們起一個一百多萬的任務這個差異效率是比提拔和莫里德去查要提升很優惠的除了在安全性方面的話我們通過對一些動態定義一些安全策略然後對於用戶不同用戶的高位操作這些攔截既要保證執行的安全性首先另外一個就是我們OPRICE我們包包OPRICE的話首先我們不同於業界常做的一些對於任務控制去裸的去查去BUS的集群我們做的事情就是說通過一個開始然後我們會監聽整個包包所有是所有任務的角色狀態信息然後對於這種有MUS和無可的情侶依賴的時候它不需要帶帶去的目標它不需要去查一篇APP它只需要通過查我們開始接連就可以快速的獲得到任務的狀態或者是角色的狀態盡要保護了K8的APS它的可運性同時我們有有動態的話要獲取整個集群的負債通過查詢機身的負債如果在高負債情況下我們會對於我們包包OPRICE進行的相應的訪問頻率限制來保證集群的SRA下面我們看結合一個八卦我們看上去了一個OPRATE看一下怎麼來動態使用八卦首先我們和常規的一些框架都有一樣有對大的負面說都要負面說然後用我的整個負面說之後可以通過我們隨著壓冒文件來把八卦擴容然後將任務起來接下來由我繼續介紹八卦在一戰時訓練加速方面的工作通過一戰時的訓練加速訓練任務本身的開銷可以顯著降低結合COVERNATIS的任務管理可以使用戶在一般的進行中也能完成更複雜的訓練任務面對著這種越來越複雜的訓練任務和越來越大的數據級我們自然會想到在算法和系統兩方面我們能做出怎樣的努力呢首先我們書裡深度學習通常的流程一般是多台機器並行的從S3、HDFS等存儲服務中進行數據讀取並對數據進行預處理比如CV場景中常常會對數據進行旋轉裁減等增廣操作預處理以後的數據在煤台機器上進行T度計算這期間會涉及機器與機器之間的信息同步最後煤台機器對模型並行的進行更新誅而復始我們觀察到在實際場景的任務中這裡面每個環節都有可能成為整個訓練任務的瓶頸因此八卦嘗試對每個流程都提供相應的加速工具從而減少每一個每一個步驟的時間消耗八卦的加速效果目前已經在較多場景得到的驗證比如在快手內部的核心業務場景中對於大規模自然語言處理任務有65%的加速對於G3G視覺任務有20%到30%的加速對於語音識別任務也有20%到30%的加速對於推薦任務這種任務的特點是模型相對簡單但是通訊量又特別大在這種場景下八卦的加速效果有更進一步的體現能夠達到100%以上的加速在公開數據和模型上我們選擇通訊量較大的VGT16進行BanterMark在128張的V100上進行測試八卦提供的算法相對於現有的分布式訓練方案比如拍套池自帶的方案平均有60%的提升在帶寬較低的情況下比如網絡條件是實際BPS這種優勢會更加明顯下面我們來逐個模塊分享八卦所做的事情在數據讀取加域處理這一步通常可能的卡點有三類卡數據讀取卡域處理計算卡數據不均衡卡在數據讀取其實很好理解就是讀物上游存數據的服務成為了訓練平均卡域處理計算往往是機器的CPU算力處理數據比如各種旋轉採檢等等的效率跟不上GPU做模型計算的效率導致了平均卡在數據讀取和卡在域處理計算這兩種情況常常出現在輸入是圖片或者視頻的這種計算機視覺類任務中卡數據不均衡更常見於推薦自然語言處理或者是語音信號處理的任務中這類任務特點是每個樣本都有一個長度而且可能不一樣長導致同樣的Batch Size有的機器收到的數據計算量比較大有的機器收到的數據計算量又比較小而機器之間是使用一種同步的方式進行訓練每一次都需要等待最慢的機器計算完成導致了這種同步上的平均在八卦中對這幾種情況都實現了相關的優化首先是卡數據處理和卡在域處理計算的情況我們注意到其實多數深度學習任務中都需要對數據進行反覆的訓練因此我們其實可以在第一次訓練時就將訓練的數據和它計算的產物進行分布式的緩存當再次遇到同一條數據的時候我們直接從緩存中獲取處理的結果從而就可以大幅的提升效率那這裡主要要注意的一點其實是並不是所有的預處理操作都可以緩存比如說有些旋轉等預處理操作它帶有隨機性其實是希望每次都生成不同的處理結果的那這個時候我們就是要有選擇的去緩存適合緩存的部分在八卦中提供了Cache Dataset和Cache Loader的功能去做這種分布式緩存的工作使用的時候可以直接去包裝Petouch Dataset的用戶的使用成本很低這就能夠解決大部分公司內卡在出去流場境的效率問題了我們的統計上平均有2.7倍的訓練速度提升對於這類任務接下來就是對於卡在數據部均衡的人物對於這部分任務八卦提供了Load Balance Data Loader的功能同樣可以直接包裝Petouch Dataset通過定義每個樣本的計算複雜度定義了之後Balance Data Loader可以自動的去做每個接點上所處理的Batch的計算量的均衡從而讓每個接點它的計算量都儘可能相同減少接點間相互等待的情況最大化的去增加系統的訓練效能以上是數據讀取和預處理的部分八卦是對整個訓練流程中其他部分有更進一步的加速功能下面我們來詳細介紹提渡計算和更新的這一部分這其實是整個訓練流程中主要的計算的發生的部分這方面主要有三部分的優化思路一個是對算子進行加速和融合這裡的所謂加速和融合主要是比如使用高效的實現替換像是Petals等等訓練框架中實現的較為低效的部分舉個例子比如可以通過實現更高效的幾證成法從而實現效率更高的這種線性變換層用這種更高效的線性變換層去替換Petals中原來就有的這種線性變換層的實現那達到整個所有用了線性變換層的模型的加速這就屬於這一類此外我們還可以將原模型中多個分別執行的操作實現為單個的高效操作比如說將整個Attention層的操作實現為一個高效的計球算子這些做法其實在模型推理的領域已經形製多年並且有非常好的效果但是在訓練的領域還處於一個探索階段第二個優化思路是說對T度的更新進行融合這裡的融合主要是指優化器對模型更新的階段在溫柔的情況下比如Petals它是一層一層的去更新參數而對它進行融合之後可以變成多層一起去更新參數多層一起更新參數的效率比往往會比一層一層更新要高很多從而去加速優化器的更新過程第三個是兼容比如像Petals等等訓練框架它本身的一些加速功能這裡面包括比如混合精度訓練庫達Graph優化等等這樣可以達到八卦的優化和Tals本身的一些優化相符相成的目標在八卦中在算子加速和融合這一方面八卦提供了高性能的算子和融合的算子庫叫八卦.FastOperators這部分我們內部還在不斷實驗即將開源在T度更新和融合加速方面八卦提供了八卦.Country.FuseAutomizer工具它可以對任意的這種PetalsAutomizer去實現前面所數的多層參數同時更新的操作從而加速優化器更新的速度同時我們在做這種加速功能的時候都會同時保證這些優化不會影響Petals已有的一些比如混合精度訓練這種優化功能的使用從而得到多個優化可以一起開相符相成的效果接下來我們聊聊八卦最重要的通訊優化功能這也是八卦項目發起時最開始時的訓練加速功能八卦的項目的名字其實也和其中的算法息息相關在後面的介紹中會體現出來在通訊優化方面八卦主要是通過系統和算法的聯合優化去達到最高的訓練效率首先是在底層的通訊層面八卦的通訊基於目前State of the art的NVIDIA NICO通訊庫但是同時對NICO實現比較慢的部分比如像TCP的通訊邏輯提供了八卦MAT工具這個工具基本上重寫了NICO的TCP通訊邏輯在測試中相比直接調用NICO的拍套時原生分布式方案或者HorrorWord等等第三方的方案如果開啟了八卦MAT八卦能夠將通訊效率提升83%將N2N的訓練效率提升35%而使用八卦MAT非常簡單不需要修改任何的用戶代碼只需要在啟動面臨中添加以行Enable八卦MAT的參數就可以了對於這種分布式的訓練任務目前實際上已經有很多公開的解決方案比如說Uber公司的HorrorWord的框架頭條的BatPS框架NVIDIA的Apex還有VIRON的DeepSpeed等等這些框架往往都基於最經典的多機同步算法而且在不同的應用場景中都取得了顯著的成功但是近些年來在學術界和工業界都出現了一批針對深度學習任務進行高度優化的這種分布式訓練和通訊的模式比如說市中心化的分布式訓練比如說義務的分布式訓練比如說分布式通訊中對通訊內容的量化和習俗化這些算法雖然很有用但是目前還沒有一個統一的框架能夠讓用戶比較容易的去享受到這算法帶來的好處造成了用戶實踐還有分布式最新進展之間的鴻溝我們八卦的工作其實是希望能夠作為一個橋樑讓用戶享受到這些深度學習領域最新的進展為他們的實際應用去加速這些新的算法往往也能夠降低訓練任務中節點之間的開銷這對於比如說在大規模CoopernetX集群上去部署訓練任務是非常有幫助的首先在算法的層面上這些高級的算法主要包含兩個層次一個是通訊的機制方面比如說可以有中心化的通訊算法所有節點通過一個中心節點進行通訊節點之間保持步調一致也可以有一步的通訊算法不同節點間的通訊一步執行不需要相互等待可以有去中性化的這種通訊算法節點之間任意連接每個節點只和零金的節點進行通訊另一方面在數據傳輸的信套性質方面我們可以做這種無損的數據傳輸也可以將數據進行吸輸化或者量化壓縮之後再傳輸這些模塊化這些不同的通訊方式可以有機的結合起來比如說一步去中心化和無損的傳輸就可以組合出一種猛心的分布式算法這種模塊化的組合其實是八卦通訊庫中最有趣的部分這些通訊機制組合可以和當前的深度學習技術戰有效的結合起來上到各種優化算法中到拍套式這種深度學習的框架下到不同的通訊協議這其實也解釋了八卦名字的由來八卦內部實現的這些最新的算法比如去中心化算法一步算法T度壓縮等等這些算法其實很像八卦新聞為什麼這麼說呢第一個是從單機單卡的訓練到多級多卡每個卡都會把自己的計算結果去累加傳播這個好像這個過程好像就是每個人將自己知道的信息傳遞給別人又從別人那裡去獲取信息最後完成全局的信息同步如果把這個GPU之間的信息同步類比成人和人之間的信息同步社會經驗告訴我們八卦新聞或者小道消息其實是最高效的方式因為傳播速度特別快這也是八卦框架這也與八卦框架中的這個算法一一呼應比如去中心化的通訊八卦消息的傳播一般來說都是都不是中心化的大家往往都是和自己熟悉的人打交道交換信息這就是一種去中心化的模式對應到八卦框架本身支持去中心化的分布式訓練算法每個GPU只和自己臨近的GPU進行通訊相比中心化通訊這種模式可以有效的去降低通訊的代價完成同樣的熟練效率再說一部通訊八卦消息的傳播往往都是一部的並不是所有人同時進行對應到八卦框架這種通訊模式就是GPU之間的一部通訊這種通訊和這種計算和通訊不要求同步每個GPU不需要等其他GPU都有消息的才做同步只要計算完成了就可以和其他GPU去做通訊通訊完成繼續域執行計算這樣可以省去所有GPU同步的開銷最後是信息壓縮像是八卦消息一般都會有一些熱搜關鍵詞嚴簡一該的將最重要的信息傳遞出去而不會顯示太多的細節否則大家也記不住雖然總的信息傳播量很少但是溝通效率非常高對應到八卦框架我們支持GPU計算出的基督去做信息壓縮留下最重要的部分極大的降低通訊上的開銷這些算法其實都有嚴格的理論保證去證明它的收斂性具體的結果可以從右下角這本書中去更詳細的聊幾遍那這些不同的算法往往互相之間也有趨勢在不同的場景下有的時候可能算法A效率更高有的時候可能算法B效率更高這主要取決於對於同樣一個敗詞樣本它到底要進行什麼樣的通訊機制才能完成這個樣本的訓練有的算法可能對網絡的延遲要求更高有的算法可能對網絡的帶寬要求更高有的算法可能對不同節點之間它完成的時間是否一致要求更高不同的算法的開銷我們都有相應的證明放在這個表格裡在使用不同的算法的時候我們也會參考不同的算法它適用的條件來去做相應的取捨但是我們要注意到一點是對於這些算法簡單的去實現它們往往並不能直接觀測到明顯的性能收益這個原因是對於一個完美的或者成熟的系統來說算法只是它的一方面如何實現其實也是一個非常重要的因素對於同一個算法使用不同的實現方式往往它體現出來的性能差異也是很大所以要想去最大化的得到這些算法帶來的性能提升我們其實在算法實現上也需要下比較大的功夫比如說以這種最簡單的Orduce SSD這種分布式訓練模式來舉例子的話在單卡上也就是不做分布式訓練它的過程是什麼樣呢是先backward第四層在我們例子裡是最後一層得到第四層的T度然後第三層得到第三層的T度然後得到第二層第一層的T度這樣所有的T度整個模型的T度就拿到了然後將整個模型的T度去更新到update到我們的模型上然後再去進行下一輪拿到樣本去做前向傳播forward的第一層forward第二層forward第三層forward第四層這樣完成了一個atavision的訓練那像hard或者是pattern實質帶的這種分布式訓練它是怎麼做的呢它首先它就用這種hard use sd的最基本的模式它的做法是說先backward第四層第三層那在這個過程中它並不會直接去通訊而是說把第四層第三層的T度組成一個bucket然後繼續backward第二層和第一層在backward第二層第一層這個計算過程中它就會拿著第四層和第三層的T度去和其他幾點去通訊這樣就完成了計算和通訊的重疊一邊計算一邊通訊結上整體的實驗那它為什麼要做bucket呢其實原因是在於它一次性的去傳一個比較大的tensor往往會比多次去傳多個比較少的tensor時間加一期要短所以通過這種bucket操作它也可以結上一些通訊的實驗一此之類推它再把第二層第一層的T度組成bucket去完成這個傳輸最後每個節點都拿到了所有節點上的T度的平均再把這個平均碗的T度去更新到自己模型上再進行下一輪的forward過程所以這邊就涉及到一個簡單的比如說bucket和通訊和計算重疊的優化那在系統實驗上其實有很多這種優化它們對整個算法最後體現出來的性能是有比較明顯的影響因此我們如果實現新的算法其實也需要對這些算法進行系統實現層的這些優化在傳統的框架中它們只是要支持266這種同步的算法就可以了但是因為八卦裡面支持了非常多的算法所以我們需要有一個通用的能力將各種系統運化自動的去apply到這些所有的算法上那在八卦中要實現一個算法它需要遵循八卦改定的一些規則八卦會在訓練的過程中對每一層的forwardbackward過程去進行互可操作從而執行具體的算法國際這裡面包括提供了底層的一些通訊源於像是全經度的中心化的同步的這種通訊包括全經度的去中心化的同步的通訊另外還有量化的中心化的同步通訊等等另外八卦還有自己的內存管理memory manager以及execution managerexecution manager的話就會自動去做比如說剛才所提到的這種八卦拼計算同學overlife等等的優化那這些的話對於每一個算法都是一樣的如果有算法開發者他也可以通過同樣的接口去開發一套新的算法他的新的算法本身不需要關心這些update等等通訊計算overlife以及bucketing等的這些邏輯在八卦中會自動去apply這些系統的優化邏輯而對於終端的用戶他其實不需要關心這些細節他只需要在訓練腳本中將他的模型使用八卦提供的函數包裹一下然後選擇他想使用的算法比如說grade in or dose或者是低精度訓練等等就完成了模型到分布式八卦訓練的改造他繼續去多機上運行這個腳本就可以享受到八卦帶來的多機加速那這些優化呢其實就體現在我們最後的這個benchmark結果中之前已經說過它是一個VGG16在128GPU上的一個benchmark結果在100G網絡下平均能有60%的性能提升在10G網絡下它的提升效果就更加明晶那今天分享的內容就到這為止了非常感謝大家來觀看我們的這個分享其實八卦現在的主題部分都已經開源到了get top上大家掃描圖上的2V碼就可以進入到我們的項目主頁並且去歡迎大家嘗試我們的各種功能項目主頁上也有我們的微信群包括Zulip的這個草倫群組的加入方式也歡迎大家有問題或者有建議和我們一起來交流謝謝大家