· 硬件加速的引入 ·
html
5G網絡高可靠、低延時、大流量的特徵以及邊緣計算業務(包括機器學習、人工智能、無人駕駛、工業仿真等)興起對將來網絡計算和轉發能力提出更高要求。通用CPU已不能知足海量計算、數據、圖片的處理需求,愈來愈多的場景引入GPU、FPGA等硬件進行加速,異構計算應運而生。git
異構計算可以充分發揮CPU/GPU在通用計算上的靈活性,及時響應數據處理需求,搭配上FPGA/ASIC等特殊能力,來充分發揮協處理器的效能,根據特定需求合理地分配計算資源。在處理速度和功耗之間找到平衡,達到高效又省電的效果。github
圖 1‑1 異構計算算法
全部的尖端應用都須要加速應用。對於計算加速、存儲加速、圖像加速需求也很明顯。微軟的Azure歷經三代FPGA架構,除提供網絡和存儲虛擬化加速,還可用於加速Bing 搜索、深度神經網絡(DNN)等計算任務。在MICRO'16 會議上,微軟提出了Hardware as a Service (HaaS) 的概念,即把硬件做爲一種可調度的雲服務,使得FPGA 服務的集中調度、管理和大規模部署成爲可能。數據庫
圖2‑1 Azure的FPGA架構[1]編程
亞馬遜AWS雲AWS在16年就推出了EC2實例F1,這種EC2實例是具備現場可編程門陣列(FPGA) 的計算實例。能夠進行編程,爲應用程序建立自定義硬件加速。[2]阿里雲異構計算加速引擎涵蓋GPU、FPGA在內等多款異構實例,可知足從圖形渲染到高性能計算及人工智能等複雜應用的計算需求。特別是在人工智能領域,可將深度學習成本縮減一半,大幅下降人工智能計算門檻;而基於阿里雲異構平臺的全新高性能計算實例E-HPC,可一鍵部署得到媲美大型超算集羣環境的「雲上超算中心」。[3]vim
圖2‑2 阿里雲的異構實例[4]api
英特爾最新推出的AI平臺,就包含了CPU、GPU、DSP、NNP、FPGA等一系列不一樣的處理核心。英偉達的機器人平臺Jetson Xavier也包含了6種處理器,GPU/CPU/NPU/NVDLA等。智能手機也開始在傳統的CPU/GPU/ISP/基帶芯片以外,加入了加速DSP、圖形處理單元NPU等。 安全
針對不一樣的場景,硬件加速器的選擇也不同。目前市場上流行的加速芯片有多種選擇。加速芯片嵌入網卡造成智能網卡是目前加速卡的主流形式。其中FPGA當前產業較爲成熟,且可現場編程靈活性高;NP和SoC性價比較高,但產業成熟度有待提升;GPU主要優點爲圖片複雜算法處理。[5]網絡
圖2‑3 加速器的選擇
目前硬件加速管理面的開源項目只有cyborg。
cyborg(前身爲Nomad)是OpenStack用於管理硬件和軟件加速資源框架,能夠經過cyborg列出、識別和發現加速器,掛載、卸載加速器實例。
cyborg的主要功能包括硬件資源的發現、資源上報、資源的管理等。對於一些特殊硬件的特殊功能或配置(如:FPGA的編程等)也由cyborg來完成。
圖3‑1 cyborg架構
cyborg的架構比較經典。
在最新的Stein版中爲了能在placement組件中表現設備(device)和加速器(accelerator)以供nova調度。cyborg將全部的加速硬件(包括FPGA、GPU,以及目前正在規劃的加速硬件等)都定義成如下的加速模型,最終以AttachHandle的方式綁定到虛機/容器/裸金屬上。
圖3‑2 加速器模型[6]
項目 |
說明 |
備註 |
Device |
物理硬件(如:PCI卡)。包括(Flash / BMC)。 |
|
Deployable |
提供資源的設備中的邏輯結構。資源能夠是加速器,本地內存等。 ※在FPGA中一個device能夠對應多個Deployable;而在GPU中一個device通常對應一個Deployable |
在placement中可理解爲Resource Provider |
Accelerator |
硬件加速的邏輯資源(非物理硬件),一個Accelerator對應一個Attach Handle |
使用狀況在placement的inventory中記錄 |
ControlPath Id |
訪問設備的惟一標識符。 例如:PCI PF等 |
|
Attach Handle |
用於將加速資源attach到VM、容器或主機的ID。例如:PCI VF,mdev UUID等 |
下面將針對cybrog源碼以及cyborg與其餘組件的交互方式進行分析。
Cyborg的API服務, 對用戶提供REST API接口, 支持POST/PUT/PATCH/DELETE/GET操做, 並經過cyborg-conductor和 cyborg-agent、cyborg-db進行交互。
1)cyborg-api的服務啓動流程以下:
圖4‑1 API啓動流程
2)API的匹配採用pecan框架,從下圖可清晰的看出URL匹配規則
圖4‑2 API匹配規則
※注意以上是以V1版API爲例進行說明。目前社區在統一了硬件加速設備模型以後,已基本廢棄了V1版API,正在努力推V2版API。
1)cyborg-conductor的服務啓動流程以下:
圖4‑3 Conductor啓動流程
2)cyborg-conductor的調用流程以下:
圖4‑4 Conductor調用流程
Cyborg Agent服務, 經過調用驅動, 來實現底層加速硬件的配置管理操做
1)cyborg-agent的啓動流程以下。其中藍線爲服務啓動流程;紅線爲定時服務,用於硬件設備的自動發現及管理。
圖4‑5 Agent啓動流程
2)agent側已支持FPGA驅動,所以下面以FPGA的編程功能爲例說明agent側的調用流程
圖4‑6 FPGA編程流程
cyborg-client是經過調用cyborg-api,來最終對用戶提供命令行功能。目前cyborg-client只有基礎框架(具體以下圖),cyborg相關命令行功能尚不完善,社區還需抓緊時間推動。
圖4‑7 客戶端啓動流程
cyborg的數據庫結構以下:
圖4‑8 數據庫結構
能夠看到數據庫中引入了設備配置文件(device_profiles)和加速器請求(extended_accelerator_requests),其在與Nova等其餘組件交互時有着相當重要的做用。
設備配置文件(device_profiles)
因爲不一樣實例所請求的設備的類型、數量和組合方面可能有很大差別。爲避免全部硬件資源都寫入Flavor,形成flavor數量增長(運營商常用Flavor進行運營和計費),cyborg中引入了設備配置文件(device_profiles)的概念。設備配置文件是一個或多個加速器的用戶要求的命名集合,內容包括了特定資源類的指望數量和資源提供者。其中,資源類和資源提供者與placement組件中的概念相同;用戶要求既包含了placement中的特徵(trait),也包含了cyborg獨有的一些特徵。
加速器請求(extended_accelerator_requests)
加速器請求(簡稱:ARQ)是指被加速器被綁定到實例以後的一個狀態對象。ARQ的建立、綁定、解綁、刪除都是在與nova交互時由cyborg處理的,其數據也是保存與cyborg的數據庫中。
cyborg與nova組件的交互的具體的交互流程以下圖所示:
圖4‑9 cyborg與nova等組件的交互
1. 用戶發起建立實例請求,請求中的Flavor中帶有device_profile特性2. nova的控制節點向cyborg發起請求獲取device_profile的信息3. 將device_profile的信息合入request_spec以後向placement發送請求,獲取候補節點4. 選中一個宿主機節點5. 向novacompute發起部署實例的請求6. nova compute請求cyborg建立一個加速器請求(accelerator_request、 ARQ),包含使用device_profile信息7. nova compute請求cyborg更新加速器請求(ARQ),執行綁定操做
綁定instance uuid、resource provider id、host_name等信息
更新ARQ的狀態爲BOND
根據device_profile的內容決定是否有FPGA編程等特殊需求,若有則執行FPGA編程等操做
※本操做含有一些特殊操做,可能耗時較長,所以是一個異步操做。而Nova Compute在發出請求以後會處於等待狀態8. 加速器請求的綁定操做結束後,cyborg通知nova當前的ARQ綁定操做的是否成功9. nova compute等待ARQ綁定操做結束後,則從cyborg獲取加速器請求(ARQ)的具體信息10.最後由novacompute將ARQ信息綁定至實例。上面說到了與nova的交互流程,下面簡單介紹下與nova交互的具體操做:
1. 首先應在配置文件中啓用相關驅動。
# vim /etc/cyborg/cyborg.conf
[agent]
enabled_drivers = intel_fpga_driver, nvidia_gpu_driver, ... … ※可根據實際狀況調整
2. 用戶需提早準備好對應的設備配置文件
{ "name": "mydp",
"groups": [
{ "resources:CUSTOM_ACCELERATOR_GPU": "1",
… …
},
… …
]
}'
3. 將設備配置文件設置到Flavor中
openstack flavor set –property 「accel:device_profile_name=mydp」 my-flavor
4. 使用帶有設備配置文件的Flavor去建立虛機
openstack server create –flavor my-flavor my-vm
cyborg項目目前社區已實現基本的管理功能,與nova/placement等相關組件的交互尚在推動中,有待成熟。
蘇研在cyborg社區中貢獻涉及cyborg數據庫的修改、FPGA驅動對於編程的支持等方面,從此也會持續關注cyborg項目的動態,並積極參與社區,同時引入社區功能,強化自身產品功能。
End
參考連接:
[1]https://blog.csdn.net/weixin_42229404/article/details/80848546[2]https://blog.csdn.net/horsefoot/article/details/53991752/[3]http://www.diankeji.com/news/39164.html[4]https://blog.csdn.net/wja8a45TJ1Xa/article/details/78692830[5]https://github.com/open-heterogeneous-computing-framework/conference/blob/master/kubecon-shanghai-2019/[6]https://docs.google.com/document/d/1XLQtvyGJeEgo3ztBQiufWLF-E7S7yGLaYrme8iUPtA0/edit#heading=h.dllo7olmuhb