· 硬件加速的引入 ·
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