华为云Volcano:让企业AI算力像火山一样爆发
歡迎添加華為云小助手微信(微信號:HWCloud002或HWCloud003),輸入關(guān)鍵字“加群”,加入華為云線上技術(shù)討論群;輸入關(guān)鍵字“最新活動”,獲取華為云最新特惠促銷。華為云諸多技術(shù)大咖、特惠活動等你來撩!
作者:TommyLike
序:
在今年6月上海的KubeCon2019上,作為開源領(lǐng)域的積極貢獻者和推進者,華為云開源了面向高性能計算的云原生批量計算平臺——Volcano,寄寓助力企業(yè)算力像火山一樣爆發(fā)。該項目是基于華為云容器平臺大規(guī)模高性能計算應(yīng)用管理的最佳實踐,在原生K8s的基礎(chǔ)上,補齊了作業(yè)(Job)調(diào)度和設(shè)備管理等多方面的短板。
目前,Volcano在華為云上對接了包括一站式AI開發(fā)平臺ModelArts、云容器實例CCI、云容器引擎CCE在內(nèi)的多款服務(wù),是整個高性能計算領(lǐng)域不可或缺的基座。在今年5月斯坦福大學(xué)發(fā)布最新的DAWNBench榜單中,華為云ModelArts就以2分43秒的成績獲得圖像識別訓(xùn)練世界第一,其背后就離不開Volcano的助力。
同時,得益于Volcano的高性能任務(wù)處理機制,華為云基因容器服務(wù)將基因測序的效率提升了30%,成為基因測序行業(yè)的一匹黑馬,受到國內(nèi)多家頭部基因測序企業(yè)的青睞。自開源以來,華為云Volcano項目已經(jīng)吸引了來自騰訊、百度、快手以及AWS等多個公司的貢獻者。
背景:
隨著容器化以及容器編排技術(shù)的普及,越來越多的上層業(yè)務(wù)正開始擁抱K8s生態(tài),但無法否認的是,針對人工智能和大數(shù)據(jù)作業(yè)場景,原生K8s的支持度并不高,終端用戶如果想要將現(xiàn)有的業(yè)務(wù)遷移到K8s平臺,很有可能會面臨以下問題:
成組調(diào)度(Gang Scheduling): 一個BigData/AI的作業(yè)通常會包含多個任務(wù),而業(yè)務(wù)邏輯一般要求Pod要么同時啟動要么都不啟動。比如一個Tensorflow的作業(yè)如果僅單獨拉起一種角色的任務(wù)(Ps or Worker)是沒法正常執(zhí)行的。
資源公平調(diào)度(Fair-share): 部署的K8s集群會存在多個Namespace,而每個Namespace也可能提交多個作業(yè),怎樣調(diào)度資源才能避免某個Namespace的資源被無限制壓縮,又怎樣才能確保作業(yè)之間的資源調(diào)度公平?
GPU Topology感知(GPU Topology Awareness): 一個常見的AI訓(xùn)練/推理作業(yè),為了達到更高的性能,往往需要使用多個GPU共同完成,此時 GPU的Topology結(jié)構(gòu)以及設(shè)備之間的傳輸性能會對計算的性能造成很大影響。目前, K8s提供的擴展資源調(diào)度機制還無法滿足調(diào)度時Topology感知的問題。
集群自動配置(Cluster Configuration): 許多上層工具,在業(yè)務(wù)啟動之前,需要用戶配置工具的集群狀態(tài),方便系統(tǒng)內(nèi)部節(jié)點互通和識別,以MPI(Message Passing Interface)作業(yè)為例,需要用戶以命令行參數(shù)“—host”配置集群的所有節(jié)點信息,并且還依賴節(jié)點之間SSH互通,所以,用戶還要考慮怎樣自動配置和管理業(yè)務(wù)集群。
此外,怎么監(jiān)控整個作業(yè)集群的狀態(tài)?單個Pod失敗怎么處理?怎么解決任務(wù)依賴的問題?這些都是需要處理的問題。
正基于此,華為云Volcano在解決此類問題的基礎(chǔ)上,致力于提供一個針對BigData/AI場景的通用、穩(wěn)定、可擴展、高性能的原生批量計算平臺,方便以Kubeflow[1], KubeGene[2], Spark[3] 為代表的上層業(yè)務(wù)組件集成和使用。
概述:
圖2: Volcano業(yè)務(wù)全景
如圖2所示,華為云Volcano在K8s之上抽象了一個批量計算的通用基礎(chǔ)層,向下彌補K8s調(diào)度能力的不足,向上提供靈活通用的Job抽象。目前,項目最重要的2個組件分別是Volcano-Scheduler和Volcano-Controller。
圖3: Kube-Batch介紹
Volcano-Scheduler: 這個組件最開始來自社區(qū)的Scheduling SIG子項目項目Kube-Batch[4], 它是一個可擴展的增強調(diào)度器,主要支持的能力主要有:
Actions:
① Allocate: 正常的資源分配動作。
② Preempt: 搶占,當(dāng)系統(tǒng)中存在高優(yōu)先級作業(yè),且系統(tǒng)資源無法滿足請求時,會觸發(fā)資源搶占操作。
③ Reclaim: 資源回收, Kube-Batch會使用隊列(queue)將資源按照比例分配,當(dāng)系統(tǒng)中新增或移除隊列時,Reclaim會負責(zé)回收和重新分配資源到剩余隊列中去。
Plugins:
① DRF: 即Dominant Resource Fairness, 目的是為了確保在多種類型資源共存的環(huán)境下,盡可能滿足分配的公平原則,其理論最早來自于UC伯克利大學(xué)的論文《Dominant Resource Fairness: Fair Allocation of Multiple Resource Types》[5]。
② Conformance: 資源一致性,確保系統(tǒng)關(guān)鍵資源不被強制回收使用。
③ Gang: 資源成組,確保作業(yè)內(nèi)的成組Pod資源不被強制驅(qū)逐。
而Volcano-Scheduler在Kube-Batch的基礎(chǔ)上,又更進一步,引入了更多領(lǐng)域性的動作和插件,包括BinPack,GPUShare,GPUTopoAware等。
Volcano-Controller: Volcano通過CRD的方式提供了通用靈活的Job抽象Volcano Job (batch.volcano.sh/jobs), Controller則負責(zé)跟Scheduler配合,管理Job的整個生命周期。主要功能包括:
①: 自定義的Job資源: 跟K8s內(nèi)置的Job(作業(yè))資源相比,Volcano Job有了更多增強配置,比如:任務(wù)配置,提交重試,最小調(diào)度資源數(shù),作業(yè)優(yōu)先級, 資源隊列等。
②: Job生命周期管理: Volcano Controller會監(jiān)控Job的創(chuàng)建,創(chuàng)建和管理對應(yīng)的子資源(Pod, ConfigMap, Service),刷新作業(yè)的進度概要,提供CLI方便用戶查看和管理作業(yè)資源等。
③: 任務(wù)執(zhí)行策略: 單個Job下面往往會關(guān)聯(lián)多個任務(wù)(Task),而且任務(wù)之間可能存在相互依賴關(guān)系,Volcano Controller支持配置任務(wù)策略,方便異常情況下的任務(wù)間關(guān)聯(lián)性重試或終止。
④: 擴展插件: 在提交作業(yè)、創(chuàng)建Pod等多個階段,Controller支持配置插件用來執(zhí)行自定義的環(huán)境準(zhǔn)備和清理的工作,比如常見的MPI作業(yè),在提交前就需要配置SSH插件,用來完成Pod資源的SSH信息配置。
下面以一個MPI Job作業(yè)的YAML片段為例,帶大家從整體上了解Job Controller的功能(擴展功能相關(guān)字段已添加注釋,方便理解)。
圖4: Volcano Job樣例(/example/integrations/mpi/mpi-example.yaml)
有了上面的介紹,回過頭來參照圖5梳理華為云Volcano一次普通作業(yè)的執(zhí)行流程,也就很容易理解了。
圖5: Volcano組件與調(diào)度流程
用戶通過kubectl創(chuàng)建Volcano Job資源。
Volcano Controller監(jiān)測到Job資源創(chuàng)建,校驗資源有效性,依據(jù)JobSpec創(chuàng)建依賴的Pod, Service, ConfigMap等資源,執(zhí)行配置的插件。
Volcano Scheduler監(jiān)聽Pod資源的創(chuàng)建,依據(jù)策略,完成Pod資源的調(diào)度和綁定。
Kubelet負責(zé)Pod資源的創(chuàng)建,業(yè)務(wù)開始執(zhí)行。
Volcano Controller負責(zé)Job后續(xù)的生命周期管理(狀態(tài)監(jiān)控,事件響應(yīng),資源清理等)。
調(diào)度效率:
除去易用性和擴展性,在BigData/AI場景下,資源調(diào)度的效率(成功率)通常能有效減少業(yè)務(wù)的運行時間,提高底層硬件設(shè)備的使用率,從而降低使用成本。我們以Volcano Scheduler和原生Scheduler在Gang Scheduling的場景下做了一個簡單的TF Job 執(zhí)行時間對比:
圖6: Volcano與Default Scheduler調(diào)度作業(yè)執(zhí)行時間對比(Gang Scheduling)
參考圖6發(fā)現(xiàn),單個作業(yè)的執(zhí)行環(huán)境,兩種執(zhí)行方式在運行時間上并無明顯區(qū)別,但是當(dāng)集群中存在多個作業(yè)時,因為原生Scheduler無法保證調(diào)度的成組性,直接導(dǎo)致極端的情況出現(xiàn): 作業(yè)之間出現(xiàn)資源競爭,互相等待,上層業(yè)務(wù)無法正常運行,直至超時,此時調(diào)度的效率大打折扣。
社區(qū)和貢獻:
目前,華為云Volcano項目還在不斷地發(fā)展壯大中,更多特性也在設(shè)計和開發(fā)階段,如果您有興趣,歡迎隨時加入我們的Slack討論[6], 提問題,給意見,貢獻代碼[7]。另外,9月18至20日,華為全聯(lián)接大會即將于上海舉行,會上將設(shè)多場云原生相關(guān)的技術(shù)論壇,華為云云原生技術(shù)大咖和布道師也會親臨現(xiàn)場同開發(fā)者進行面對面的交流和互動,期待與你相遇。
[1]: https://www.kubeflow.org/
[2]: https://github.com/kubegene/kubegene
[3]: http://spark.apache.org/
[4]: https://github.com/kubernetes-sigs/kube-batch
[5]: https://people.eecs.berkeley.edu/~alig/papers/drf.pdf
[6]: http://volcano-sh.slack.com
[7]: http://github.com/volcano-sh/volcano
總結(jié)
以上是生活随笔為你收集整理的华为云Volcano:让企业AI算力像火山一样爆发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wrapper配置文件详解
- 下一篇: 如何优雅的选择字体(font-famil