DaDianNao: A Machine-Learning Supercomputer
TL;DR 精炼摘要
本文介绍了机器学习超级计算机DaDianNao的设计,该系统针对CNN和DNN优化,展示了在64芯片系统中相较于GPU可实现450.65倍的加速,并降低150.31倍能耗,从而有效应对机器学习对计算和内存的高需求。
摘要
Abstract —Many companies are deploying services, either for consumers or industry, which are largely based on machine-learning algorithms for sophisticated processing of large amounts of data. The state-of-the-art and most popular such machine-learning algorithms are Convolutional and Deep Neural Networks (CNNs and DNNs), which are known to be both computationally and memory intensive. A number of neural network accelerators have been recently proposed which can offer high computational capacity/area ratio, but which remain hampered by memory accesses. However, unlike the memory wall faced by processors on general-purpose workloads, the CNNs and DNNs memory footprint, while large, is not beyond the capability of the on-chip storage of a multi-chip system. This property, combined with the CNN/DNN algorithmic characteristics, can lead to high internal bandwidth and low external communications, which can in turn enable high-degree parallelism at a reasonable area cost. In this article, we introduce a custom multi-chip machine-learning architecture along those lines. We show that, on a subset of the largest known neural network layers, it is possible to achieve a speedup of 450.65x over a GPU, and reduce the energy by 150.31x on average for a 64-chip system. We implement the node down to the place and route at 28nm, containing a combination of custom storage and computational units, with industry-grade interconnects.
思维导图
论文精读
中文精读
1. 论文基本信息
1.1. 标题
DaDianNao: A Machine-Learning Supercomputer (DaDianNao:一台机器学习超级计算机)
1.2. 作者
Yunji Chen, Tao Luo, Shaoli Liu, Shijin Zhang, Liqiang He, Jia Wang, Ling Li, Tianshi Chen, Zhiwei Xu, Ninghui Sun, Olivier Temam
1.3. 发表期刊/会议
论文未明确指出具体的期刊或会议名称,但从内容来看,这是一篇发表在计算机体系结构或高性能计算领域的学术论文。该领域声誉和影响力通常很高,能够反映最新的硬件加速研究进展。
1.4. 发表年份
2014年
1.5. 摘要
当前许多公司正在部署基于机器学习算法的服务,这些算法用于处理大量数据。其中,卷积神经网络 (Convolutional Neural Networks, CNNs) 和 深度神经网络 (Deep Neural Networks, DNNs) 是最先进且最流行的机器学习算法,但它们计算和内存密集。虽然已有一些神经网络加速器被提出,能提供高计算能力/面积比,但它们仍受限于内存访问。然而,与通用工作负载中处理器面临的“内存墙 (memory wall)”不同,CNNs 和 DNNs 的内存占用虽大,但并未超出多芯片系统片上存储的能力。结合 CNN/DNN 算法特性,这可以带来高内部带宽和低外部通信,从而在合理的面积成本下实现高度并行。本文介绍了一种定制的多芯片机器学习架构。作者展示了在一个最大的神经网络层子集上,一个64芯片系统比 GPU 平均能实现 450.65 倍的加速,并将能耗降低 150.31 倍。该节点在 28nm 工艺下实现物理版图 (place and route),包含定制存储和计算单元的组合,并使用工业级互连。
1.6. 原文链接
/files/papers/6915903fdb1128a32d47a715/paper.pdf (该链接为论文提供的相对路径,具体访问需依赖其宿主网站) 发布状态:已正式发表。
2. 整体概括
2.1. 研究背景与动机
2.1.1. 核心问题与挑战
机器学习 (Machine-Learning) 算法,特别是 卷积神经网络 (CNNs) 和 深度神经网络 (DNNs),已广泛应用于语音识别、图像识别、广告点击预测等诸多领域,并日益成为高性能计算的主要驱动力。然而,这些算法具有极高的计算和内存密集性,使得其在通用处理器(如 CPU)或图形处理器(如 GPU)上运行时面临挑战。
当前的挑战主要体现在:
- 内存墙问题 (Memory Wall): 现有神经网络加速器虽然提高了计算能力/面积比,但往往受限于对主存的频繁访问,导致性能瓶颈和高能耗。当神经网络规模增大,所需的参数(权重)和中间神经元值无法全部存储在片上,频繁的片外访问会抵消定制架构带来的优势。
- 神经网络规模趋势: 机器学习领域正朝着更大规模的神经网络发展,参数量可达数亿甚至数十亿,这进一步加剧了内存和计算压力。
- 高能耗与成本: 现有的
GPU解决方案虽然提供了较高性能,但其能耗高、面积大、成本昂贵,限制了其在某些对能耗和尺寸敏感的应用场景中的部署。
2.1.2. 创新思路与切入点
本文的创新思路在于:认识到 CNNs 和 DNNs 的内存占用虽然庞大,但对于一个多芯片系统来说,其全部参数(突触权重)仍可能存储在片上 eDRAM 中,从而避免昂贵的片外主存访问。基于此,该研究提出了一种定制的、分布式的多芯片机器学习架构,旨在构建一个“机器学习超级计算机”。
其核心切入点包括:
- 全片上存储 (All On-Chip Storage): 通过多芯片系统聚合足够的片上
eDRAM (embedded DRAM)容量,将整个神经网络的参数完全存储在芯片内部,消除对片外主存的依赖。 - 分布式与低通信 (Distributed and Low Communication): 设计一种架构,使突触权重始终靠近使用它们的神经元,最小化数据移动。通过只传输神经元值(数量远少于突触权重),显著降低芯片间通信带宽需求。
- 非对称架构 (Asymmetric Architecture): 每个节点(芯片)的设计偏向于存储而非纯粹计算,以适应神经网络参数量大的特点。
- 高内部带宽 (High Internal Bandwidth): 将本地存储划分为多个
tile,实现高内部带宽,以高效地喂饱计算单元。
2.2. 核心贡献/主要发现
2.2.1. 主要贡献
- 提出并实现
DaDianNao架构: 首次提出并设计了一种定制的、多芯片机器学习超级计算机架构,旨在克服CNN/DNN的内存墙问题。该架构通过将所有神经网络参数存储在片上eDRAM中,实现了高内部带宽和低外部通信。 - 详细的节点设计与实现: 对单个节点进行了详尽的设计,包括
NFU (Neural Functional Unit)的流水线化、可重构性、eDRAM的使用、以及采用tile结构解决布线拥塞和提高内部带宽等。该节点在 28nm 工艺下完成了物理版图 (place and route)。 - 支持推理和训练: 架构设计支持神经网络的推理 (inference) 和训练 (training) 两种模式,并通过配置
NFU和操作数位宽(16位用于推理,32位用于训练)来优化性能和精度。 - 评估了多芯片系统: 在一个包含最大已知神经网络层的基准测试集上,评估了1到64个节点的系统性能和能耗。
2.2.2. 关键结论与发现
- 显著的性能提升: 相比
GPU基线,64芯片系统在推理模式下平均实现了 450.65 倍的加速,训练模式下平均实现了 300.04 倍的加速。 - 极高的能效比: 相比
GPU基线,64芯片系统在推理模式下平均能耗降低了 150.31 倍,训练模式下降低了 66.94 倍。 - 内存主导的瓶颈解决: 通过将神经网络参数完全存储在片上
eDRAM中,有效解决了内存带宽瓶颈,使得大规模并行计算成为可能。 - 通信是可伸缩性的限制: 对于
分类层 (classifier layers)等通信密集型层,芯片间的通信成为多节点系统扩展性的主要限制因素。
3. 预备知识与相关工作
3.1. 基础概念
3.1.1. 机器学习与神经网络
机器学习 (Machine Learning) 是人工智能的一个分支,旨在使计算机系统通过数据学习,从而无需明确编程就能执行特定任务。神经网络 (Neural Networks, NNs) 是一种受生物神经系统启发而构建的模型,能够从数据中识别模式并进行分类、预测等任务。
3.1.2. 卷积神经网络 (Convolutional Neural Networks, CNNs)
CNNs 是一类特殊的神经网络,尤其擅长处理图像、视频等网格状数据。其核心特点是使用 卷积层 (convolutional layers) 自动并自适应地从输入数据中学习空间层次特征。CNNs 具有平移不变性 (translation invariance) 的特性,即模型对物体在图像中的位置变化不敏感。
3.1.3. 深度神经网络 (Deep Neural Networks, DNNs)
DNNs 是指包含多层隐藏层的神经网络。CNNs 可以看作是 DNNs 的一种特殊形式。DNNs 的“深度”使其能够学习更复杂、更高层次的特征表示,在语音识别、自然语言处理等广泛领域取得了突破。
3.1.4. 神经网络层类型
-
卷积层 (CONV Layer):
卷积层 (Convolutional Layer)是CNN的核心。它通过在输入数据上滑动一个小的滤波器 (filter)(也称为卷积核 (kernel))来提取特征。每个滤波器包含一组学习到的权重,通过与输入区域进行点积运算产生一个特征图。在CNNs中,这些核在整个输入层上共享,而在DNNs中,有时使用不共享核的卷积层,导致更多的突触权重。 其输出神经元 在位置(x,y)的计算公式为: 其中:- :输出特征图 在位置
(x,y)的神经元活动。 - :输入特征图 在位置 的神经元活动。
- :突触权重,对应于输入特征图 到输出特征图 的滤波器在核位置 的值。
- :输入特征图的数量。
- :卷积核的尺寸。
- :输出特征图 在位置
-
池化层 (POOL Layer):
池化层 (Pooling Layer)的主要作用是降采样 (downsampling),减少特征图的维度,从而减少计算量和参数数量,并提供一定程度的平移不变性。常见的池化操作包括最大池化 (max pooling)和平均池化 (average pooling)。它没有可学习的参数。 最大池化层输出 的计算公式为: 其中:- :特征图 在位置
(x,y)的输出。 - :特征图 在核窗口内位置 的输入。
- :池化核的尺寸。
- :特征图 在位置
-
局部响应归一化层 (LRN Layer):
局部响应归一化层 (Local Response Normalization Layer)模仿生物神经元中的侧抑制现象,通过对邻近特征图的神经元输出进行归一化,增强模型的泛化能力。 其输出 的计算公式为: 其中:- :特征图 在位置
(x,y)的输入。 - :邻近特征图 在位置
(x,y)的神经元活动(通常是 )。 - :常数,通常是超参数。
- :考虑的相邻特征图的数量。
- :总特征图的数量。
- :特征图 在位置
-
分类层 (CLASS Layer):
分类层 (Classifier Layer)通常是神经网络的最后一层或几层,它将前面层提取的特征映射到最终的输出类别。这通常通过多层感知器 (Multi-Layer Perceptrons)实现,其中每个输出神经元都与前一层的所有输入神经元全连接。 其输出out(j)的计算公式为: 其中:out(j):第 个输出神经元的值。in(i):第 个输入神经元的值。- :从输入神经元 到输出神经元 的突触权重。
- :输入神经元的总数量。
t():转移函数 (transfer function),如Sigmoid( )、tanh( ) 或ReLU( )。
3.1.5. 推理与训练
- 推理 (Inference): 也称为
测试 (testing)或前向传播 (feed-forward phase)。这是神经网络在部署阶段的使用模式,给定新的输入数据,网络计算输出。此阶段通常对延迟敏感。 - 训练 (Training): 也称为
在线学习 (on-line learning)或反向传播 (backward phase)。此阶段神经网络通过学习大量带有标签的数据来调整其突触权重。训练通常涉及梯度下降 (gradient descent)及其变种,旨在最小化预测误差。训练通常计算量更大,对精度要求更高。
3.2. 前人工作
- 通用
GPU计算:GPU因其高度并行处理能力,成为实现CNNs和DNNs的主流选择。例如,NVIDIA K20M 等GPU卡在神经网络计算上比CPU提供了数十倍的加速。然而,GPU面临面积成本高、能效中等以及频繁访问片外GDDR5内存带来的高能耗等问题。 - 专用神经网络加速器:
- 早期神经网络加速器: Temam [47] 曾提出用于
多层感知器 (multi-layer perceptrons)的神经网络加速器,但非深度学习类型。 - 通用功能近似加速器: Esmaeilzadeh et al. [16] 提出了
NPU (Neural Processing Unit)用于近似任何程序功能,但并非专为机器学习应用设计。 DianNao加速器: Chen et al. [5] 提出了DianNao加速器,专为CNNs和DNNs的深度学习加速。DianNao具有高计算能力/面积比,但其主要限制在于卷积层(带私有核)和分类层对内存带宽的巨大需求。当突触权重和中间神经元值必须存储在主存时,内存访问成为性能瓶颈,导致性能损失一个数量级。
- 早期神经网络加速器: Temam [47] 曾提出用于
3.3. 技术演进
随着摩尔定律的放缓和“暗硅 (Dark Silicon)”现象的出现,计算领域正从通用处理器转向异构计算和架构专用化,以在低能耗下实现高性能。在机器学习领域,深度学习 (Deep Learning) 算法的兴起使其成为高性能计算的新焦点。这种背景下,设计专门针对深度学习算法的硬件加速器变得尤为重要。早期的加速器虽然展现了潜力,但普遍受限于神经网络的规模和内存访问效率。本文的工作是在这一背景下,试图通过多芯片系统和片上存储来解决大规模神经网络的内存墙问题,进一步推动深度学习硬件的发展。
3.4. 差异化分析
本文提出的 DaDianNao 架构与现有工作的主要区别在于:
- 完全片上存储: 与
GPU和DianNao等依赖片外DRAM的架构不同,DaDianNao利用多芯片系统聚合的片上eDRAM容量,旨在将整个神经网络的所有突触权重和神经元值完全存储在芯片内部,彻底消除片外内存访问带来的性能和能耗瓶颈。这是其最核心的创新点。 - 多芯片系统设计:
DaDianNao不仅仅是一个单芯片加速器,而是设计为一个由多个互连节点组成的“超级计算机”,通过扩展芯片数量来支持更大规模的神经网络,而现有加速器通常关注单个芯片的优化。 - 低通信带宽: 通过只在芯片间移动数量较少的神经元值(而非大量的突触权重),显著降低了芯片间通信带宽的需求,这使得传统的
HyperTransport等工业级互连技术即可满足需求。 - 平衡存储与计算:
DaDianNao的每个节点都将大量面积偏向于存储(特别是eDRAM),而非纯粹的计算单元,这与传统处理器或GPU的设计理念形成对比,更符合神经网络参数密集型的特点。
4. 方法论
本文提出了一种名为 DaDianNao 的定制多芯片机器学习架构,其核心思想是构建一个“机器学习超级计算机”,通过将所有神经网络参数存储在片上,并采用分布式、低通信、高内部带宽的设计,以克服现有 GPU 和专用加速器在处理大规模 CNNs 和 DNNs 时面临的内存墙和能耗问题。
4.1. 方法原理
DaDianNao 的设计围绕以下核心原则:
- 突触靠近神经元存储 (Synapses Close to Neurons): 突触权重总是存储在靠近将使用它们的神经元的计算单元附近,以最小化数据移动,从而节省时间和能量。整个架构是完全分布式的,没有主存。
- 存储偏向的非对称架构 (Storage-Biased Asymmetric Architecture): 每个节点的面积分配都倾向于存储(尤其是
eDRAM),而不是计算单元,以适应神经网络参数量大的特点。 - 传输神经元值而非突触值 (Transfer Neuron Values, Not Synapses): 由于神经元值的数量级通常远小于突触权重,因此在芯片间传输神经元值,可以显著降低外部通信带宽需求。
- 高内部带宽 (High Internal Bandwidth): 通过将本地存储划分为多个
tile,实现高内部带宽,以高效地为计算单元提供数据。
4.2. 核心方法详解
4.2.1. 节点设计 (Node Design)
每个 DaDianNao 节点都是一个独立的芯片,包含计算逻辑、eDRAM 和路由器。
4.2.1.1. 突触靠近神经元存储 (Synapses Close to Neurons)
DaDianNao 的一个基本设计特点是将突触的存储位置靠近神经元,并使其具有大规模容量。
- 动机: 这种设计选择的动机是决定只移动神经元值,而将突触权重固定在存储位置。这有双重目的:
- 推理与训练的数据流: 在推理 (inference) 阶段,前一层的神经元是计算的输入;在训练 (training) 阶段,神经元向前传播(前一层神经元是输入),然后向后传播(后一层神经元是输入)。无论哪种情况,与神经元相比,突触权重数量要多得多(例如,分类层是 vs. ,带私有核的卷积层是 vs. )。因此,只移动神经元输出是更合理的选择。
- 低能耗/低延迟数据传输: 将所有突触(大部分计算输入)放置在计算操作器旁边,可以实现低能耗、低延迟的数据传输和高内部带宽。
- eDRAM 的选择: 为了存储大规模的突触权重(可达数MB甚至GB),需要高密度的存储。
SRAM适合缓存,但密度不足。eDRAM以其更高的存储密度成为首选。例如,在 28nm 工艺下,10MB 的SRAM需要 ,而相同大小的eDRAM仅需 ,密度高2.85倍。 - 避免片外
DRAM访问: 足够的eDRAM容量可以避免昂贵的片外DRAM访问。片外DDR3 DRAM的读取访问能耗比片上eDRAM高 321 倍,主要由于内存控制器、物理接口、片上总线访问和页激活等开销。 - NFU 规模扩展与eDRAM弱点应对: 如果
NFU (Neural Functional Unit)不再受内存带宽限制,其规模可以扩大,以同时处理更多输出神经元 () 和更多输入神经元 (),从而提高整体节点吞吐量。为了将每周期操作数提高 16 倍,需要 (而非16) 和 (而非16)。这意味着每周期需要从eDRAM获取 个 16 位值,即 65536 位。 尽管eDRAM具有高密度,但它也有高延迟、破坏性读取和周期性刷新等缺点。为补偿这些缺点并仍能每周期向NFU喂送数据,eDRAM被分成四个 bank(每个 bank 65536 位宽),并交错存储突触行。 - 布线拥塞问题: 早期设计中,如果采用单个中央
NFU,尽管NFU占地面积很小(),但连接NFU和eDRAM的大量导线(例如 65536 根)会导致严重的布线拥塞,占据芯片的大部分面积。原文 Figure 4 展示了这种情况下的简化版图。
4.2.1.2. 高内部带宽 (High Internal Bandwidth)
为了解决布线拥塞问题并实现高内部带宽,DaDianNao 采用了 tile (瓦片) 化的设计。原文 Figure 5 展示了节点内部的 tile 组织和单个 tile 架构。
- Tile 结构:
- 输出神经元分散在不同的
tile中,每个NFU可以同时处理 16 个输入神经元的 16 个输出神经元(即 256 个并行操作)。 - 每个
tile内的NFU规模显著缩小,每周期只需从eDRAM提取 位数据。 - 每个
tile仍保留 4 个eDRAM bank(每个 4096 位宽)的组织结构,以弥补eDRAM的弱点。 - 单个
tile的面积为 ,16 个tile共占用 ,比之前的单中央NFU设计减少了 28.5% 的面积,因为布线网络现在只占总面积的 8.97%。
- 输出神经元分散在不同的
- Fat Tree 互连: 所有
tile通过一个胖树 (fat tree)结构互连。胖树用于将输入神经元值广播到每个tile,并从每个tile收集输出神经元值。- 芯片中央有两个特殊的
eDRAM bank,一个用于输入神经元,另一个用于输出神经元。 - 尽管有大量
tile和芯片,所有NFU的硬件输出神经元总数仍可能远小于大层中实际的神经元数量。因此,对于广播到所有tile的每组输入神经元,同一个硬件神经元上会计算多个不同的输出神经元。这些神经元的中间值保存在tile的本地eDRAM中。当一个输出神经元的计算完成时,其值通过胖树发送到芯片中央的相应(输出神经元)中央eDRAM bank。
4.2.1.3. 可配置性 (Configurability)
DaDianNao 的 tile,特别是 NFU 的流水线,可以根据不同的层类型和执行模式(推理或训练)进行配置。
- NFU 硬件块:
NFU由多个硬件块组成:加法器块 (adder block):可配置为 256 输入、16 输出的加法树,或 256 个并行加法器。乘法器块 (multiplier block):256 个并行乘法器。最大值块 (max block):16 个并行最大值操作。转移块 (transfer block):两个独立的子块,执行 16 个分段线性插值。每个块的线性插值系数a, b(即 )存储在两个 16 单元的SRAM中,可配置以实现任何转移函数及其导数。原文 Figure 6 描绘了NFU的并行操作器。
- 流水线配置: 原文 Figure 7 展示了
CONV、LRN、POOL和CLASS层在前向传播 (forward phase) 和反向传播 (backward phase) 中的不同流水线配置。 - 操作数位宽:
- 16 位操作数通常足以满足推理需求。
- 训练时可能需要 32 位操作数,以避免精度降低和/或影响收敛。例如,使用 16 位定点数进行训练可能无法收敛,而 32 位定点数只会导致很小的误差(0.91% vs. 0.83%)。聚合操作器可以将两个 16 位加法器聚合成一个 32 位加法器,四个 16 位乘法器聚合成一个 32 位乘法器等,开销很低。默认情况下,训练模式使用 32 位操作器。
- 数据移动配置:
tile还必须配置以适应不同的数据移动情况。例如,分类层输入可以来自节点中央eDRAM(可能从其他节点传输),也可以来自用作输入/输出神经元值缓冲的两个SRAM存储(16KB),甚至是临时值(如用于重用输入神经元值的神经元部分和)。在反向传播阶段,NFU必须在权重更新后写入tile eDRAM。在梯度计算阶段,输入和输出梯度使用前向传播阶段的输入和输出神经元数据路径。
4.2.2. 互连 (Interconnect)
由于只传输神经元值且这些值在每个节点内部被大量重用,因此通信量虽然不小,但通常不会成为瓶颈,除非在少数层和多节点系统中。
- 选择
HyperTransport (HT) 2.0: 本文没有开发定制的高速互连,而是采用了商用高性能接口HyperTransport (HT) 2.0 IP块。 - 物理层接口:
HT2.0的物理层接口 (PHY) 在 28nm 工艺下尺寸为 。 - 拓扑结构: 采用简单的
2D 网格拓扑 (2D mesh topology)。每个芯片通过四个HT2.0 IP块连接到四个邻居(原文 Figure 9)。 - 链路带宽与延迟: 每个
HT块提供 16xHT链路(16 对差分输出信号和 16 对差分输入信号),频率为 1.6GHz,每个方向的带宽为 6.4GB/s。节点间的HT2.0延迟约为 80ns。 - 路由器: 路由器位于
tile的中央块旁边(原文 Figure 5)。采用虫洞路由 (wormhole routing),路由器有五个输入/输出端口(四个方向和一个注入/排出端口)。每个输入端口包含 8 个虚通道(每个VC有 5 个flit slot)。一个 5x5 的交叉开关连接所有输入/输出端口。路由器有四个流水线阶段:路由计算 (RC)、VC分配 (VA)、交换机分配 (SA) 和交换机遍历 (ST)。
4.2.3. 编程、代码生成与多节点映射 (Programming, Code Generation and Multi-Node Mapping)
4.2.3.1. 编程、控制与代码生成 (Programming, Control and Code Generation)
该架构被视为一个系统级 ASIC,编程要求较低。核心是配置架构并输入数据。
- 输入数据分区: 输入数据(输入层的值)最初在节点间分区,并存储在中央
eDRAM bank中。 - 神经网络配置: 神经网络配置以一系列节点指令的形式实现,每个节点一个序列,由代码生成器产生。原文 Table V 展示了一个
CLASS2层推理阶段的代码生成示例。 - 指令执行: 在示例中,输出神经元被分成多个 256 位数据块,每个块包含 个神经元。每个节点分配 个输出数据块(并存储四分之一的输入神经元,即 ),每个
tile分配 个输出数据块,导致每个节点有 4 条指令。- 一条指令会从中央
eDRAM加载 128 个输入数据块到tile。 - 在前三条指令中,所有
tile将获得相同的输入神经元,并从其本地(tile) eDRAM读取突触权重,然后将部分和(输出神经元)写回其本地NBout SRAM。 - 在最后一条指令中,每个
tile中的NFU将完成求和,应用转移函数,并将输出值存储回中央eDRAM。
- 一条指令会从中央
- 控制机制: 这些节点指令驱动每个
tile的控制;每个节点的控制电路生成tile指令并发送给每个tile。节点或tile指令的目的是对一组连续输入数据(前向传播中的输入神经元,反向传播中的输出神经元、梯度或突触)执行相同的层计算(例如,分类层的乘加转移)。 - 操作模式: 控制提供了两种操作模式:一次处理一行数据,或
批学习 (batch learning),即同时处理多行数据(相同层的多个实例被同时评估,但针对不同的输入数据)。批学习通常用于机器学习中以获得更稳定的梯度下降,并能提高突触重用,但代价是收敛速度较慢和需要更大的内存容量。
4.2.3.2. 多节点映射 (Multi-Node Mapping)
在一个层结束时,每个节点都包含一组输出神经元值,这些值已存储回中央 eDRAM。这些输出神经元构成下一层的输入神经元。因此,在一个层开始时,输入神经元分布在所有节点中,以 3D 矩形的形式对应于层子集的所有特征图(原文 Figure 8)。
- 输入神经元分发: 这些输入神经元将首先通过内部(
胖树)网络分发到所有节点tile。同时,节点控制开始通过网格将输入神经元块发送到其余节点。 - 通信模式: 主要考虑三种层类型:
- 卷积层和池化层 (CONV and POOL layers): 这些层通过小窗口(卷积核或池化核)定义的局部连接性进行操作。由于局部连接性,节点间通信量非常低,主要发生在映射到每个节点的层矩形边界上(原文 Figure 8)。
- 局部响应归一化层 (LRN layers): 由于给定位置的所有特征图总是映射到同一个节点,因此没有节点间通信。
- 分类层 (CLASS layers): 通信量可能很高,因为每个输出神经元使用所有输入神经元(原文 Figure 8)。同时,通信模式很简单,等同于广播。
- 计算-转发通信方案 (Computing-and-forwarding communication scheme): 由于每个节点以相同的速度执行大致相同的计算量,并且每个节点必须同时将其输入神经元集广播到所有其他节点,因此采用了
计算-转发 (computing-and-forwarding)通信方案。这相当于按照规则的环形模式安排节点通信。一个节点一旦完成自身计算并发送了前一个输入神经元块,就可以开始处理新到达的输入神经元块;因此,决策是局部进行的,没有全局同步。
4.2.4. 整体特性 (Overall Characteristics)
以下是架构的关键参数和设置:
以下是原文 Table III 的内容:
| Parameters | Settings | Parameters | Settings |
|---|---|---|---|
| Frequency | 606MHz | tile eDRAM latency | ∼3 cycles |
| # of tiles | 16 | central eDRAM size | 4MB |
| # of 16-bit multipliers/tile | 256+32 | central eDRAM latency | ∼10 cycles |
| # of 16-bit adders/tile | 256+32 | Link bandwidth | 6.4x4GB/s |
| tile eDRAM size/tile | 2MB | Link latency | 80ns |
- 节点 eDRAM 容量: 每个节点包含 16 个
tile。每个tile中的 4 个eDRAM bank各包含 1024 行 4096 位数据。因此,一个tile的总eDRAM容量为 。每个节点的中央eDRAM大小为 4MB。因此,一个节点的总eDRAM容量为 。 - 时钟频率: 为了避免异步传输的电路和时间开销,
NFU的时钟频率与 28nm 工艺下可用的eDRAM频率相同,即 606MHz。 - 峰值性能:
-
16 位操作:一个节点峰值性能为 TeraOps/s。
-
32 位操作:由于操作器聚合,一个节点峰值性能为 TeraOps/s。
以下是原文 Table IV 的内容:
20 0 20 20 20 20 20 2 0 0 20 0 0 0 PAI 0 0 RAA∀P 20 0 0 0 20 EN 20 20 0 N 0 4 4 4 M T 1 M 2 8 m • DAT TION • 0 N O 4 4 4 M 2 0 M 2 8 1 M • TON T 0 N0 18 0 4 4 4 M T M T • M O DAT T 0 M 2 O 4 6 4 M m 10 M 2 • - 0 2 • - T 2 O
-
以下是原文 Table V 的内容:
| 0 | N | 0 | 4 | 4 | 4 | M | T | 1 | M | 2 | 8 | m | • | DAT | TION | • | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | N | O | 4 | 4 | 4 | M | 2 | 0 | M | 2 | 8 | 1 | M | • | TON | T | |||||||||
| 0 | N0 | 18 | 0 | 4 | 4 | 4 | M | T | M | T | • | M | O | DAT | T | ||||||||||
| 0 | M | 2 | O | 4 | 6 | 4 | M | m | 10 | M | 2 | • | - | 0 | 2 | • | - | T | 2 | O |
5. 实验设置
5.1. 数据集
本文使用了以下两类基准:
-
最大已知神经网络层样本: 选取了 10 个最大已知
CNN或DNN层作为基准测试集。这些层涵盖了卷积层 (CONV)、池化层 (POOL)、局部响应归一化层 (LRN) 和分类层 (CLASS)。其中, 表示带有私有核的卷积层。 -
完整神经网络 (CNN): 采用了
ImageNet 2012竞赛的冠军CNN模型 [32]。以下是原文 Table I 的内容:
Layer Nx Ny Kx Ky Ni No Synapses Description or Ni f or Nof CLASS1 - - 2560 2560 12.5MB Object recognition and speech recognition tasks (DNN) [11]. CLASS2 - 4096 4096 32MB Multi-Object recognition CONV1 256 256 11 11 256 384 22.69MB in natural images (DNN), POOL2 256 256 2 2 256 256 winner 2012 ImageNet LRN1 55 55 - - 96 96 competition [32]. LRN2 27 27 - - 256 256 CONV2 500 375 9 9 32 48 0.24MB Street scene parsing POOL1 492 367 2 2 12 12 (CNN) (e.g., identifying building, vehicle, etc) [18] CONV3* 200 200 18 18 8 8 1.29GB Face Detection in YouTube videos (DNN), (Google) [34]. CONV4* 200 200 20 20 3 18 1.32GB YouTube video object recognition, largest NN to date [8].
ImageNet 2012 冠军 CNN 模型结构:
该模型包含以下 12 层(格式为 或 或 ):
CONV (224,224,11,11,3,96)POOL (55,55,3,3,96,96)CONV (27,27,5,5,96,256)POOL (27,27,3,3,256,256)CONV (13,13,3,3,256,384)CONV (13,13,3,3,384,384)CONV (13,13,3,3,384,256)CLASS (-,9216,4096)CLASS (-,4096,4096)CLASS (-,4096,1000)
其他设置:
- 所有卷积层的滑动窗口步长 均为 1,除了完整
NN的第一层卷积层步长为 4。 - 所有池化层的滑动窗口步长等于其核尺寸,即 。
LRN层中,。- 预训练 (pre-training) 方法: 考虑了最流行的预训练方法,即基于
受限玻尔兹曼机 (Restricted Boltzmann Machines, RBM)[45] 初始化突触权重。应用于CLASS1和CLASS2层,形成了 和 基准。
5.2. 评估指标
5.2.1. 加速比 (Speedup)
- 概念定义: 加速比是衡量一个系统或算法相对于另一个系统或算法性能提升的指标。它量化了在完成相同任务时,优化后的系统所需时间的减少程度。
- 数学公式:
- 符号解释:
- :加速比。
- :基线系统(例如
GPU或CPU)完成任务所需的时间。 - :提议系统(
DaDianNao)完成任务所需的时间。
5.2.2. 能耗降低倍数 (Energy Reduction)
- 概念定义: 能耗降低倍数是衡量一个系统或算法相对于另一个系统或算法能效提升的指标。它量化了在完成相同任务时,优化后的系统所需能量的减少程度。
- 数学公式:
- 符号解释:
- :能耗降低倍数。
- :基线系统(例如
GPU)完成任务所需消耗的总能量。 - :提议系统(
DaDianNao)完成任务所需消耗的总能量。
5.3. 对比基线
GPU基线 (NVIDIA K20M):- NVIDIA K20M,配备 5GB
GDDR5内存,208 GB/s 内存带宽,峰值 3.52 TFlops 浮点性能,采用 28nm 工艺。 - 作者使用
CUDA实现了Table I中所有不同层类型。 CUDA SDK 5.5用于编译CUDA版本的神经网络代码。- 为了最大化基线质量,
CUDA版本从经过调优的开源版本CUDA Convnet[31] 中提取。 GPU还可以报告其功耗。
- NVIDIA K20M,配备 5GB
CPU(SIMD) 基线:- Intel Xeon E5-4620 Sandy Bridge-EP
CPU,2.2GHz,1TB 内存,256 位SIMD单元。 - 使用 版本实现,以获得
CPU (SIMD)基线。 SIMD版本比非SIMD版本平均加速 4.07 倍,证实编译器有效利用了SIMD单元。GPU相对于C++/CPU (SIMD)的加速比与 Ciresan et al. [7] 报告的结果(10x 到 60x)一致,表明基线质量较高。
- Intel Xeon E5-4620 Sandy Bridge-EP
DianNao加速器:- 为了与 Chen et al. [5] 提出的
DianNao加速器进行比较,作者重新实现了DianNao的周期级比特级版本,并使用了其文章中提到的内存延迟参数。 - 比较中使用了
DianNao支持的一些相同层(CONV2, ,POOL1,POOL2),并引入了更大的分类层(CLASS1,CLASS2)。DianNao尚未支持LRN层,因此在此比较中省略。
- 为了与 Chen et al. [5] 提出的
5.4. 测量工具与方法
- CAD 工具 (用于节点实现与特征测量):
- Verilog 实现: 节点首先用
Verilog实现。 - 综合与版图: 使用
Synopsys Design Compiler进行综合,ICC Compiler进行版图 (layout)。 - 面积、能耗和关键路径延迟: 这些数据是在 28nm 低功耗 (LP) 技术(0.9V)下,通过版图后的结果获得的。
- 功耗估算: 使用
Synopsys PrimeTime PX估算功耗。
- Verilog 实现: 节点首先用
- 时间、eDRAM 和节点间测量:
- 节点 RTL 模拟: 使用
VCS模拟节点的RTL(Register-Transfer Level)。 - eDRAM 模型: 包含破坏性读取和周期性刷新的 banked
eDRAM模型,运行频率为 606MHz。eDRAM能耗使用CACTI5.3[1](整合了 28nm 工艺下 1T1C 单元特性 [25])收集。 - 节点间通信模拟: 使用周期级
Booksim2.0互连网络模拟器 [10] 进行模拟。网络能耗模型使用Orion2.0[29]。
- 节点 RTL 模拟: 使用
6. 实验结果与分析
6.1. 主要特性 (Main Characteristics)
6.1.1. 节点版图与面积分解
下图(原文 Figure 9)展示了节点版图的快照。
该图像是能量减少的柱状图,展示了不同芯片数量(1芯片、4芯片、16芯片、64芯片)在多个神经网络层(如CLASS1、CLASS2等)的能量减少效果。图中显示,随着芯片数量增加,各层的能量减少趋势普遍明显。
以下是原文 Table VI 的内容,展示了节点版图特性:
| Component/Block Area (µm2) | (%) | Power (W ) | (%) | ||
|---|---|---|---|---|---|
| Whole ChIP | 67,732,900 | 15.97 | |||
| Central Block | 7,898,081 | (11.66%) | 1.80 | (11.27%) | |
| Tiles | 30,161,968 | (44.53%) | 6.15 | (38.53%) | |
| HTs | 17,620,440 | (26.02%) | 8.01 | (50.14%) | |
| Wires | 6,078,608 | (8.97%) | 0.01 | (0.06%) | |
| Other | 5,973,803 | (8.82%) | |||
| Combinational | 3,979,345 | (5.88%) | 6.06 | (37.97%) | |
| Memory | 32,207,390 | (47.55%) | 6.12 | (38.30%) | |
| Registers | 3,348,677 | (4.94%) | 3.07 | (19.25%) | |
| Clock network | 586,323 | (0.87%) | 0.71 | (4.48%) | |
| Filler cell | 27,611,165 | (40.76%) |
- 面积构成: 芯片总面积为 。
- 16 个
tile占芯片面积的 44.53%。 - 四个
HT IP占 26.02%。 - 中央块(包括 4MB
eDRAM、路由器和控制逻辑)占 11.66%。 - 中央块与
tile之间的布线占 8.97%。 - 约一半(47.55%)的芯片面积被存储单元(主要是
eDRAM)占用。 - 组合逻辑 (Combinational logic) 和寄存器 (Registers) 分别只占 5.88% 和 4.94%。
- 16 个
6.1.2. 功耗分析
- 峰值功耗: 芯片峰值功耗为 15.97W(在悲观的 100% 翻转率下),大约是现有
GPU卡的 5-10%。 - 功耗分解:
tile消耗超过三分之一 (38.53%) 的功耗。- 四个
HT IP消耗约一半 (50.14%) 的功耗。 - 存储单元(
tile eDRAMs+ 中央eDRAM)占总功耗的 38.30%。 - 组合逻辑和寄存器(主要是
NFU和HT协议分析器)分别消耗 37.97% 和 19.25%。
6.2. 性能 (Performance)
6.2.1. 推理加速比 (Inference Speedup)
下图(原文 Figure 10)展示了相对于 GPU 基线(推理)的加速比。
该图像是图表,展示了不同神经网络层在CPU/GPU与加速器/GPU之间的速度提升比。横轴为不同的类和操作,纵轴表示加速比。数据表明加速器在多个层上的性能优势显著。
-
多节点系统需求:
CONV1(卷积层)由于其巨大的内存占用(11.89M 个突触,22.69MB;输入和输出神经元共 76.32MB,总计 99.01MB),需要一个 4 节点系统,超过了单节点 36MB 的容量。- 带私有核的卷积层 和 ,尺寸分别达到 1.29GB 和 1.32GB,需要一个 36 节点系统。
- 完整的神经网络 (
full NN) 包含 59.48M 个突触(118.96MB),至少需要 4 个节点。
-
平均加速比:
- 1 节点系统:21.38x
- 4 节点系统:79.81x
- 16 节点系统:216.72x
- 64 节点系统:450.65x
-
高性能原因:
- 大量操作器: 每个节点有 9216 个操作器(主要是乘法器和加法器),而
GPU只有 2496 个MACs (Multiply-Accumulate operations)。 - 片上
eDRAM提供带宽: 片上eDRAM提供了必要的带宽和低延迟访问,以满足大量操作器的数据需求。
- 大量操作器: 每个节点有 9216 个操作器(主要是乘法器和加法器),而
-
层类型可伸缩性差异:
LRN层: 扩展性最佳(无节点间通信),例如LRN2在 64 节点下达到 1340.77x 的加速比。然而,其实际加速比低于CONV层,因为计算强度较低。CONV和POOL层: 扩展性也很好,因为它们只在边界元素处有节点间通信。例如CONV1在 64 节点下达到 2595.23x 的加速比。CLASS层: 扩展性较差,因为每个输出神经元都使用来自不同节点的所有输入神经元,导致大量的节点间通信。例如CLASS1在 64 节点下加速比为 72.96x。
-
时间分解: 下图(原文 Figure 11)展示了时间分解(左侧为 4、16、64 节点,右侧为 1、4、16、64 节点)。
该图像是一个示意图,展示了机器学习超计算机的模块结构。图中包括SB、NBin、NFU(NFU-1、NFU-2、NFU-3)、CP和NBout等组件,表明数据流与处理过程。CLASS层的通信问题主要归因于简单的2D 网格拓扑,节点越多,将每个输入块发送到所有节点所需的时间越长。
-
完整神经网络 (
full NN) 扩展性: 完整神经网络的扩展性与CLASS层相似(4 节点:63.35x,16 节点:116.85x,64 节点:164.80x)。-
尽管这可能暗示
CLASS层主导了完整NN的执行时间,但下表(原文 Table VII)所示的按层类型分解结果表明并非如此,CONV层在计算量上占据主导地位。以下是原文 Table VII 的内容:
CONV LRN POOL CLASS 4-node 96.63% 0.60% 0.47% 2.31% 16-node 96.87% 0.28% 0.22% 2.63% 64-node 92.25% 0.10% 0.08% 7.57% -
原因是,这个完整
NN中的某些层对于大型 64 节点机器来说尺寸偏小。例如,有三个CONV层维度为 13x13,即使所有特征图都映射到同一个节点,每个节点最多也只需要 或 的 区域,这意味着要么没有充分利用所有节点,要么每个核计算都需要节点间通信。
-
6.2.2. 训练与初始化加速比 (Training and Initialization Speedup)
下图(原文 Figure 12)展示了相对于 GPU 基线(训练)的加速比。
该图像是一个示意图,展示了多芯片机器学习架构的布局及其组件,包括4个eDRAM模块和连接线。该布局的整体尺寸为3.27 mm x 3.27 mm,而NFU的尺寸为0.88 mm。
- 设置: 使用 32 位定点操作器进行反向传播和权重预训练(
RBM)阶段,而推理使用 16 位定点操作器。 - 平均加速比:
- 1 节点系统:12.62x
- 4 节点系统:43.23x
- 16 节点系统:126.66x
- 64 节点系统:300.04x
- 加速比分析: 训练阶段的加速比很高,但低于推理阶段,主要是因为操作器聚合(32位操作)。
CLASS层扩展性:CLASS层训练阶段的扩展性优于推理阶段,主要因为CLASS层训练阶段的计算量几乎是推理阶段的两倍,而通信量相同。RBM初始化:RBM初始化的扩展性与CLASS层推理阶段的扩展性相似。
6.3. 能耗消耗 (Energy Consumption)
6.3.1. 推理能耗降低 (Inference Energy Reduction)
下图(原文 Figure 13)展示了相对于 GPU 基线(推理)的能耗降低倍数。
该图像是示意图,展示了一个多芯片机器学习架构的设计。左侧部分显示了一种连接方式,各个模块通过 eDRAM 路由器连接。右侧展示了神经功能单元(NFU),包含 16 个输入神经元和 16 个输出神经元,数据流向存储单元(SB)。
- 平均能耗降低:
- 1 节点系统:330.56x
- 4 节点系统:323.74x
- 16 节点系统:276.04x
- 64 节点系统:150.31x
- 能耗降低范围: 最小能耗改善是
CLASS1在 64 节点下实现的 47.66x,最大能耗改善是CONV2在单节点上实现的 896.58x。 - 层类型能耗稳定性: 对于卷积、池化和
LRN层,随着节点数量的增加,能耗收益相对稳定,但对于分类层有所下降。后者是预期结果,因为平均通信时间(和总执行时间)增加。 - 能耗分解:
在能耗分解图中(原文 Figure 11 的右侧),可以观察到:
- 对于 1 节点架构,约 83.89% 的能耗由
NFU消耗。 - 随着节点数量的增加,
HT中消耗的能量比例逐渐增加,对于 64 节点系统平均达到 29.32%,特别是在分类层通信量较大时(48.11%)。
- 对于 1 节点架构,约 83.89% 的能耗由
6.3.2. 训练能耗降低 (Training Energy Reduction)
下图(原文 Figure 14)展示了相对于 GPU 基线(训练)的能耗降低倍数。
该图像是一个示意图,展示了多层神经网络的计算流程,包括输入神经元、乘法、加法、激活函数以及更新突触的过程。图中表示了三个阶段的处理和输入输出的关系,便于理解神经网络的结构与工作机制。
- 平均能耗降低:
- 1 节点系统:172.39x
- 4 节点系统:180.42x
- 16 节点系统:142.59x
- 64 节点系统:66.94x
- 扩展性行为: 训练阶段的能耗降低扩展性行为与推理阶段相似。
6.4. 定点计算对误差的影响 (Impact of Fixed-Point Computations on Error)
下表(原文 Table II)展示了定点计算对误差的影响:
| Inference | Training | Error |
|---|---|---|
| Floating-Point | Floating-Point | 0.82% |
| Fixed-Point (16 bits) | Floating-Point | 0.83% |
| Fixed-Point (32 bits) | Floating-Point | 0.83% |
| Fixed-Point (16 bits) | Fixed-Point (16 bits) | (no convergence) |
| Fixed-Point (16 bits) | Fixed-Point (32 bits) | 0.91% |
- 推理 (Inference) 影响: 如果仅在推理中使用 16 位定点数,对误差几乎没有影响(0.83% vs. 0.82%)。
- 训练 (Training) 影响:
- 如果训练也使用 16 位定点数,则不收敛。
- 如果推理使用 16 位定点数,训练使用 32 位定点数,误差仅略微增加(0.91% vs. 0.83%)。
- 进一步测试表明,使用 28 位时误差为 1.72%,增加 4 位到 32 位后迅速降至 0.91%,通过进一步聚合操作器可以进一步降低定点误差。
7. 总结与思考
7.1. 结论总结
本文深入研究了一种针对最先进机器学习算法(CNNs 和 DNNs)的定制多芯片架构 DaDianNao。作者指出,尽管 CNNs 和 DNNs 在 GPU 和现有加速器上表现出良好的加速和面积节省,但它们仍然受到内存带宽的限制。DaDianNao 通过设计一个多芯片系统,将所有神经网络参数存储在片上 eDRAM 中,有效解决了内存墙问题。实验结果表明,一个 64 节点的 DaDianNao 系统相较于单个 GPU,在推理任务中实现了高达 450.65 倍的加速和 150.31 倍的能耗降低。单个节点在 28nm 工艺下占据 的面积,验证了其在高性能和能效方面的巨大潜力。
7.2. 局限性与未来工作
论文作者指出了以下局限性并提出了未来的研究方向:
- 时钟频率优化:
NFU的时钟频率被保守地设定为 606MHz,与eDRAM频率匹配。未来工作可以探索实现更快的NFU和与eDRAM的异步通信。 - 互连拓扑优化: 简单的
2D 网格拓扑限制了分类层 (CLASS layers)等通信密集型层在多节点系统中的扩展性。未来可以采用更复杂的多维环面 (torus) 拓扑来减少通信时间。 - 更灵活的控制: 探索在每个节点中使用简单的
VLIW (Very Long Instruction Word)内核以及相关的工具链,以实现更灵活的控制。 - 原型芯片验证: 计划尽快进行节点芯片的流片 (tape-out),随后开发多节点原型。
7.3. 个人启发与批判
7.3.1. 个人启发
- 架构设计哲学转变:
DaDianNao的设计理念,即通过大规模片上存储来“消灭”内存墙,是异构计算和专用硬件发展的一个重要方向。它启发我们,针对特定领域的工作负载,可以打破传统通用计算架构的桎梏,通过“偏科”来达到极致的性能和能效。这种“存储偏向”的非对称架构,对于数据密集型任务具有很强的借鉴意义。 - 通信与计算的权衡: 论文强调了只传输神经元值而非突触权重的策略,显著降低了芯片间通信带宽需求。这提醒我们,在分布式系统中,明智地选择通信粒度和内容,是实现高效扩展的关键。对于任何分布式系统设计,理解数据局部性和访问模式,从而最小化昂贵的远程通信,是核心优化点。
- 定点化与精度权衡: 论文展示了定点计算在推理和训练中的不同需求。16位定点数足以满足推理精度,但训练可能需要更高的精度(如32位)以确保收敛。这对于设计实际的
AI加速器非常重要,需要根据应用场景灵活选择数据精度和硬件支持,以在性能、能效和精度之间找到最佳平衡。 - 定制化硬件的价值: 在后摩尔定律时代,定制化硬件成为提升性能和能效的有效途径。
DaDianNao证明了通过定制的tile结构、NFU可配置性以及片上eDRAM,可以为AI工作负载带来颠覆性的提升。
7.3.2. 批判与潜在改进
- 互连拓扑的局限性: 论文明确指出
2D 网格拓扑在处理分类层等全局通信密集型任务时,通信开销会成为瓶颈。虽然作者提到未来可能采用多维环面,但这是DaDianNao现有设计在扩展性上的一个实际限制。更复杂的拓扑结构会带来更高的布线复杂度和功耗,这需要更深入的权衡分析。 - 通用性与灵活性:
DaDianNao是高度定制化的,针对CNNs和DNNs进行了优化。虽然这些算法目前很流行,但机器学习领域发展迅速,新的算法和模型层出不穷。这种高度专用化的架构在未来是否能继续保持其优势,或者需要如何演进以适应新的算法,是一个值得关注的问题。例如,对于Transformer等模型,其self-attention机制的计算模式可能与传统的CNN/DNN有所不同,这可能需要NFU的进一步调整。 - 编程模型与生态系统: 论文提到编程要求低,通过代码生成器产生指令。但在实际应用中,一个成熟的硬件平台需要强大的软件生态系统和易用的编程模型,以便机器学习研究人员和工程师能够高效地利用其能力。这方面需要投入更多精力,以降低使用门槛。
- 系统级成本与集成挑战: 虽然单个节点可能比
GPU便宜,但构建一个 64 节点的超级计算机涉及多芯片封装、散热、电源管理等复杂的系统级工程挑战,其整体成本和实现难度可能需要更详细的分析。 - 模型规模的限制: 尽管
DaDianNao旨在支持大规模模型,但 36MB 的单节点eDRAM容量以及 64 节点的总容量(),对于未来可能出现的更大规模(例如数万亿参数)模型而言,仍可能显得不足。虽然可以继续增加节点数量,但通信开销会进一步凸显。
相似论文推荐
基于向量语义检索推荐的相关论文。