pythonopencv包调用yolo gpu加速_【干货分享】硬件加速介绍及Cyborg项目代码分析

本文介绍了硬件加速的背景和现状,特别是GPU、FPGA在异构计算中的应用。接着,详细剖析了开源项目Cyborg的架构,包括cyborg-api、cyborg-conductor和cyborg-agent等组件的工作原理,并展示了它们如何与数据库和加速硬件驱动交互。此外,还探讨了Cyborg与Nova等组件的交互过程,以及未来的发展趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2e86921d31de52ebd53347f4eec715ad.png

7b467ac5827fb46153ea9252c2511381.png

· 硬件加速的引入 ·

5G网络高可靠、低延时、大流量的特征以及边缘计算业务(包括机器学习、人工智能、无人驾驶、工业仿真等)兴起对未来网络计算和转发能力提出更高要求。通用CPU已不能满足海量计算、数据、图片的处理需求,越来越多的场景引入GPU、FPGA等硬件进行加速,异构计算应运而生。

异构计算能够充分发挥CPU/GPU在通用计算上的灵活性,及时响应数据处理需求,搭配上FPGA/ASIC等特殊能力,来充分发挥协处理器的效能,根据特定需求合理地分配计算资源。在处理速度和功耗之间找到平衡,达到高效又省电的效果。

257c7d1ac965b12e73e01f72eaf2fae3.png

图 1‑1  异构计算

2 、行业现状

所有的尖端应用都需要加速应用。对于计算加速、存储加速、图像加速需求也很明显。 微软的Azure历经三代FPGA架构,除提供网络和存储虚拟化加速,还可用于加速 Bing 搜索、深度神经网络(DNN)等计算任务。在MICRO'16 会议上,微软提出了Hardware as a Service (HaaS) 的概念,即把硬件作为一种可调度的云服务,使得 FPGA 服务的集中调度、管理和大规模部署成为可能。

d0aac70fd06ffafbc1651041e010d24b.png

图2‑1  Azure的FPGA架构[1]

亚马逊AWS云AWS在16年就推出了EC2实例F1,这种EC2实例是具有现场可编程门阵列 (FPGA) 的计算实例。可以进行编程,为应用程序创建自定义硬件加速。 [2] 阿里云异构计算加速引擎涵盖GPU、FPGA在内等多款异构实例,可满足从图形渲染到高性能计算及人工智能等复杂应用的计算需求。特别是在人工智能领域,可将深度学习成本缩减一半,大幅降低人工智能计算门槛;而基于阿里云异构平台的全新高性能计算实例E-HPC,可一键部署获得媲美大型超算集群环境的“云上超算中心”。 [3]

9bd5d357b23e8b75fb0b05f0641a1b33.png

图2‑2  阿里云的异构实例[4]

英特尔最新推出的AI平台,就包含了CPU、GPU、DSP、NNP、FPGA等一系列不同的处理核心。英伟达的机器人平台Jetson Xavier也包含了6种处理器,GPU/CPU/NPU/NVDLA等。智能手机也开始在传统的CPU/GPU/ISP/基带芯片之外,加入了加速DSP、图形处理单元NPU等。 

针对不同的场景,硬件加速器的选择也不一样。目前市场上流行的加速芯片有多种选择。加速芯片嵌入网卡形成智能网卡是目前加速卡的主流形式。其中 FPGA当前产业较为成熟,且可现场编程灵活性高;NP和SoC性价比较高,但产业成熟度有待提高;GPU主要优势为图片复杂算法处理。[5]

94d3debe80c8c7396b51ee841fe1a72d.png

图2‑3  加速器的选择

主流加速硬件管理开源项目介绍

目前硬件加速管理面的开源项目只有cyborg。 cyborg(前身为Nomad)是OpenStack用于管理硬件和软件加速资源框架,可以通过cyborg列出、识别和发现加速器,挂载、卸载加速器实例。 cyborg的主要功能包括硬件资源的发现、资源上报、资源的管理等。对于一些特殊硬件的特殊功能或配置(如:FPGA的编程等)也由cyborg来完成。

3f7546d56a749487bef5fb762eb30ea4.png

图3‑1  cyborg架构

cyborg的架构比较经典。
  • cyborg-api、cyborg-conductor、cyborg-agent是cyborg的3个主要服务,cyborg-api主要用于提供API接口,cyborg-conductor主要用来操作数据库,cyborg-agent主要用来适配各加速硬件驱动。
  • cyborg-client主要调用cyborg-api,最终对用户提供命令行。
  • 目前为止cyborg中已支持的驱动包括FPGA和GPU;SPDK与现有社区代码结构不一致,已不可用;同时社区也在规划其他硬件驱动的支持,如AICHIP等
在最新的Stein版中为了能在placement组件中表现设备(device)和加速器(accelerator)以供nova调度。cyborg将所有的加速硬件(包括FPGA、GPU,以及目前正在规划的加速硬件等)都定义成以下的加速模型,最终以AttachHandle的方式绑定到虚机/容器/裸金属上。

6fd6002ab26252e83d5e36ba682938c0.png

图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等

4 cyborg源码分析

下面将针对cybrog源码以及cyborg与其他组件的交互方式进行分析。

4.1  cyborg-api

Cyborg的API服务, 对用户提供REST API接口, 支持POST/PUT/PATCH/DELETE/GET操作, 并通过cyborg-conductor和 cyborg-agent、cyborg-db进行交互。

1)cyborg-api的服务启动流程如下:

831dab1871f715ec26e14d2c19400e9c.png

图4‑1  API启动流程

2)API的匹配采用pecan框架,从下图可清晰的看出URL匹配规则

59a6b8c3ded33ee5708dd842ce8fbc47.png

图4‑2  API匹配规则

※注意以上是以V1版API为例进行说明。目前社区在统一了硬件加速设备模型之后,已基本废弃了V1版API,正在努力推V2版API。

4.2  cyborg-conductor

Cyborg Conductor服务, 对其他服务组件提供RPCAPI服务, 从而来操作数据库cyborg-db, 这样可以使其他组件和数据库解耦, 并提高数据库的安全性和并发能力。 调用RPC-API的服务有: cyborg-apicyborg-agent。类似nova-conductor服务。

1)cyborg-conductor的服务启动流程如下:

50c299151058666176ed2275ce19828a.png

图4‑3  Conductor启动流程

2)cyborg-conductor的调用流程如下:

b6f90b3f1dc814d909a23ffad80a2d66.png

图4‑4  Conductor调用流程

4.3  cyborg-agent

Cyborg Agent服务, 通过调用驱动, 来实现底层加速硬件的配置管理操作

1)cyborg-agent的启动流程如下。其中蓝线为服务启动流程;红线为定时服务,用于硬件设备的自动发现及管理。

971b67e39ec15ce5924044bf9e2798ac.png

图4‑5  Agent启动流程

2)agent侧已支持FPGA驱动,因此下面以FPGA的编程功能为例说明agent侧的调用流程

9737d1bd43ce3e9ed48620b298e90c61.png

图4‑6  FPGA编程流程

4.4  cyborg-client

cyborg-client是通过调用cyborg-api,来最终对用户提供命令行功能。目前cyborg-client只有基础框架(具体如下图),cyborg相关命令行功能尚不完善,社区还需抓紧时间推进。

39da989749b5e76c90c1262189e93bba.png

图4‑7  客户端启动流程

4.5  cyborg数据结构

cyborg的数据库结构如下:

a5d89d78dc2e05295f0c02f3215bce45.png

图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等组件的交互

cyborg与nova组件的交互的具体的交互流程如下图所示:

e91d1682c2e2518c01cc4ea59fbf9b6a.png

图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

5     总结

cyborg项目目前社区已实现基本的管理功能,与nova/placement等相关组件的交互尚在推进中,有待成熟。

苏研在cyborg社区中贡献涉及cyborg数据库的修改、FPGA驱动对于编程的支持等方面,今后也会持续关注cyborg项目的动态,并积极参与社区,同时引入社区功能,强化自身产品功能。 389a66b37114056703fb179ba0872e34.png

End

95f44b1681623602ca489977e2dfadc5.png

参考链接: 

[1]https://blog.youkuaiyun.com/weixin_42229404/article/details/80848546 [2]https://blog.youkuaiyun.com/horsefoot/article/details/53991752/ [3]http://www.diankeji.com/news/39164.html [4]https://blog.youkuaiyun.com/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

01953b54720cf8eb83c9bad728fb0abd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值