【新智元導讀】5G+AI時代的來臨,數據量呈爆炸式增長,深度學習模型也越來越大,算力和負載更加多樣化,傳統模式的調度器已經不能滿足需求。為了支持更多的場景,華為研發了統一調度器,突破性的大規模分布式技術和調度算法,可以實現高達90%的資源利用率,百萬核MPI 3分鐘極速啟動。
在自然界,存在各種各樣神奇的分工和資源分配形式。
以蟻群為例,看似雜亂無章,成百上千的螞蟻,卻因為某種自發的機制而走向一種極具規律性,每隻螞蟻各司其職,最大限度地發揮了群體的優勢。
但有時,螞蟻這種群體行為也會造成一些麻煩。前一陣,LeCun轉發了一條推特,幾隻螞蟻找不到家了,結果整個蟻群都陷入了死循環,一直在轉圈。
而同樣的道理,計算機集群有時也會面臨這種問題,某個節點出了差錯,整個集群就無法高效運轉,這時就需要一個調度系統。
在計算機中,調度就是一種將任務分配給資源的方法。無論是在單機系統還是分布式集群當中,調度器都是非常核心的組件。
目前市面上的調度器主要有三種類型:集中式調度器、兩級調度器、狀態共享調度器。
而這三種模式的調度器都不能適配多種場景,第一種模式相對調度邏輯複雜,但是可以獲得比較好的調度結果,第二種有調度效率的限制,不適合大數據場景;第三種會出現大作業飢餓現象,不適合HPC場景。
為了支持多種場景,華為結合了前兩種模式研發了統一調度器,並做了優化。
要深入了解統一調度器的優勢,我們首先要回顧一下傳統模式的調度器。
堪比蟻群進化,集群調度系統已歷三世
單機系統的調度器功能相對簡單,比如批處理任務、分配內存、定時執行等。
到了分布式系統,任務就變的複雜了。原來我們只需要關注單個的CPU,進程間或者內核通信都比較簡單,但是如果有成千上萬臺機器,就要考慮機器之間的通訊,遇到延遲或者通訊阻塞該怎麼解決。
調度器尤其是大規模分布式系統的調度器,要考慮的遠不止這些。
集中式調度器,只有一個單一的調度「總指揮」,在HPC高性能計算方面應用比較廣泛。所有的任務和資源調度都在一個實例中完成,所以,集群的規模不能太大。Google的Borg就是一種典型的集中式調度器。
一個 Borg 集群由一個邏輯中央控制器 BorgMaster 和若干代理節點 Borglet 組成,屬於集中式調度器。「Borg架構跟黑社會似的,一個老大,多個小弟」。
從Borg的架構可以看出來,集中式調度器適合吞吐量較大、運行時間較長的任務,因為資源和任務在同一個實例中進行管理,各個節點的狀態容易同步,並發好控制。
但集中式的調度器,調度邏輯全部在中央調度,邏輯較為複雜,使用起來不夠靈活,不能針對任務做專門優化,新的調度策略嵌入到集中式調度器中二次開發的工作難度較大。
為了解決集中式調度器的調度策略不易調整的問題,兩級調度器是一個很好的解決方案,它採用的是一種兩級管理機制:
中央調度器:中央調度器可以縱覽全局,集群中所有機器的可用資源都由它來管理。
框架調度器:各個計算框架在接收到所需資源後,可以根據自身計算任務的特性,使用自身的調度算法,來分配從中央得到的各種資源,Mesos就是一種典型的兩級調度器。
兩級調度器最大的優勢在於可以針對不同的作業設計不同的調度算法。在這種兩級調度器架構中,只有中央調度器能夠觀察到所有集群資源的狀態,下面的框架並沒有一個全局的視野,只能關注自己的一畝三分地。
比如,集群中有很多任務,下發到其中一個節點的任務失敗了,是繼續在這個節點等待,還是換到其他節點上重新跑,所有的節點都在滿負荷運作,而這個任務需要很大的內存,這個節點不知道誰可以幫它,只能原地無腦等待。
另外,Mesos的調度器將資源分配給一個框架後,只能等該框架返回資源使用狀態後,才能繼續分配這個框架的資源,因此會影響系統的並發性能。
為了解決兩級調度器的全局視野和並發問題,Google開發了下一代資源調度系統Omega。
Omega是一種基於共享狀態的調度器,該調度器將兩級調度器中的集中式資源調度模塊簡化成了一些持久化的共享數據(狀態)和針對這些數據的驗證代碼,這份數據被稱為「單元狀態」,由「中央調度器」來維護。
有了這些「共享數據」,就能實時了解整個集群的資源使用情況。每個子調度器都有了集群的狀態副本,可以看到集群的全部負載信息,當子調度器的資源狀態改變時,可以修改「單元狀態」信息並同步給其他子調度器。
共享狀態架構採用了效率優先的策略,當多個應用程式申請同一份資源時,Omega會把資源給優先級最高的,其他資源限制全部下放到各個子調度器, 弱化了中央調度器的功能。
此外,Omega採用了基於多版本的並發訪問控制方式(也稱為「樂觀鎖」),大大提升了Omega的並發性。
這些調度器設計都有自己的優勢和劣勢。
如果應用的規模較小,採用集中式調度器可以更好地掌控全局狀態;如果應用規模較大,或者需要定製化開發自己的調度算法,可以考慮兩級調度器的設計,但是兩級調度器邏輯控制較為複雜。
那有沒有一種調度器,能一站式解決這些問題?
算力和負載「百家爭鳴」,誰來做「蟻群」的大家長?
現在的算力變的多種多樣,各種CPU、GPU以及NPU等,但是如何利用這些多樣化的算力,並將算力轉化為高性能的分布式應用,面臨諸多挑戰。
比如,多樣性算力如何和應用最佳匹配,分布式應用的並行化性能如何提升,應用性能如何隨著系統規模增長而逼近線性增長,融合應用開發帶來的學習成本高以及跨系統協同等問題。
集群數量增加時系統線性度下降管理複雜度提升
針對這些挑戰,華為向業界發布了分布式多樣性計算軟體套件:集群加速庫、統一調度器高效釋放多樣性算力潛力,分布式並行應用開發框架助力分布式應用價值創造。
當分布式系統的規模到達一定程度,調度器的可擴展性就會成為瓶頸。為了提供高可擴展性, 調度器不僅要應對管理數萬臺機器的挑戰,也要能夠處理動態增減節點這樣的問題。
華為全自研的用於AI、大數據、HPC 混合負載的統一調度器應運而生。
統一調度器可以同時管理2萬個節點,允許30萬並行作業,實現了大規模的分布式集群調度,規模不再是調度器的限制。
傳統的調度器調度算法開發難度大,針對特定任務的調節很不方便,如果不能實現高效的資源調度,那它就失去了本來的價值。而利用統一調度器,可以實現百萬核MPI 3分鐘啟動,每秒5千個任務的智能調度,在真實工作場景中,每小時可完成4M運行作業量。
統一調度器在整體架構上實現了調度和執行的分離,調度算法是插件化的,所以在調度階段,調度算法和執行框架都是可配置的,這樣就可以基於場景的特點編排出適應場景的資源調度器。
具體如何實現呢?
首先統一調度器模塊劃分也更細小,有接入模塊、核心作業管理模塊、調度模塊、執行模塊。各個模塊之間事件驅動,內部全並行和異步化,既提升了效率,又降低了複雜度。
其次統一調度器不是簡單的把調度劃分為兩層,各層之間無法協調,導致調度效率的低下。調度本質是資源和需求的匹配,匹配可以有多個階段,每個階段都有不同的調度側重點,並且可以設置不同的調度策略。
針對不同的資源池,採用並行化的模式。所以調度階段之間可以很好的協調,也可以提高效率。調度階段和策略都可以用戶自己配置,或者結合機器學習來做到模式場景的自適應。
所以,統一調度器可以融合多種負載,HPC可以有適配HPC的調度策略和執行框架,AI和大數據也有自己的,但是這些策略和框架都同時存在於一個統一調度器中,能相互協同,使得大規模集群的資源利用率提升到90%。
AI跨界給HPC賦能,統一調度器也要「出圈」了
作為一個底層的調度工具,統一調度器讓開發人員從繁雜的調度算法中解脫出來,更加專注於業務的創新,超大規模的集群調度,釋放出了前所未有的潛力,以前不敢想、不敢幹的深度模型也可以上馬一試了。
傳統的HPC任務大多是計算密集型的,而新的工作負載(如AI)是數據密集型,負載的多樣性對於計算資源的合理分配對開發人員來說也是一個新命題,不同的用戶對HPC、AI等工作負載有著不同的需求。
超算的用戶對HPC了解的比較多,但是缺乏對AI計算的了解,如果有融合計算的需求,往往要與硬體廠家或者外包服務提供商一起定製化開發,而統一調度器消除了這一步驟,無論你是AI用戶,還是HPC用戶,又或者是大數據分析人員,都能利用統一調度器實現計算資源的智能調度。
現在,高性能計算也希望從海量數據中挖掘更多價值,深度學習的崛起及大規模預訓練模型可以幫助優化很多以前無法解決的問題。
人工智慧可以幫助高性能計算任務跳出傳統的圈子,比如AI可以更好地預測和理解上下文,使用推理來填補數據空白。
HPC和AI的高效協同工作,不光能提升硬體資源的利用率,未來,還將催生更多的智能計算解決方案。
這個調度器,值得期待!
參考連結:
https://www.yinxiang.com/everhub/note/be221530-b343-436d-a48d-2ab62085e346
https://zhuanlan.zhihu.com/p/33823266
https://draveness.me/system-design-scheduler/
https://matt33.com/2018/09/01/yarn-architecture-learn/#%E4%B8%A4%E7%BA%A7%E8%B0%83%E5%BA%A6%E5%99%A8