22、卷积神经网络加速的硬件/软件协同设计与CPU - 加速器协同调度

卷积神经网络加速的硬件/软件协同设计与CPU - 加速器协同调度

1. iMAC加速器的硬件/软件协同设计

iMAC加速器在卷积神经网络(CNN)加速中扮演着重要角色。它主要有两个关键的软件级支持机制:高效的通道分区和输入/权重分配,以及前端(如输入数据传输、图像到列转换(im2col)和乘积累加(MAC))与后端(如偏置加法和激活)操作的流水线执行。这些机制对于最大化系统资源利用率至关重要。

1.1 iMAC加速器背景

iMAC加速器将im2col和通用矩阵乘法(GEMM)操作集成到硬件加速器中,以减少主内存与加速器片上内存之间的数据传输。其4PE架构包含多个MAC阵列,可并行执行GEMM的MAC操作。

1.2 iMAC加速器的软件分区
  • 通道分区和输入/权重分配 :对于资源受限的物联网(IoT)或边缘系统,为整个卷积层原位执行提供硬件资源并非理想解决方案。iMAC硬件一次只能执行卷积层的一部分输入通道,因此输入通道的高效分区和分配至关重要。通过软件控制的通道分区方法,尝试将尽可能多的输入通道的输入特征图和权重数据分别放入输入和权重块随机存取存储器(BRAM)中,以减少数据传输次数。
    以下是软件级支持的伪代码:
1 out = 0;
2 for (i=1; i<=NumOutputChannel; i ++)
3     for (j =1; j <=NumPartition; j ++)
4         DMA_Transfer_to_iMAC (jth_Weight);
5         while (!DMA_done);
6         DMA_done = 0;
7         DMA_Transfer_to_iMAC (jth_InputFeatureMAP);
8         if (out)
9             Bias_Addition_and_Activation ((i−1)th_OutputChannel);
10            out = 0;
11        end if
12        while ((!Check_iMAC_done()) || (!DMA_done));
13        DMA_done = 0;
14    end for
15    DMA_Transfer_to_Memory (ith_OutputChannel);
16    out = 1;
17    while (!DMA_done);
18    DMA_done = 0;
19 end for
20 Bias_Addition_and_Activation ((i−1)th_OutputChannel);
  • 利用卷积层操作的并行性 :通过利用卷积层不同操作之间的并行性,实现了操作的流水线执行。在输入特征图的直接内存访问(DMA)传输触发时,CPU可同时对前一个输出通道进行偏置加法和激活操作。与非流水线执行相比,流水线执行可重叠数据传输/加速器计算时间与偏置加法/激活时间,提高了性能。以下是两种执行方式的对比:
    | 执行方式 | 特点 |
    | ---- | ---- |
    | 非流水线执行 | iMAC硬件计算和输出DMA传输完成后才进行偏置加法和激活,硬件资源不能并行使用,导致吞吐量损失 |
    | 流水线执行 | 利用输出通道之间的数据独立性,重叠前一个输出通道的偏置加法和激活与当前输出通道的iMAC执行,但卷积层最后一个输出通道的偏置加法和激活不能重叠 |

在设计中,未采用双缓冲技术,原因是为了提高成本(资源)效率。因为采用双缓冲需要两倍的BRAM,对于资源受限系统不可取,且计算时间主导数据传输时间,双缓冲带来的性能提升有限。

1.3 实验评估

通过对四种不同设计(CPU、GEMM、iMAC_NPL和iMAC_PL)进行实验评估,同时考虑CPU是否支持单指令多数据(SIMD)(ARM NEON)。结果表明,iMAC_PL显著减少了CNN推理的响应时间,无论是否有NEON支持。与CPU相比,无NEON支持时iMAC_PL的加速比为1.97倍;与iMAC_NPL相比,iMAC_PL的加速比为1.12倍。在平台级能量方面,iMAC_PL相较于其他设计实现了最高的能量降低。

2. CPU - 加速器协同调度的CNN加速

为了利用闲置的硬件资源加速卷积(CONV)层,引入了一种利用中央处理器(CPU)和CNN硬件加速器协同调度的技术。该技术利用单个CONV层中多个CNN输出通道生成的并行性,将CNN推理任务分配给加速器和CPU,以最大化两者的利用率。

2.1 背景和预备知识
  • 卷积神经网络 :CNN通常由多种类型的层组成,其中CONV层在CNN推理中占用的执行时间最多,因此主要关注加速CONV层。CONV层的输入主要包括输入特征图(IFMs)和权重(滤波器),经过卷积、批量归一化和激活操作后生成输出特征图(OFMs)。
  • 基线系统架构 :假设采用资源受限的边缘系统,包含CPU、内存控制器和CNN加速器。CNN加速器利用输出通道的并行性,通过多个处理元素(PE)生成不同的2D OFMs。PE内部包含乘积累加(MAC)单元、批量归一化(BN)单元和激活(ACT)单元,加速器片上内存用作本地缓冲区,使用直接内存访问(DMA)进行数据传输。
2.2 CNN加速的CPU - 加速器协同调度
  • 概述 :为了在资源受限的边缘设备中充分利用CNN加速器和CPU,通过考虑CPU和加速器的性能比,将CNN CONV层任务以负载均衡的方式分配给两者。利用CONV层不同输出通道生成的并行性,将输出通道(即3D滤波器张量)分配给加速器和CPU,并将分配信息存储在CNN框架中。
  • 卷积层延迟模型 :为了准确估计加速器和CPU的相对性能,使用基于线性回归的卷积层延迟模型。通过该模型估计的延迟,将CNN输出通道分配给加速器和CPU,以最小化两者的闲置时间。

该技术的主要贡献包括:
- 一种利用CPU - 加速器协同调度的CNN输出通道分配技术。
- 一个简单而准确的CNN加速器和CPU的卷积层延迟模型。
- 在CNN框架中实现该协同调度技术,并在各种基于现场可编程门阵列片上系统(FPGA - SoC)的平台上进行验证。
- 实验结果表明,该协同调度技术将卷积层操作的性能提高了1.18 - 2.00倍,同时将能耗降低了14.9% - 49.7%,相较于仅使用加速器执行有显著提升。

以下是iMAC加速器软件分区的流程mermaid图:

graph LR
    A[开始] --> B[初始化out = 0]
    B --> C{循环 i <= NumOutputChannel}
    C -- 是 --> D{循环 j <= NumPartition}
    D -- 是 --> E[传输第j个权重到iMAC]
    E --> F[等待DMA完成]
    F --> G[重置DMA_done = 0]
    G --> H[传输第j个输入特征图到iMAC]
    H --> I{out是否为真}
    I -- 是 --> J[对第i - 1个输出通道进行偏置加法和激活]
    J --> K[重置out = 0]
    I -- 否 --> L[继续]
    L --> M[等待iMAC和DMA完成]
    M --> N[重置DMA_done = 0]
    N --> D
    D -- 否 --> O[传输第i个输出通道到内存]
    O --> P[设置out = 1]
    P --> Q[等待DMA完成]
    Q --> R[重置DMA_done = 0]
    R --> C
    C -- 否 --> S[对第i - 1个输出通道进行偏置加法和激活]
    S --> T[结束]

综上所述,硬件/软件协同设计和CPU - 加速器协同调度技术为资源受限的CNN推理提供了有效的加速解决方案,在性能和能耗方面取得了良好的平衡。

卷积神经网络加速的硬件/软件协同设计与CPU - 加速器协同调度

3. 技术优势总结与对比

为了更清晰地展示iMAC加速器的硬件/软件协同设计以及CPU - 加速器协同调度技术的优势,下面通过表格进行详细对比。

技术类型 优势 劣势
iMAC加速器硬件/软件协同设计(iMAC_PL) 显著减少CNN推理响应时间,无论是否有NEON支持;实现平台级能量的最高降低;通过高效通道分区和流水线执行最大化资源利用率 对于非资源受限系统,可能无法充分发挥其资源高效利用的优势
CPU - 加速器协同调度 利用闲置硬件资源,提高卷积层操作性能;降低能耗;可与现有CNN加速技术正交使用,适用于任何CNN模型 需要准确的延迟模型进行任务分配,模型不准确可能导致性能下降
CPU单独执行 无需额外硬件加速器,系统架构简单 响应时间长,能耗高,无法利用硬件并行性
GEMM单独执行 可将GEMM操作卸载到FPGA逻辑 由于im2col期间的数据复制导致数据传输量大幅增加,响应时间反而增加

通过这个表格可以看出,iMAC_PL和CPU - 加速器协同调度技术在性能和能耗方面具有明显优势,尤其适用于资源受限的嵌入式/IoT环境。

4. 操作步骤与流程分析
4.1 iMAC加速器软件分区操作步骤

iMAC加速器软件分区主要包括通道分区和输入/权重分配,以及流水线执行。以下是详细的操作步骤:
1. 初始化 :设置输出通道计数器 out = 0
2. 外层循环 :循环 NumOutputChannel 次,每次生成一个输出通道的结果。
3. 内层循环 :循环 NumPartition 次,每次生成部分输出通道的结果。
- 传输第 j 个权重到iMAC。
- 等待DMA传输完成。
- 重置 DMA_done 标志。
- 传输第 j 个输入特征图到iMAC。
- 如果 out 为真,对第 i - 1 个输出通道进行偏置加法和激活操作,并重置 out = 0
- 等待iMAC和DMA完成。
- 重置 DMA_done 标志。
4. 传输输出通道到内存 :将第 i 个输出通道的结果传输到内存。
5. 设置标志 :设置 out = 1
6. 等待DMA完成 :等待输出通道传输完成。
7. 最后操作 :对最后一个输出通道进行偏置加法和激活操作。

以下是对应的伪代码:

1 out = 0;
2 for (i=1; i<=NumOutputChannel; i ++)
3     for (j =1; j <=NumPartition; j ++)
4         DMA_Transfer_to_iMAC (jth_Weight);
5         while (!DMA_done);
6         DMA_done = 0;
7         DMA_Transfer_to_iMAC (jth_InputFeatureMAP);
8         if (out)
9             Bias_Addition_and_Activation ((i−1)th_OutputChannel);
10            out = 0;
11        end if
12        while ((!Check_iMAC_done()) || (!DMA_done));
13        DMA_done = 0;
14    end for
15    DMA_Transfer_to_Memory (ith_OutputChannel);
16    out = 1;
17    while (!DMA_done);
18    DMA_done = 0;
19 end for
20 Bias_Addition_and_Activation ((i−1)th_OutputChannel);
4.2 CPU - 加速器协同调度操作步骤

CPU - 加速器协同调度的操作步骤如下:
1. 分析性能比 :使用卷积层延迟模型估计加速器和CPU的相对性能。
2. 分配输出通道 :根据估计的性能比,将CNN输出通道分配给加速器和CPU。
3. 存储分配信息 :将输出通道分配信息存储在CNN框架中。
4. 执行任务 :加速器和CPU分别执行分配的任务。

以下是该流程的mermaid图:

graph LR
    A[开始] --> B[分析性能比]
    B --> C[分配输出通道]
    C --> D[存储分配信息]
    D --> E[加速器执行任务]
    D --> F[CPU执行任务]
    E --> G[结束]
    F --> G
5. 总结

通过对iMAC加速器的硬件/软件协同设计和CPU - 加速器协同调度技术的介绍和分析,我们可以看到这些技术为资源受限的CNN推理提供了有效的解决方案。iMAC加速器通过高效的通道分区、输入/权重分配和流水线执行,显著减少了响应时间并降低了能耗。CPU - 加速器协同调度技术则利用闲置硬件资源,提高了卷积层操作的性能,同时也降低了能耗。

在实际应用中,可以根据具体的系统资源和性能需求选择合适的技术。对于资源受限的嵌入式/IoT环境,iMAC_PL和CPU - 加速器协同调度技术是非常理想的选择。而对于非资源受限系统,可以根据具体情况综合考虑各种技术的优势和劣势,以实现最佳的性能和能耗平衡。

总之,这些技术的出现为卷积神经网络的加速提供了新的思路和方法,有望在未来的人工智能应用中发挥重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值