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

圖片

· 硬件加速的引入 ·
html

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


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

圖片

圖 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]vim

圖片

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

 

英特爾最新推出的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



圖片

相關文章
相關標籤/搜索