【乾貨分享】硬件加速介紹及Cyborg項目代碼分析

圖片

· 硬件加速的引入 ·

5G網絡高可靠、低延時、大流量的特徵以及邊緣計算業務(包括機器學習、人工智能、無人駕駛、工業仿真等)興起對未來網絡計算和轉發能力提出更高要求。通用CPU已不能滿足海量計算、數據、圖片的處理需求,越來越多的場景引入GPU、FPGA等硬件進行加速,異構計算應運而生。


異構計算能夠充分發揮CPU/GPU在通用計算上的靈活性,及時響應數據處理需求,搭配上FPGA/ASIC等特殊能力,來充分發揮協處理器的效能,根據特定需求合理地分配計算資源。在處理速度和功耗之間找到平衡,達到高效又省電的效果。

圖片

圖 1‑1  異構計算


 

2 、行業現狀

所有的尖端應用都需要加速應用。對於計算加速、存儲加速、圖像加速需求也很明顯。微軟的Azure歷經三代FPGA架構,除提供網絡和存儲虛擬化加速,還可用於加速Bing 搜索、深度神經網絡(DNN)等計算任務。在MICRO'16 會議上,微軟提出了Hardware as a Service (HaaS) 的概念,即把硬件作爲一種可調度的雲服務,使得FPGA 服務的集中調度、管理和大規模部署成爲可能。

圖片

2‑1  AzureFPGA架構[1]

亞馬遜AWSAWS16年就推出了EC2實例F1,這種EC2實例是具有現場可編程門陣列(FPGA) 的計算實例。可以進行編程,爲應用程序創建自定義硬件加速。[2]阿里雲異構計算加速引擎涵蓋GPUFPGA在內等多款異構實例,可滿足從圖形渲染到高性能計算及人工智能等複雜應用的計算需求。特別是在人工智能領域,可將深度學習成本縮減一半,大幅降低人工智能計算門檻;而基於阿里雲異構平臺的全新高性能計算實例E-HPC,可一鍵部署獲得媲美大型超算集羣環境的“雲上超算中心”。[3]

圖片

2‑2  阿里雲的異構實例[4]

 

英特爾最新推出的AI平臺,就包含了CPUGPUDSPNNPFPGA等一系列不同的處理核心。英偉達的機器人平臺Jetson Xavier也包含了6種處理器,GPU/CPU/NPU/NVDLA等。智能手機也開始在傳統的CPU/GPU/ISP/基帶芯片之外,加入了加速DSP、圖形處理單元NPU等。 

針對不同的場景,硬件加速器的選擇也不一樣。目前市場上流行的加速芯片有多種選擇。加速芯片嵌入網卡形成智能網卡是目前加速卡的主流形式。其中FPGA當前產業較爲成熟,且可現場編程靈活性高;NPSoC性價比較高,但產業成熟度有待提高;GPU主要優勢爲圖片複雜算法處理。[5]

圖片

2‑3  加速器的選擇


主流加速硬件管理開源項目介紹


目前硬件加速管理面的開源項目只有cyborg


cyborg(前身爲Nomad)OpenStack用於管理硬件和軟件加速資源框架,可以通過cyborg列出、識別和發現加速器,掛載、卸載加速器實例。


cyborg的主要功能包括硬件資源的發現、資源上報、資源的管理等。對於一些特殊硬件的特殊功能或配置(如:FPGA的編程等)也由cyborg來完成。


圖片

3‑1  cyborg架構

 

cyborg的架構比較經典。

  • cyborg-apicyborg-conductorcyborg-agentcyborg3個主要服務,cyborg-api主要用於提供API接口,cyborg-conductor主要用來操作數據庫,cyborg-agent主要用來適配各加速硬件驅動。
  • cyborg-client主要調用cyborg-api,最終對用戶提供命令行。
  • 目前爲止cyborg中已支持的驅動包括FPGAGPUSPDK與現有社區代碼結構不一致,已不可用;同時社區也在規劃其他硬件驅動的支持,如AICHIP

 

在最新的Stein版中爲了能在placement組件中表現設備(device)和加速器(accelerator)以供nova調度。cyborg將所有的加速硬件(包括FPGAGPU,以及目前正在規劃的加速硬件等)都定義成以下的加速模型,最終以AttachHandle的方式綁定到虛機/容器/裸金屬上。

圖片

3‑2  加速器模型[6]

 

項目

說明

備註

Device

物理硬件(如:PCI卡)。包括(Flash / BMC)。


Deployable

提供資源的設備中的邏輯結構。資源可以是加速器,本地內存等。

※在FPGA中一個device可以對應多個Deployable;而在GPU中一個device一般對應一個Deployable

placement中可理解爲Resource Provider

Accelerator

硬件加速的邏輯資源(非物理硬件),一個Accelerator對應一個Attach Handle

使用情況在placementinventory中記錄

ControlPath Id

訪問設備的唯一標識符。 例如:PCI PF


Attach Handle

用於將加速資源attachVM、容器或主機的ID。例如:PCI VFmdev UUID


 

4 cyborg源碼分析

下面將針對cybrog源碼以及cyborg與其他組件的交互方式進行分析。


4.1  cyborg-api

CyborgAPI服務對用戶提供REST API接口支持POST/PUT/PATCH/DELETE/GET操作並通過cyborg-conductor cyborg-agentcyborg-db進行交互。

 

1cyborg-api的服務啓動流程如下:

圖片

4‑1  API啓動流程

 

2API的匹配採用pecan框架,從下圖可清晰的看出URL匹配規則

圖片

4‑2  API匹配規則

 

※注意以上是以V1API爲例進行說明。目前社區在統一了硬件加速設備模型之後,已基本廢棄了V1API,正在努力推V2API


4.2  cyborg-conductor

Cyborg Conductor服務對其他服務組件提供RPCAPI服務從而來操作數據庫cyborg-db, 這樣可以使其他組件和數據庫解耦並提高數據庫的安全性和併發能力。 調用RPC-API的服務有: cyborg-apicyborg-agent。類似nova-conductor服務。

1cyborg-conductor的服務啓動流程如下:

image.png

4‑3  Conductor啓動流程

2cyborg-conductor的調用流程如下:

image.png

4‑4  Conductor調用流程

 

4.3  cyborg-agent

Cyborg Agent服務通過調用驅動來實現底層加速硬件的配置管理操作

1cyborg-agent的啓動流程如下。其中藍線爲服務啓動流程;紅線爲定時服務,用於硬件設備的自動發現及管理。

圖片

4‑5  Agent啓動流程

 

2agent側已支持FPGA驅動,因此下面以FPGA的編程功能爲例說明agent側的調用流程

圖片

4‑6  FPGA編程流程

 

4.4  cyborg-client

cyborg-client是通過調用cyborg-api,來最終對用戶提供命令行功能。目前cyborg-client只有基礎框架(具體如下圖),cyborg相關命令行功能尚不完善,社區還需抓緊時間推進。

圖片

4‑7  客戶端啓動流程

 

4.5  cyborg數據結構

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的數據庫中。


4.6  cyborgnova等組件的交互

cyborgnova組件的交互的具體的交互流程如下圖所示:

圖片

4‑9  cyborgnova等組件的交互

 

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

 

5     總結

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



圖片



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章