多硬件异构&从硬件层到算法层评估提升模型性能-英特尔openVINO工具套件课程总结(中)

多硬件异构&从硬件层到算法层评估提升模型性能-英特尔openVINO工具套件课程总结(中)这次将会带来一些很硬的东西,如何从硬件底层到传输层到算法层提升模型性能、GPU、CPU、VPU、FPGA的异构系统、英特尔酷睿第六代Skylake架构、多设备协同工作的架构、传感器通道融合、CV、NLP、神经网络处理等下面是课程的链接,我觉得他们讲的非常清晰,如果我写的地方有不清楚的部分可以看一下他们的那个课程:http://edu.csdn.net/course/detail/32064?utm_sou

多硬件异构&从硬件层到算法层评估提升模型性能-英特尔openVINO工具套件课程总结(中)

这次将会带来一些很硬的东西,如何从硬件底层到传输层到算法层提升模型性能、GPU、CPU、VPU、FPGA的异构系统、英特尔酷睿第六代Skylake架构、多设备协同工作的架构、传感器通道融合、CV、NLP、神经网络处理等

下面是课程的链接,我觉得他们讲的非常清晰,如果我写的地方有不清楚的部分可以看一下他们的那个课程:
http://edu.csdn.net/course/detail/32064?utm_source=coderacademy

硬件异构系统的构建

在最右侧的是CPU,是通用(GPU general purpose GPU)计算设备,它的功能更加多元化可以处理各种问题。左侧是定制化的加速处理硬件,它在处理一些特定问题的时候有着很出色的表现。
请添加图片描述

通用(GPU general purpose GPU)计算设备需要匹配不同的模块来处理大量的任务,但是加速器只需要一个简单的结构去运行一个特定的任务。
请添加图片描述

CPU可以支持最广泛的程序应用,它用有最广泛的边界模型,支持多种编程语言,但是在画面的渲染方面来说,CPU的表现不如GPU,GPU的执行这些任务就会更快,GPU的编程更加复杂和独立,调试工具比较少。拿英伟达来说,一般无法通过多种编程语言进行调用,常CUDA对GPU进行操作。 VPU是面向特定领域的,高度定制化的加速器,这款硬件能够在更低的情况下执行更高效的任务。 FPGA是可编程门阵列,是混合(Mixing)解决方案。但是FPGA也是有它的局限的。
请添加图片描述

英特尔的硬件设备每个的专长的都不一样,有的适合去加速视频,有的适合去解码,所以最理想的状态是不同的硬件相互合作,共同去完成任务。

请添加图片描述

在总多的硬件中主要是以CPU为主控制器,将我们所需要执行的任务分发给加速器,然后加速器将运算的结果返回给CPU。
请添加图片描述

在以CPU做主控的前提下假设(Hypothesis)每个流(stream)程都用了不同的加速器,那就可以讲每个流(stream)程开发到极致。在一定的组合条件下可以使得系统拥有超越单个硬件数量级的倍数。
请添加图片描述

硬件加速的话我们主要考虑三个方面的问题:1、硬件的使用。2、不同模型、不同语言的APIS的转化。3、数据格式、内存布局也都是不一样的。所以openVINO主要解决的问题就是在如何很好地协调这三个问题使得系统处理速度最快。
请添加图片描述

我们前面已经提及过图像处理的五个过程,解码编码(code)、图像处理、推理这五个过程,那我们根据这个五个过程的不同特性可以选用GPU、CPU、AI(人工智能(Artificial Intelligence)) (主要产品有计算棒)分别处理这五个流(stream)程。
请添加图片描述

这句是我们要达到的三效果:
每个任务都在最高效的硬件运行
平衡各种系统资源
尽可能少地减少数据传输
请添加图片描述

对于不同的模型、不同的架构的解决方法是将他们转化成一个相同的中间语言– IR,再将IR 在各种硬件中执行。
请添加图片描述
在CPU、GPU、FPGA、 AI(人工智能(Artificial Intelligence))中的IR库可以分别被他们MKL- DNN、cl-DNN、DLIA 、myraid识别然后执行
请添加图片描述

我们来看一下这个表,这个表中如果你看单个的硬件在三种模型的变现,你会发现其实每个硬件在不同模型的性能是不一样的,CPU在关键点目标检测中会有很良好的性能,但是GPU却不算太强。最后你看第四列,叠加后很明显每一部分都超越了单个的硬件性能。
请添加图片描述

这个是英特尔集成(ensemble)显卡,英特尔的CPU中会包含一些GPU的模块电路,CPU会将图形处理单元集成(ensemble)在同一块芯片上。所以一个CPU会包含多个芯片内核,比如说下面这个就是四核的,如果像下面这种样子的GPU和CPU集成(ensemble)在同一块芯片上,那么两者的通讯的会变得非常快。

请添加图片描述

当然大部分的GPU不是直接集成(ensemble)在一块CPU上的,常见的是一块英伟达显卡加一块英特尔的CPU,那么两者之间的内存带宽和GPU的可用内存都会影响数据通讯的效率。
请添加图片描述

假设(Hypothesis)我们现在需要处理一个模型,首先是用与之擅长的设备处理,第二个是设备的之间的信号传输不能成为影响性能的因素。看下面这个例子,CPU将压缩的视频流(stream)发送给GPU,然后取回解压好的压缩视频。将解压好的视频给VPU推理,然后将结果返回给CPU。
这个就是方案一。
请添加图片描述

那么现在我们来看下第二种方案,第二种我们先将压缩的视频发送给GPU,然后GPU把视频流(stream)发送给VPU直接处理,然后结果返回CPU。这样子做的话,就要求三个硬件是同步的。

OPENVINO就可以完成这个组合。

请添加图片描述

我们来看下面这个架构,这个是英特尔酷睿第六代Skylake的整体布局架构,这里是双核的,蓝色这块是最小的GPU,具有24个集成(ensemble)单元,占用了芯片一半的大小。
请添加图片描述

下面是GT4和四核的架构,可以看到,性能有了很大的提升。

请添加图片描述

下面来看下集成(ensemble)的GPU的内部,这里有24个执行单元,以及VBOX、VEBOX这些单元可以加速图像处理
请添加图片描述

请添加图片描述
这个是英特尔的独立GPU内部结构
请添加图片描述

这里提一下media- SDK,一个软件可以帮你在多语言多平台上编程GPU,加速视频解码编码(code)等
请添加图片描述

第二个是成长中的one VPL
请添加图片描述

而且你在CV、FFMPGE、Gsteamer等框架调用这两个API
请添加图片描述

性能测试

比如说我们有个模型,这是采用典型的流(stream)水线来处理图形,每次处理按顺序去处理图片,依次处理四个图像如上图。然后有第二种解决方案,我一次处理四张图是不是可以生成更多的图像
请添加图片描述

从延迟来看,上面的延迟是10s一张,下面是11.3秒四张。但是吞吐率上来说,底部会更高。所以看实际中的需求。

请添加图片描述
请添加图片描述

下面是吞吐率和延迟的定义
请添加图片描述

除此之外还有成本等多项指标
请添加图片描述

影响应用推理性能的三个参数

1、神经网络
2、设备
3、执行参数
请添加图片描述
我们可以拿下面两个模型来举例。神经网络的卷积(convolution)是选择300300比500500轻,链接层的选择、内存占用这些都是都是要考虑的。如果选择的模型太重了,无法将所有权重的加载到内存时就没用了。
请添加图片描述
选择的设备会对推理性能。比如说设备的数据格式时不一样的,那么就需要软件转化,数据格式会影响内存大小和所需的计算能力。我们需要确保用时需要内存够大,能够保持权重。
请添加图片描述

3、执行参数
这个需要自己去调,一般的AI(人工智能(Artificial Intelligence))工程师都只是在这一层下功夫,接下里详细介绍一下这六个
请添加图片描述

这里有个软件benchmark,官方提供来测量性能指标。
请添加图片描述

如何提高推理速度

我们来看下两种执行模式:看看他们哪个快
1、先推理第一帧,然后准备推理第二帧,这个叫同步执行,这个需要等待执行一个再执行下一个。
2、先发送第一帧时别等推理完成,然后继续填入第二帧,然后推理完时就可以接上第二帧,这个叫异步(asynchronous)执行
请添加图片描述

3、批处理和推理请求
我们可以将四个输入(input)项打包起来时,可以一次处理batch ,这个时候batch=4。推理请求是指系统可以同时并行的程序数量。
请添加图片描述
4、视频流(stream)处理功能
在吞吐量模式下,线程将从以前一组进行分组成几组,数据的局部性更加出色。
请添加图片描述
我们来举个例子去理解这个线程。
我们可以选择要分配的线程数,或者将线程固定到特定核心,或者让CPU分配给资源。
这就想一个核心一个车道,如何每个核心可以处理两个线程,所以一个核心相当于双车道。

请添加图片描述
请添加图片描述

请添加图片描述
第二种情况是如果这个时候我线程很多,而核心(车道)还是两个的话就堵车。
请添加图片描述

推理性能中的数据格式

上面已经提到过的数据线性与否、卷积(convolution)层、链接层等等都是影响性能
请添加图片描述

数据格式通常会影响性能,因为内存大小和内存带宽小会有优势。你可以在一个FP32的空间中配置四个INT8.第二个是提升运算速度,一般是整数更快。
请添加图片描述

那我们可以来打包数据
我们可以把多个INT8打包在一起,执行单指令单数据的操作。
在一个FP32中可以打包四个INT8
然后越往后的打包的越多
请添加图片描述

为支持聚合需要有非常大和非常小的聚合,在压缩为更小的范围来进行推理。
请添加图片描述

数据格式转化的两种方式
用较低精度的权重重新训练模型
转化模型精度
请添加图片描述

将模型数据转化为整数的办法
POT–后训练优化工具
输入(input)的是转化后的IR模型 和带有标注的数据集(Dataset)
请添加图片描述

读取器读取数据
转化注释
预处理对数据操作
调用推理引擎(VINO、caffe等)
计算量化指标
请添加图片描述

POT主要是在两种模式进行工作
第一种是默认量化模式,执行最快量化,速度快,但是更注重性能。但是不具备感知性能。
请添加图片描述
第二种是准确性感知模式
算法量化一些层,直到满足预设的准确率(Precision)。

请添加图片描述

最终不是所有的数据都会被转化,而是原有的数据和转化的数据叠加的结果
请添加图片描述

音频处理

图像特征提取
在上一章我们知道在图像处理中如果我们可以掌握好图片中的每一个像素,就可以确定图像的全部信息,但是在我们对图像进行旋转或者其他处理后就会转化成完全不同的图像。
请添加图片描述

我们通常会使用不随着所可能操作而变化的表达方式。我们通常使用神经网络的第一层(first layer)负责这个任务,第一层(first layer)拿到原始图像,第一层(first layer)和第一批层通常是用过卷积(convolution)从图像中提取特征,第一层(first layer)看起来像边缘图像。第二层提取更高级别的特征,比如说圆形、直角等形状。所以第一批层的每一批层都会提取越来越来的特征。想要保持这些图形特征不变(invariant)的方法是使用多种图像过滤器,并以较小的缩放和旋转来提取特征。完全链接层可以根据提取的特征层来确定这是否是一朵花。简单来说,这个流(stream)程就是视觉处理的描述。

请添加图片描述

音频特征也图像特征提取一样,通过多个卷积(convolution)层提取特征音频不变(invariant)特征。
请添加图片描述
音频我们学过通信原理、信号处理课程都知道,可以理解为音频是时域中的信号,进行信号采用和量化后(傅立叶变化后)也可以在频域得到相应的表示。
请添加图片描述

所以时域和频域可以结合在一起,利用的是短时傅立叶变换(Fourier transform)(FFT),如果我们多个时间运用这种方法把时域和频域结合在一起就可以得到如下的光谱图。
请添加图片描述

光谱图可以看作是很多彼此相邻排列的FFT,每个FFT都是在较小的时间范围内完成的,表示创建的和合成的音频信号。颜色表示每个频率的幅度和强度。颜色越亮颜色越高。横轴是时间,我们可以看到声音是如何随时间变化的
请添加图片描述

下面这个图形和上面那个图像表示的内容是一致的,但是纵坐标不同,一般都是对这个信号图进行处理。
请添加图片描述
我们将音频信息提取出光谱图,然后将光谱图送入到CNN 卷积(convolution)神经网络(CNN网络)中就可以对音频信号进行分类。
请添加图片描述
NLP的特点的是信号的长度是可变的,不同单词间的差异很大,并且还有停顿和静默时刻。所以需要确定一个时间窗口,在开始分类之前,语境、单词的顺序等都很重要。
请添加图片描述

比如说我们在哪里见面、去哪里,这种语境肯定是与地点相关联的,所以我们还需要历史记录,不仅是分类的单词,还有句子中所有的单词。

请添加图片描述

RNN神经网络是一个前馈神经网络(Feedforward Neural Networks),在底部输入(input)顶部输出,向一个方向前进。
请添加图片描述

这种思想和NLP中对单词的处理也是一样的,在这里不是对整个神经网络的输出,而是下一步可以用来对下一个单词分类的输出。
请添加图片描述

现在我们有一段声音,然后让它变成文字。我们先将声音转化成为光谱图。
请添加图片描述

将神经网络用在多个窗口,对每个光谱进行推理,逐个推理出每个话的意思。
请添加图片描述

一些OPENVINO强大工业包

1、gvatrack
接着我们来介绍重要的概念,方便后面的通道融合的展开。
一般来说我们读视频流(stream)的处理很多基本思想是对每一帧进行目标检测,但是如果你是采用的跟踪的办法,每次不对物体进行目标检测而是根据前面已经目标检测出来的信息就可以以很低的代价(cost)进行目标检测。
请添加图片描述

我们把这个思想插入到模型中,比如说我们只是每十帧目标检测一次,中间的时间我们都是只跟踪对象,这样子就可以节省大量的算力。
请添加图片描述

更多的信息可以参考官方的技术文档
请添加图片描述
2、gvamataconvert
接下来我们把技术贯彻到一些工业项目中去理解不同设备交互工作,比如说智慧城市项目中有成百上千的摄像头,所有的摄像头都需要与城市指挥中心通信。所以必须建立起完备的处理、通信、管理系统。
请添加图片描述

我们可以以六个摄像头为一组,与路口的交互计算机和节点进行通信。
请添加图片描述

然后再路口的计算阶段与街区的节点进行通信
请添加图片描述
所有的街区再与云指挥中心进行通信
请添加图片描述

比如说我们通过一个摄像头目标检测到新面孔,然后把图片信息传到路口的交互口去提取面孔的特征将其传输给街区交互口,街口交互口将从所有的下级收取这个嫌疑人的信息,最后上传到指挥中心。
指挥中心就可以向下传达这个是嫌疑人的指令
这里的所有的交互口的信息都需要能够相互进行数据通讯。
请添加图片描述
这里的设备传输可以使用gvamateconvert 可以吧数据转化成比较容易处理的格式
请添加图片描述
3、gvamatapulish
然后把格式通过MQTT协议进行传输,为什么用它?因为它确实简单好用。每个客户端都可以发布和接受。
请添加图片描述
openVINO中有专用的MQTT包gvamatapublish
请添加图片描述

数据流(stream)程的时间同步

我们现在物联网发展得非常快。多传感器智能融合,每个传感器的数据都将会作为AI(人工智能(Artificial Intelligence))模型的一部分。比如说我们有音频和视频两个数据流(stream)程,然后我们要融合实现在两个数据流(stream)程交换数据。
所以需要解决的是两个问题
如何进行信息传输(message passing)(上面那两个数据)
如何保证数据流(stream)程时间同步(比如说我目标检测到的是汽车喇叭是属于第六十帧的)
请添加图片描述

接下来我们来看一下openvino数据流(stream)程构建的方式
每个数据流(stream)程都有发送和接收数据的两个口

请添加图片描述

当然我们也可以设置多个输出的源和输入(input)端

请添加图片描述

现在我们已经构造了两个数据流(stream)程了,一个视频模型一个音频模型
请添加图片描述

我们把解码放在同一个阶段执行,这个问题不大,因为信息获取大概率都是同时获取的
请添加图片描述
将解码的信息同时发送到两个数据流(stream)程之中
请添加图片描述

中间的模型就是算法对数据的处理
然后我们将音频目标检测的结果发送到一个临时文件中,将视频目标检测的结果都是放到GST。BUFFER缓冲区中,我们可以构建一个python脚本,将两处同步。
请添加图片描述

依此类推,我们甚至可以一定意义上模仿人类的所有的感知,对温度、味觉、色彩、声波等多个信息进行目标检测。

版权声明:本文为博主weixin_47567401原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_47567401/article/details/122483675

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年1月15日 上午8:50
下一篇 2022年1月17日 上午9:27

相关推荐