Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks ,2015 论文阅读笔记

简述:这篇文章的贡献在于

  • 对CNN FPGA加速器的技术 (例如循环平铺和转换) 优化,同时进行了定量分析计算吞吐量和片内外I/0带宽和建模

  • 通过roof-line模型搜索加速器硬件参数设计空间中最优的方案

  • 最后通过此建模方案设计了一个加速器,获得当时最优性能密度的CNN加速器。

背景与动机

回答Paper 背景和解决什么问题p>

背景

  • 卷积神经 络 (CNN) 已被广泛应用

  • 基于FPGA平台提出了各种用于深度CNN的加速器,因为它具有高性能、可重构、快速开发等优点

动机

尽管当时的FPGA加速器已显示出比通用处理器更好的性能,但加速器设计空间尚未得到很好的利用。由于逻辑资源或内存带宽的利用不足,现有方法无法实现最佳性能。

需求一个对CNN FPGA加速器的建模方案来探索设计空间中的最优设计方案。

CNN加速器技术优化和计算性能与资源需求建模

对于一个典型的CNN模型卷积层如下所示。

常见的一般是加速计算的设计方法是loop tiling技术,将code 1转化为如下代码,区分片上片外的循环,使得片上操作数据高吞吐量。

请注意,循环迭代器i和j没有平铺,因为CNN中卷积窗口大小K的大小相对较小 (通常范围为3到11)。

由此可以注意到:数据共享关系依赖关系越强,对应的硬件实现就越复杂,需要的硬件资源更多。

如figure 5中的 input_fm[tii][Strr+i][Stcc+j]:

  • 由于数组的索引位中未出现too,则与too与infut_fm是Irrenlevant数据共享关系

  • 由于tii是单独的索引关系,故tii与infut_fm是Independent 数据共享关系

  • 由于trr 和 i , tcc 和 j 两组循环迭代变量分别关联在数组同一个索引位置,故他们两个都形成Dependent 数据共享关系

对figure 5中所有数据和循环的数据共享依赖总结可以得到如下表:

优化 loop pilelining

循环流水线是高级综合中的关键优化技术,可通过重叠执行来自不同循环迭代的操作来提高系统吞吐量。

但所实现的吞吐量受到程序中的资源约束和数据依赖性的限制。循环的依赖将阻止完全流水线化。

因此polyhedral-based 数据依赖分析可以将并行环路电平置换为最内层,将最少关系数据依赖关系的循环放在最内层进行流水。

在如上的约束下计算code 3的计算性能:

但这样做我理解片上的存储量会更大。

Loop Transformations for Data Reuse 面向数据重用的循环转换

利用polyhedral-based 数据依赖分析方法来进行loop transformation,可以充分的使用Local Memory Promotion优化。

  • 其中分子是总的计算操作数,其中2我理解为乘累加算2个操作数。

  • 其中α表示对输入/输出特征图和权重的外部存储器的访问次数

  • B表示输入/输出特征图和权重在片上暂存的数据量大小,也表示一次片内外交互的数据量大小,其具体计算如下式子

    • 输入特征图和权重数据在figure 9的load 操作是一致的,都被4外片外的循环包含,所以访问外存的次数等于片外的四层循环数

    • 横坐标是 CTC比率,单位是每byte的外存DRAM访问可以进行的计算操作数FLOP

    • 纵坐标是计算性能GFLOPS(Giga Floating-point Operations Per Second,每秒十亿次浮点运算数)

    • 图中的点计算方法如下公式中,计算性能是片上计算能力和与内存通信带宽限制下的计算能力中最小值。其中CTC Ratio是内存建模的结果,BW是硬件平台提供的带宽。

      由图的性质分析图b:

      • 红色的线是硬件平台的带宽限制和加速器最高提供的计算性能

      • 其中以A点为代表的超过了计算性能,这时候虽然未达到计算性能天花板,但其斜率代表的I/O带宽>硬件平台的带宽上限,故只能映射到A’点,片上计算性能收到带宽限制发挥不出来

      • 点C和点D都有相同的计算性能,但C的斜率比D的小,说明对I/O带宽需求小,所以选择C点更合适

      由此总结在roof-line模型中,在硬件平台资源的限制中,越靠右上的点,性能越好,同时I/O带宽需求更低。

      加速器实现

      通过上述的roof-line模型,对figure2 中的示例CNN程序进行加速器设计空间探索,得到了Table 4中的最优选择结果。

      在统一展开因子 的情况下,与每个优化卷积层的总执行周期相比,退化在5% 以内。文章的实验中选择了跨卷积层具有统一展开因子的CNN加速器。文章提到枚举空间大小的上限是98,000合法设计,可以在普通笔记本电脑上在10分钟内完成。

      注意文章设计的加速器支持单个展开因子,设计硬件加速器以支持具有不同展开因子的多个卷积层将具有挑战性,需要复杂的硬件结构来重新配置计算引擎和互连。

      如下图是整个加速器的总览图。

      • 两级展开循环 (Figure 2中的Tm,Tn) 被实现为同时执行的计算引擎,使用如图7所示的树形聚结构。

      • 对于展开因子 ,计算引擎被实现为树形多边形结构,具有来自输入特征图的7个输入和来自权重的7个输入和一个来自偏置的输入,存储在输出特征图的缓冲区中。

      • 片上buffer建立在双缓冲的基本思想之上,其中双缓冲区以乒乓方式运行,使得数据传输时间与计算重叠。片上buffer它们分为四组: 两组用于输入特征图和权重,两组用于输出特征图。

      乒乓机制可以如下图所示:

      加速器是和CPU下的相同CNN应用程序进行对比,软件实现分别使用带有-O3优化选项的gcc在1个线程16个线程中实现

      总体而言,我们基于FPGA的实现比1个线程的软件实现提高了17.42x的速度。与16个线程的软件实现相比,它还实现了4.8倍的加速。我们的加速器的整体性能达到61.62的GFLOPS。

      在与其他已实现的FPGA加速器进行对比,如Tbale 5。

      Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks ,2015 论文阅读笔记
      • 该加速器的性能61.62GOPS比以往的工作至少高3.62倍

      • 由于不同工作的FPGA平台是不一样的,由此转化为性能密度(每单位面积的平均GOPS)衡量会更准确,可以看到该工作性能密度是最高的,至少高出1.8倍

      总结与思考

      这篇文章的贡献在于

      • 对CNN FPGA加速器的技术 (例如循环平铺和转换) 优化,同时进行了定量分析计算吞吐量和片内外I/0带宽和建模

      • 通过roof-line模型搜索加速器硬件参数设计空间中最优的方案

      • 最后通过此建模方案设计了一个加速器,获得当时最优性能密度的CNN加速器。

      我个人读了之后觉得其值得学习亮点如下:

      • 利用polyhedral-based 数据依赖分析方法来优化现有常用的加速器技术(Tiling、Unroll、pipeline和loop transformation)

      • roof-line 模型对于设计空间的探索

      文章中还有待继续的工作如下:

      • 对于Tiling分片大小实现时固定在了硬件上,不可变,所以对于各conv层是折中选用了综合最好的参数。但对于复杂实际应用的神经 络,这个效果不会很好。而后来的如2017年的FlexFlow: A Flexible Dataflow Accelerator Architecture for Convolutional Neural Networks这类文章是实现在硬件上可配置分片参数的,每个conv层都可以达到最优的硬件设计参数。

      • 其只做了conv层加速设计,因为conv层占总计算量90%以上。对于其他pooling层未做兼容。

      • 对于设计空间的搜索算法,在面对更大的模型设计空间下,和更多的优化技术参数引入,其搜索规模更大,如后来的TVM这类中使用的是机器学习方法更优的寻找最优设计

      声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年11月1日
下一篇 2022年11月1日

相关推荐