赛灵思FPGA卷积神经网络,云中的机器学习

时间:2025-11-03  作者:Diven  阅读:0

凭借出色的性能和功耗指标,赛灵思 FPGA 成为设计人员构建卷积神经网络的首选。新的软件工具可简化实现工作。

赛灵思FPGA卷积神经网络,云中的机器学习

人工智能正在经历一场变革,这要得益于机器学习的快速进步。在机器学习领域,人们正对一类名为“深度学习”算法产生浓厚的兴趣,因为这类算法具有出色的大数据集性能。在深度学习中,机器可以在监督或不受监督的方式下从大量数据中学习一项任务。大规模监督式学习已经在图像识别和语音识别等任务中取得巨大成功。

深度学习技术使用大量已知数据找到一组权重和偏差值,以匹配预期结果。这个过程被称为训练,并会产生大型模式。这激励工程师倾向于利用专用硬件(例如 GPU)进行训练和分类。

随着数据量的进一步增加,机器学习将转移到云。大型机器学习模式实现在云端的 CPU 上。尽管 GPU 对深度学习算法而言在性能方面是更好的选择,但功耗要求之高使其只能用于高性能计算集群。亟需能够加速算法又不会显著增加功耗的处理平台。在这样的背景下,FPGA 似乎是理想的选择,其固有特性有助于在低功耗条件下轻松启动众多并行过程。

让我们来详细了解一下如何在赛灵思 FPGA 上实现卷积神经网络 (CNN)。CNN 是一类深度神经网络,在处理大规模图像识别任务以及与机器学习类似的其问题方面已大获成功。在当前案例中,针对在 FPGA 上实现 CNN 做一个可行性研究,看一下 FPGA 是否适用于解决大规模机器学习问题。

卷积神经网络是深度神经网络 (DNN),工程师最近开始将该技术用于各种识别任务。图像识别、语音识别和自然语言处理是 CNN 比较常见的几大应用。

什么是卷积神经网络? 

卷积神经网络是深度神经网络 (DNN),工程师最近开始将该技术用于各种识别任务。图像识别、语音识别和自然语言处理是 CNN 比较常见的几大应用。

2012 年,Alex Krishevsky 与来自多伦多大学 (University of Toronto) 的其研究人员 [1] 提出了基于 CNN 的深度架构,赢得了当年的“Imagenet 大规模视觉识别挑战”奖。模型与竞争对手以及之前几年的模型相比在识别性能方面取得了实质性的提升。自此,AlexNet 成为了所有图像识别任务中的对比基准。

AlexNet 有五个卷积层和三个致密层(图 1)。每个卷积层将一组输入特征图与一组权值滤波器进行卷积,得到一组输出特征图。致密层是完全相连的一层,其中的每个输出均为所有输入的函数。

卷积层  

AlexNet 中的卷积层负责三大任务,如图 2 所示:3D 卷积;使用校正线性单元 (ReLu) 实现激活函数;子采样(最大池化)。3D 卷积可用以下公式表示:

其中Y (m,x,y) 是输出特征图 m 位置 (x,y) 处的卷积输出,S 是 (x,y) 周围的局部邻域,W 是卷积滤波器组,X(n,x,y)是从输入特征图 n 上的像素位置 (x,y) 获得的卷积运算的输入。

所用的激活函数是一个校正线性单元,可执行函数 Max(x,0)。激活函数会在网络的传递函数中引入非线性。最大池化是 AlexNet 中使用的子采样技术。使用该技术,只需选择像素局部邻域最大值传播到下一层。

定义致密层 

AlexNet 中的致密层相当于完全连接的层,其中每个输入节点与每个输出节点相连。AlexNet 中的第一个致密层有 9,216 个输入节点。将这个向量乘以权值矩阵,以在 4,096 个输出节点中产生输出。在下一个致密层中,将这个 4,096 节点向量与另一个权值矩阵相乘得到 4,096 个输出。使用 4,096 个输出通过 softmax regression 为 1,000 个类创建概率。

在 FPGA 上实现 CNN 

随着新型高级设计环境的推出,软件开发人员可以更方便地将其设计移植到赛灵思 FPGA 中。软件开发人员可通过从 C/C++ 代码调用函数来充分利用 FPGA 与生俱来的架构优势。Auviz Systems 的库(例如 AuvizDNN)可为用户提供最佳函数,以便其针对各种应用创建定制 CNN。可在赛灵思 SD-Accel™ 这样的设计环境中调用这些函数,以在 FPGA 上启动内核。

最简单的方法是以顺序方式实现卷积和向量矩阵运算。考虑到所涉及计算量,因此顺序计算会产生较大时延。

顺序实现产生很大时迟的主要原因在于 CNN 所涉及的计算的绝对数量。图 3 显示了 AlexNet 中每层的计算量和数据传输情况,以说明其复杂性。

很有必要采用并行计算。有很多方法可将实现过程并行化。图 6 给出了其中。在这里,将 11x11 的权值矩阵与一个 11x11 的输入特征图并行求卷积,以产生一个输出值。这个过程涉及 121 个并行的乘法-累加运算。根据 FPGA 的可用资源,我们可以并行对 512 抑或 768 个值求卷积。

为了进一步提升吞吐量,我们可以将实现过程进行流水线化。流水线能为需要一个周期以上才能完成的运算实现更高的吞吐量,例如浮点数乘法和加法。通过流水线处理,第一个输出的时延略有增加,但每个周期我们都可获得一个输出。

使用 AuvizDNN 在 FPGA 上实现的完整 CNN 就像从 C/C++ 程序中调用一连串函数。在建立对象和数据容器后,首先通过函数调用来创建每个卷积层,然后创建致密层,最后是创建 softmax 层,如图 4 所示。

AuvizDNN 是 Auviz Systems 公司提供的函数库,用于在 FPGA 上实现 CNN。该函数库提供轻松实现 CNN 所需的所有对象、类和函数。用户只需要提供所需的参数来创建不同的层。例如,图 5 中的代码片段显示了如何创建 AlexNet 中的第一层。

AuvizDNN 提供配置函数,用以创建 CNN 的任何类型和配置参数。AlexNet 仅用于演示说明。CNN 实现内容作为完整比特流载入 FPGA 并从 C/C++ 程序中调用,这使开发人员无需运行实现软件即可使用 AuvizDNN。

FPGA 具有大量的查找表 (LUT)、DSP 模块和片上存储器,因此是实现深度 CNN 的最佳选择。在数据中心,单位功耗性能比原始性能更为重要。数据中心需要高性能,但功耗要在数据中心服务器要求限值之内。 

像赛灵思 Kintex® UltraScale™ 这样的 FPGA 器件可提供高于 14 张图像/秒/瓦特的性能,使其成为数据中心应用的理想选择。图 6 介绍了使用不同类型的 FPGA 所能实现的性能。

一切始于 c/c++

卷积神经网络受到青睐,并大规模部署用于处理图像识别、自然语言处理等众多任务。随着 CNN 从高性能计算应用 (HPC) 向数据中心迁移,需要采用高效方法来实现。

FPGA 可高效实现 CNN。FPGA 的具有出色的单位功耗性能,因此非常适用于数据中心。

AuvizDNN 函数库可用来在 FPGA 上实现 CNN。AuvizDNN 能降低 FPGA 的使用复杂性,并提供用户可从其 C/C++ 程序中调用的简单函数,用以在 FPGA 上实现加速。使用 AuvizDNN 时,可在 AuvizDNN 库中调用函数,因此实现 FPGA 加速与编写 C/C++ 程序没有太大区别。

图 1 –  AlexNet 是图像识别基准,包含五个卷积层(蓝框)和三个致密层(黄)。

图 2 – AlexNet 中的卷积层执行 3D 卷积、激活和子采样。

图 3  – 图表展示了 AlexNet 中涉及的计算复杂性和数据传输数量。

图 4 - 实现 CNN 时的函数调用顺序。

图 5 – 使用 AuvizDNN 创建 AlexNet 的 L1 的代码片段。

图 6 – AlexNets 的性能因 FPGA 类型不同而不同。

猜您喜欢

电阻作为最基础也是最重要的元件,其性能直接影响整个电路的稳定性和可靠性。美磊(Mag.Layers)作为一家知名的电子元件品牌,其长电极电阻产品因优异的性能和稳...
2015-04-14 20:00:30

电容器是电子设备中重要的元件。的容量影响着设备的性能。了解电容器容量允许偏差是非常必要的。本文将对电容器的容量偏差进行详细分析。什么是电容器容量允许偏差电容器容...
2025-03-24 17:30:02

变容二极管是特殊类型的二极管,其主要特性是能够通过改变施加在其上的电压来调节其电容值。这种特性使得变容二极管在电子电路中得到了的应用,尤其是在调谐电路和频率合成...
2025-03-31 13:31:07

油泵作为工业和汽车领域中不可少的设备,具有多项显著优势。油泵能够高效地输送各种类型的油液,包括机油、燃油和润滑油等,确保设备的正常运行。油泵的设计通常考虑到耐用...
2011-01-17 00:00:00

肖特基二极管是应用于电子电路中的重要元件,因其独特的特性而受到工程师和设计师的青睐。与普通二极管相比,肖特基二极管具有更快的开关速度和更低的正向压降,这使得在高...
2025-04-07 17:31:08


磁性角度传感器是利用磁场变化来测量角度的电子设备。通过感应磁场的方向和强度,将角度信息转换为电信号,应用于工业自动化、机器人、汽车及航空航天等领域。这种传感器通...
2013-02-03 00:00:00

变容二极管,又称为可变电容二极管,是利用电压变化来改变其电容值的半导体器件。应用于调谐电路、频率合成器和无线电接收器等领域。判断变容二极管的好坏对于保证电路的正...
2025-04-06 20:01:40

在电子世界中,贴片电阻是必不可少的元件。而它的精度,直接影响着电路的性能。为了简洁明了地表示精度,通常使用字母代码进行标记。 掌握这些代码,能帮助你快速选择合适...
2025-04-14 15:02:42

反相器是重要的电子元件,应用于电路设计中。主要作用是将输入信号的电压极性反转,即输入为高电平时,输出为低电平,反之亦然。这一特性使得反相器在各种电路中有着着关键...
2014-06-25 00:00:00