背景

人工智能(Artifical Intelligence),是研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的一门科学技术。人工智能的本质是对人类思维过程的模拟。

人工智能应用创新和产业融合,在政策、资本和产业的推动下不断深入,人工智能的应用场景将更快地扩大到各个行业,并在智慧城市、智能制造、智慧医疗、自动驾驶等领域得到广泛应用。自主人工智能计算平台可以帮助客户解决将算法部署到硬件的难题,实现人工智能一键式部署,加速人工智能应用落地。

架构设计

常规架构通常包括两种:

1、全流水线架构,顾名思义,将整个神经网络进行平铺,并对每一层进行优化设计,优点:实现高吞吐率和低延时。缺点:消耗大量硬件资源,通常无法跨网络或硬件平台实现

2、逐层加速,即实现通用加速核心,多个网络层复用加速核心。缺点就是,可能造成计算效率偏低,需要和外部缓存交互导致整个加速器时延过大。优点是,通用。可以跨网络和跨平台移植。

一般AI芯片设计中通常会选择第二种。至于基于FPGA硬件加速实现,可以根据需求指标和硬件资源情况进行取舍选择。

从计算架构角度分为四种不同类型:

1、指令集架构:

可以定义为一种采用完整神经网络指令集来进行神经网络计算加速的一类人工智能处理器。其特点是采用预定义好的定长或者变长的指令作为处理的基本单元,通过对指令的组合构成指令流,由指令流完成任意的计算任务。基本过程即:取指、译码及执行。无论CPU、GPU还是新型的NPU都有很多成功的案例在使用指令集的方式支持不同的计算任务。通过对神经网络的计算特征抽象、构造神经网络专用的指令集,从而实现专用的AI处理器。包括寒武纪、燧原科技、壁仞科技等,都是通过这样的方式来实现人工智能计算 可以定义为一种采用完整神经网络指令集来进行神经网络计算加速的一类人工智能处理器。其特点是采用预定义好的定长或者变长的指令作为处理的基本单元,通过对指令的组合构成指令流,由指令流完成任意的计算任务。基本过程即:取指、译码及执行。无论CPU、GPU还是新型的NPU都有很多成功的案例在使用指令集的方式支持不同的计算任务。通过对神经网络的计算特征抽象、构造神经网络专用的指令集,从而实现专用的AI处理器。包括寒武纪、燧原科技、壁仞科技等,都是通过这样的方式来实现人工智能计算

2、数据流架构

通过数据流调度决定张量的架构,特点是优化数据复用和计算的并行度。在典型的数据流阵列中,会对神经网络的张量划分成不同的Tile,映射到计算单元中,典型的数据流包括两种:

  • WS数据流:充分复用权重
  • OS数据流:充分复用部分数据

通过不同的数据流提高数据复用的程度,减少缓存,提高计算的并行度,从而最终提高系统的处理能力和提高处理的能效。

3、存内计算架构

传统计算架构,计算单元和存储器之间是分离的结构,在每次计算中计算单元和存储器之间要进行一定的数据搬移。存内计算则将一定的计算单元放到存储器内部,在计算过程中不需要大量的搬移数据,从而解决传统计算架构中的存储墙问题。

  • (1)传统计算:数据需要在存储器和处理单元之间反复传输,面临“存储器墙”瓶颈。
  • (2)存内计算:将处理单元的计算功能移动到存储器内部,消除了“存储器墙”瓶颈
    • 有效解决存储墙问题,在SRAM/RRAM/FLASH中,通过模拟的方式实现数字的计算,一是降低数据搬移,同时降低计算功耗,提高了计算效率。

4、可重构架构

一方面,计算单元在空间排成阵列结构,具有计算并行性;另一方面,是近存计算,每个计算单元附近有一个存储单元,减少数据搬移的距离,同时具有弹性粒度特点,通过电路上的重构提高计算的位宽,随着算法的需求变化,可以动态重构计算结构,最终的计算由数据流驱动。

  1. 计算阵列重构:由多个并行计算单元互联而成,每个计算单元可以根据算法所需要的的基本算子不同而进行功能重构
  2. 存储带宽重构:能够根据AI算法的不同而进行重构,以提高数据复用性和计算并行度,提高计算吞吐和能量效率
  3. 数据位宽重构:为满足AI算法多样的精度需求,支持高/低比特模式下计算需求

设计评价指标

神经网络加速器面临的主要问题在于运算速度和功耗。简言之,归纳为性能和能效

1 性能

性能(Performance,单位:GOPS)

Performance = 2MAC*PE Utilization*Frequency

  • 硬件乘加单元数:MAC
  • 计算单元利用率:PE Utilization
  • 计算核心频率:Frequency

2能效

能效(Energy Efficiency,单位:GOPS/W)

EnergyEfficiency=Performance/Power=Performance/((Ecomp+Eio)/T)=NOP/(Eop*Nop+Emem*Nmem)=1/(Eop+Emem*Nmem/Nop)

其分别代表了平均一次运算需要消耗的能量,由两部分构成:计算能耗以及平均访存能耗,降低这一能耗指标可以从以下三个方面入手:降低计算本身的能耗;减少单词访存的能量;减少计算流程中访存次数。

核心问题

优化目标:性能和能效

从计算单元利用率和访存次数两个角度优化设计

(1)根据网络结构多样性,应高效地复用各层存储在片上缓存的数据

(2)应充分利用硬件资源,在支持各种算子参数时减少计算单元的浪费