本文介绍了 DNN 的工作原理,以及为什么 FPGA 在推理任务中越来越受欢迎。它继续展示如何使用真实世界的演示在开发平台上执行 DNN 工作负载。
机器学习是使用算法解析数据,从中学习,然后做出决策或预测的过程。机器不是准备程序代码来完成任务,而是使用大量数据和算法进行“训练”,以自行执行任务。
使用神经网络(NN)算法正在彻底改变机器学习,这些算法是我们大脑中发现的生物神经元的数字模型。这些模型包含像大脑神经元一样连接的层。许多应用受益于机器学习,包括图像分类/识别、大数据模式检测、ADAS、欺诈检测、食品质量保证和财务预测。
作为机器学习的算法,神经网络包括由多层组成的各种拓扑和大小;第一层(“输入层”),中间层(“隐藏层”)和最后一层(“输出层”)。隐藏层对输入执行各种专用任务,并将其传递到下一层,直到在输出层生成预测。
一些神经网络相对简单,只有两层或三层神经元,而所谓的深度神经网络(DNN)可能包含多达1000层。为特定任务确定正确的 NN 拓扑和大小需要实验并与类似网络进行比较。
设计高性能机器学习应用需要网络优化(通常使用修剪和量化技术)和计算加速(使用 ASIC 或 FPGA 执行)。
在本文中,我们将讨论 DNN 的工作原理、为什么 FPGA 在 DNN 推理中越来越受欢迎,并考虑使用 FPGA 开始设计和实现基于深度学习的应用程序所需的工具 [1]。
开发 DNN 应用程序的设计流程
设计 DNN 应用程序的过程分为三个步骤。这些步骤是选择正确的网络,训练网络,然后将新数据应用于训练的模型进行预测(推理)。
如前所述,DNN 模型中有多个层,每个层都有一个特定的任务。在深度学习中,每一层都旨在提取不同级别的特征。例如,在边缘检测神经网络中,第一中间层检测边缘和曲线等特征。然后将第一中间层的输出馈送到第二层,第二层负责检测更高级别的特征,例如半圆形或正方形。第三层中间层组装其他层的输出以创建熟悉的对象,最后一层检测对象。
在另一个例子中,如果我们开始识别停车标志,训练好的系统将包括用于检测八角形、颜色和字母“S”、“T”、“O”和“P”的层,这些顺序是孤立的。输出图层将负责确定它是否为停车标志。
DNN 学习模型
有四种主要的学习模型:
监督:在此模型中,所有训练数据都被标记。NN 将输入数据分类为从训练数据集中学习的不同标签。
监督:在无监督学习中,深度学习模型被交给一个数据集,而没有明确的说明如何处理它。训练数据集是没有特定所需结果或正确答案的示例集合。然后,NN 尝试通过提取有用的特征并分析其结构来自动查找数据中的结构。
半监督:这包括一个训练数据集,其中包含标记和未标记的数据。当难以从数据中提取相关特征时,此方法特别有用,并且标记示例对专家来说是一项耗时的任务。
加固:这是奖励网络以获得结果并提高性能的行为。这是一个迭代过程:反馈的轮次越多,网络就越好。这种技术对于训练机器人特别有用,机器人在驾驶自动驾驶汽车或管理仓库库存等任务中做出一系列决策。
训练与推理
在训练中,未经训练的神经网络模型从现有数据中学习新功能。一旦训练好的模型准备就绪,就会向其提供新数据并测量系统的性能。正确检测图像的比例称为推理。
在图 1 给出的示例(识别猫)中,输入训练数据集后,DNN 开始调整权重以查找猫;其中权重是每个神经元之间连接强度的量度。
如果结果错误,错误将被传播回网络层以修改权重。这个过程一次又一次地发生,直到获得正确的权重,从而每次都得到正确的答案。
如何实现高性能 DNN 应用程序
使用 DNN 进行分类需要一个大数据集,这提高了准确性。但是,缺点是它为模型生成许多参数,这增加了计算成本并且需要高内存带宽。
有两种主要方法可以优化 DNN 应用程序。第一种是通过修剪冗余连接、量化权重和融合神经网络来缩小网络规模的网络优化。
修剪:这是 DNN 压缩的一种形式。它减少了与其他神经元的突触连接数量,从而减少了数据总量。通常,删除接近零的权重。这有助于消除冗余连接,而分类等任务的精度略有下降[2]。
量化:这样做是为了将神经网络调整到合理的大小,同时实现高性能的准确性。这对于边缘应用程序尤其重要,因为内存大小和计算数量必然受到限制。在此类应用中,为了获得更好的性能,模型参数保存在本地存储器中,以避免使用 PCIe 或其他互连接口进行耗时的传输。在该方法中,执行通过低位宽度数 (INT8) 神经网络近似使用浮点数 (FTP32) 的神经网络的过程。这大大降低了使用神经网络的内存需求和计算成本。通过量化模型,我们略微失去了精度和准确性。但是,对于大多数应用程序,不需要 32 位浮点数。
优化 DNN 的第二种方法是使用 ASIC 或 FPGA 进行计算加速。其中,后一种选择对机器学习应用程序有很多好处。其中包括:
功率效率:FPGA 提供灵活且可定制的架构,支持仅使用我们需要的计算资源。拥有用于 DNN 的低功耗系统在许多应用中至关重要,例如 ADAS。
可重配置性:与ASIC相比,FPGA被认为是原始的可编程硬件。此功能使它们易于使用并显着缩短了上市时间。为了赶上日常发展的机器学习算法,能够对系统进行重新编程是非常有益的,而不是等待SoC和ASIC的漫长制造时间。
低延迟:与最快的片外存储器相比,FPGA 内部的块 RAM 提供至少快 50 倍的数据传输速度。对于机器学习应用程序来说,这是一个游戏规则的改变者,对于这些应用程序来说,低延迟是必不可少的。
性能可移植性:您 可以 获得 下一代 FPGA 设备 的 所有 优势, 而 无需 任何 代码 修改 或 回归 测试。
灵活性:FPGA 是原始硬件,可以针对任何架构进行配置。没有固定的架构或数据路径来束缚您。这种灵活性使FPGA能够进行大规模并行处理,因为数据路径可以随时重新配置。这种灵活性还带来了任意对任意的 I/O 连接功能。这使得 FPGA 能够连接到任何设备、网络或存储设备,而无需主机 CPU。
功能安全:FPGA用户可以在硬件中实现任何安全功能。根据应用的不同,可以高效地进行编码。FPGA 广泛用于航空电子、自动化和安全性,这证明了这些设备的功能安全性,机器学习算法可以从中受益。
成本效益:FPGA是可重新配置的,应用的上市时间相当短。ASIC非常昂贵,如果没有出现错误,制造时间需要6到12个月。这对于机器学习应用程序来说是一个优势,因为成本非常重要,NN 算法每天都在发展。
现代 FPGA 通常在其结构中提供一组丰富的 DSP 和 BRAM 资源,可用于 NN 处理。但是,与 DNN 的深度和层大小相比,这些资源已不足以进行完整和直接的映射;当然不是像前几代神经网络加速器那样经常这样做。即使使用 Zynq MPSoC 等设备(即使是最大的设备也仅限于 2k DSP 切片,BRAM 总大小小于 10 MB),也无法将所有神经元和权重直接映射到 FPGA 上。
那么,我们如何利用FPGA的能效、可重编程性、低延迟和其他特性进行深度学习呢?
需要新的 NN 算法和架构修改,以便在内存资源有限的平台(如 FPGA)上实现 DNN 的推理。
现代 DNN 将应用程序划分为较小的块,由 FPGA 处理。由于FPGA中的片上存储器不足以存储网络所需的所有权重,因此我们只需要存储当前阶段的权重和参数,这些权重和参数是从外部存储器(可能是DDR存储器)加载的。
但是,在FPGA和存储器之间来回传输数据将使延迟增加多达50倍。首先想到的是减少内存数据。除了上面讨论的网络优化(修剪和量化)之外,还有:
权重编码:在FPGA中,可以无条件地选择编码格式。可能会有一些准确性损失,但是与数据传输造成的延迟及其处理的复杂性相比,这可以忽略不计。权重编码创建了二进制神经网络(BNN),其中权重减少到只有一位。这种方法减少了用于传输和存储的数据量,以及计算的复杂性。但是,此方法仅导致具有固定输入宽度的硬件乘法器的小幅减少。
批处理:在这种方法中,我们使用流水线方法将芯片上已有的权重重用于多个输入。它还减少了从片外存储器传输到 FPGA 的数据量 [5]。
在 FPGA 上设计和实现 DNN 应用
让我们深入了解如何在 FPGA 上实现 DNN。在此过程中,我们将利用最合适的商用解决方案来快速跟踪应用程序的开发。
例如,Aldec有一个名为TySOM-3A-ZU19EG的嵌入式开发板。除了各种外设外,它还搭载了赛灵思 Zynq UltraScale+ MPSoC 系列中最大的 FPGA,该器件拥有超过 100 万个逻辑单元,包括一个运行频率高达 1.5GHz 的四核 Arm Cortex-A53 处理器。
重要的是,就我们的目的而言,这款庞大的 MPSoC 还支持 Xilinx 的深度学习处理单元 (DPU),该单元是该公司为机器学习开发人员创建的。
DPU 是专用于卷积神经网络 (CNN) 处理的可编程引擎。它旨在加速计算机视觉应用(如图像/视频分类和对象跟踪/侦测)中使用的 DNN 算法的计算工作负载。
DPU有一个特定的指令集,使其能够有效地与许多CNN一起工作。与常规处理器一样,DPU 获取、解码和执行存储在 DDR 内存中的指令。该单元支持多个CNN,如VGG,ResNet,GoogLeNet,YOLO,SSD,MobileNet,FPN等[3]。
DPU IP 可以作为一个模块集成到所选 Zynq-7000 SoC 和 Zynq® UltraScale™+ MPSoC 器件的可编程逻辑 (PL) 中,并直接连接到处理系统 (PS)。
为了创建 DPU 指令,Xilinx 提供了深度神经网络开发套件 (DNNDK) 工具包。赛灵思表示:
DNNDK被设计为一个集成框架,旨在简化和加速深度学习处理器单元(DPU)上的深度学习应用程序开发和部署。DNNDK 是一个优化的推理引擎,它使 DPU 的计算能力变得容易访问。它为开发深度学习应用程序提供了最好的简单性和生产力,涵盖了神经网络模型压缩、编程、编译和运行时启用的各个阶段[4]。
DNNDK 框架包括以下单元:
体面:执行修剪和量化以满足低延迟和高吞吐量
DNNC:将神经网络算法映射到 DPU 指令
DNNAS:将 DPU 指令组装成 ELF 二进制代码
N2立方体:充当 DNNDK 应用程序的加载程序,并处理资源分配和 DPU 调度。其核心组件包括 DPU 驱动程序、DPU 加载器、示踪器和用于应用程序开发的编程 API。
分析器:由DPU示踪剂和DSight组成。D 跟踪器在 DPU 上运行 NN 时收集原始分析数据。DSight 使用此数据生成可视化图表以进行性能分析。
探险家:提供 DPU 的运行模式配置、状态检查和代码签名检查。
DDump:将信息转储到 DPU ELF、混合可执行文件或 DPU 共享库中。它加快了用户的调试和分析速度。
这些适合图 2 所示的流程。
图2.上述深度神经网络开发工具包 (DNNK) 框架使开发人员能够更轻松地完成基于 FPGA 的机器学习项目的设计过程。
使用 DNNDK 使开发人员设计基于 FPGA 的机器学习项目的过程变得更加容易;此外,像Aldec的TySOM-3A-ZU19EG板这样的平台也提供了一个宝贵的启动。例如,Aldec 准备了一些针对电路板的示例,包括手势检测、行人检测、分段和交通检测,这意味着开发人员不会从一张白纸开始。
让我们考虑一下今年早些时候在Arm TechCon上展示的一个演示。这是一个使用TySOM-3A-ZU19EG和FMC-ADAS子卡构建的交通检测演示,该子卡为5倍高速数据(HSD)摄像头、雷达、激光雷达和超声波传感器提供接口和外设,这些传感器是大多数ADAS应用的感官输入。
图 3 显示了演示的体系结构。FPGA 中实现的两个 DPU 通过 AXI HP 端口连接到处理单元,以执行深度学习推理任务,例如图像分类、对象检测和语义分割。DPU 需要指令来实现神经网络,神经网络由 DNNC 和 DNNAS 工具准备。他们还需要访问输入视频和输出数据的内存位置。
图3.流量检测演示具有 5 个视频输入管道,用于数据打包、AXI4 到 AXI 流数据传输、色彩空间转换 (YUV2RGB) 以及将视频发送到内存。
应用程序在应用程序处理单元 (APU) 上运行,通过管理中断和在单元之间执行数据传输来控制系统。DPU 和用户应用程序之间的连接是通过 DPU API 和 Linux 驱动程序实现的。有一些功能可以将新图像/视频读取到 DPU、运行处理并将输出发送回用户应用程序。
模型的开发和训练是在FPGA之外使用Caffe完成的,而优化和编译是使用作为DNNDK工具包的一部分提供的DECENT和DNNC单元完成的(图2)。在此设计中,SSD 对象检测 CNN 用于背景、行人和车辆检测。
在性能方面,使用四个输入通道实现了45 fps,展示了使用TySOM-3A-ZU19EG和DNNDK工具包的高性能深度学习应用。
审核编辑:郭婷
-
FPGA
+关注
关注
1629文章
21748浏览量
604026 -
机器学习
+关注
关注
66文章
8422浏览量
132743
发布评论请先 登录
相关推荐
评论