異構計算,如何讓開源有更開放的生態?


ICT技術發展到今天,面臨這樣一種矛盾:一方面,人工智能、5G、HPC、邊緣計算等新業務逐漸落地實用,對算力性能提出極高要求;另一方面,摩爾定律逐漸失效,通用計算越來越不能滿足這些業務的算力需求。

在這樣的背景下,算力的發展重心正在從傳統的馮·諾依曼架構為代表的通用計算向以域專有架構(Domain Specific Architecture)為代表的異構計算轉移。

域專有架構主要有以下幾個特點:一是它由許多簡單單元組成。不同於以往通用計算的CPU單核單帶或者是多核的組成,域專有架構通常有多個DIE,每個DIE專用於執行一種功能。 第二個特性就是更少的數據移動。為了達到這一特性,從硬件設計層面,就會優化計算單元跟存儲單元之間的物理位置以及訪問協議設置。第三,能效比更高的專用硬件。針對特定的業務場景採用專用硬件,很好地提供能效比。第四,新的指令集或像MindSpore這類的新編程範式

在域專有架構下,越來越多的GPU、FPGA、ASIC、SoC等異構計算硬件被使用,但在雲計算普遍普及的產業背景下,如何才能更好地管理這些異構計算設備,使之更好地釋放算力呢?

異構計算相關的開源項目,正在幫助我們解決這個問題。

在華為開發者大會2020(Cloud)期間,OpenStack Cyborg 項目發起人、華為計算產品線開源生態部主任工程師黃之鵬,通過對最新開源項目的解讀,帶來了異構計算的最新發展趨勢。

OpenStack的Cyborg 異構硬件加速框架

如果市場上每出現一種硬件,就去增加一種專用支持,就會形成"煙囪式"管理,這種方法雖然也能勝任商業交付,但是因為過於來碎片化,會為日後的發展埋下隱患。

為此,開源管理平臺OpenStack早在2017年異構計算剛剛開始發展時,就提出了Cyborg項目,面向GPU、FPGA、AI處理器等不同異構計算硬件和軟件加速資源,提供具有標準API的通用管理框架。

異構計算,如何讓開源有更開放的生態?

Cyborg的主要功能包括硬件資源的發現、資源上報、資源的管理,Cyborg還能完成FPGA編程等特殊硬件的特殊功能或配置。

異構計算,如何讓開源有更開放的生態?

Cyborg已經交付了至少4~5個版本,採用OpenStack組件中常用的架構設計,分為控制層和計算節點層,以分離管理面與數據面,並在管理面設計了統一的API。

Cyborg-api、Cyborg-conductor、Cyborg-agent是Cyborg的3個主要服務,Cyborg-api主要用於提供API接口,Cyborg-conductor主要用來緩衝和路由api與agent數據庫的操作,Cyborg-agent主要用來對接各種異構計算硬件,Cyborg-client主要調用cyborg-api,最終對用戶提供命令行。

Cyborg項目自2017年9月成為OpenStack 社區官方項目後,生態進展迅速,已成長為加速設備管理的事實標準,服務於NFV、HPC、邊緣計算、AI/DL等多個場景。

開源是催生開發者生態非常重要的一環,至今Cyborg已經吸引了來自Intel、聯想、ARM、Redhat、科大訊飛、中移動、銀聯等公司或機構的開發者參與。

Cyborg的技術實現

在通用計算主導的雲計算時代,通過虛擬化、容器化,實現了物理資源池的資源複用,進而以多租戶的方式開放出去,形成公有云服務或私有云服務。

在異構計算時代,為了實現虛擬化和容器化,同樣需要異構資源的分層抽象,所以Cyborg項目定義了一套面向異構計算設備的抽象設備模型:

異構計算,如何讓開源有更開放的生態?

第一層是Device,對應物理意義上的卡,如各類加速卡;

在Device的層級之上,是PF(Physical Function),比如FPGA上會有多個區域(Region),每一個區域可能就是一個PF;

在PF之上,可以抽象出VF(Virtual Function),很多異構硬件支持在PF的基礎上進一步提供VF的能力。

下面以兩個例子來說明Cyborg的技術實現。

異構計算,如何讓開源有更開放的生態?

設備發現:在一個有2個FPGA資源、1個的NPU資源的計算節點上,通過PCIE上電的設備,信息被Cyborg Driver上報到Compute計算節點的 Agent上面,Agent主要做兩個動作,一是寫入到DB,另外一個是寫入到Placement,Placement是OpenStack近幾個版本才出現的新組件,起到計數器的作用,會統計所有的計算存儲網絡以及異構資源的總數量,以便在Schedule調度的時候實現全局視圖。

異構計算,如何讓開源有更開放的生態?

Nova-Cyborg交互:Nova是OpenStack裡非常重要的管理組件,這裡來看一下Cyborg怎樣和Nova實現交互。

第1步,管理員或運營者(Operator)把要使用的硬件的驅動配置進Cyborg的Config中。

第2步,定義一個Device Profiles,和OpenStack的通用資源定義一樣,通過Flavor描述資源的規格。

第3步,管理員把設定的Device Profiles關聯到Flavor上面。

管理員通過Cyborg Api完成了這些工作之後,用戶就可以去申請這個實例了。

用戶使用OpenStack的命令行或者按鈕申請一個Flavor,Flavor會加上 Device Profiles的描述,之後啟動調度器去Placement查詢,如果有符合用戶請求的資源,雲平臺就可以返回用戶所需要的實例了。

異構計算,如何讓開源有更開放的生態?

通過組件間的調用關係圖示,可以看到Nova和Cyborg之間的Device Profiles的設置、Nova和Placement關於Allocation之間的交互,以及當創建實例時的Post accelerator request等,整體的工作流比較清晰,而且儘可能複用了OpenStack的Nova的工作機制,實現對異構資源的管理。

Kubernetes以及其他社區的異構計算開源項目

Kubernetes(K8s)社區是谷歌開源出來的容器管理平臺,K8s同樣存在異構計算的支持的問題。因為K8s出現的比較晚,對GPU這類異構設備的支持排在很高的優先級,很快就實現了Device Plug Interface(DPI)的機制。

異構計算,如何讓開源有更開放的生態?

在K8s社區,通過英偉達等公司開發者的努力,已經有一套比較穩定的異構計算管理方法,可以實現K8s集群管理GPU等硬件處理AI任務,或者實現有限的HPC任務。

異構計算,如何讓開源有更開放的生態?

但DPI本質上還是一個"煙囪式"的解決方案,每種設備都需要一個適配的operator+一個適配的DPI插件,比如做FPGA的方案,還需要做很大的改動才能實現端到端的打通。而NVDIA也為GPU開發了專門的operator。

為此,K8s社區也已經提出了一個類似於Cyborg的異構計算項目Kube-acc,希望在K8s上藉助優秀的CRD機制,擴展標準的API接口,實現面向不同異構計算硬件的通用管理。

此外,關於異構計算的開源項目社區還有:TornadoVM項目、RISC-V社區、OCP社區(Open System Firmware)、OCP社區(Open Acceleration Infra)等。

其中TornadoVM項目致力於實現Java在異構計算硬件的運行。和華為開源全場景AI計算框架MindSpore一樣,都是基於源碼的編譯優化(Source to Source),需要逐層迭代、逐層打開、逐層替換的編譯過程。

致力於整合的開放異構計算框架

現在的異構計算、開源生態面臨一個巨大的困難,就是應用層面、管理層面和物理設備層面的開發者未能實現互相交談,整個計算的生態面還沒有建立起來,造成很多產業割裂的"煙囪"問題。

異構計算,如何讓開源有更開放的生態?

為此,正在推動一個新的開源項目:開放異構計算框架(Open Heterogeneous Computing Framework),希望把上游社區的異構計算的項目,根據場景做端到端的整合。

異構計算,如何讓開源有更開放的生態?

目前已經開展了對已有上游異構計算相關開源項目的集成、測試以及標準文檔的撰寫工作。

展望未來,5G、AI、雲計算、大數據、IoT等技術推動的萬物互聯時代即將到來。IDC預測數據顯示,到2023年全球各種類物聯網終端數量將達352億個,海量連接產生的數據量達175ZB。

隨著數字化進程的推進,算力需求將越來越大,數據中心將逐步演變為計算中心,算力將成為新的生產力。在多種數據類型和場景驅動下,異構計算將獲得快速發展,異構計算的最新發展趨勢值得每一個有志未來的開發者關注。


分享到:


相關文章: