关键词:
激活函数硬件实现
二次分段拟合
张量加速单元
形式属性验证
可移植激励标准
摘要:
近年来基于神经网络处理单元(Neural network Processing Unit,NPU)的处理器犹如雨后春笋般深入人工智能物联网、自动驾驶等领域。激活函数的选取对神经网络学习的效率十分重要,非线性激活函数能够增加神经网络模型的表达能力,能更好地适应数据的复杂度。目前激活函数的硬件实现存在以下几个问题:多数研究者针对单一激活函数进行研究;即使是针对多个激活函数的硬件实现也没有统一的运算方式,导致较大的资源开销;目前主流的硬件实现方式精度不高。为解决以上问题,负责激活函数运算的张量加速单元(Generic Tensor Accumulator,GTA)架构设计与实现也日益复杂。仅依靠单一模拟验证方法无法满足验证要求,除此之外,面对逐渐缩短的研发周期,验证效率的提升也是目前验证所面临的挑战。
本文前部分主要研究激活函数的硬件实现,其中激活函数包括Sigmoid、Tanh、Swish、Mish、GELU五种。首先制定了三种激活函数拟合策略,发现利用Remez算法拟合效果较好,所以本文基于Remez算法对各个激活函数进行分段二次拟合,将拟合的系数存入查找表(Look Up Table,LUT)中,利用查找系数的方式进行运算。紧接着本文提出了一种适用于五种激活函数的统一运算方式,其实现方法为:采用16 bit系数量化;设计输入输出为4q28(整数部分4 bit和小数部分28 bit)的数据格式;在LUT中存储系数A、B、C以及偏移量D、E。经过对本文硬件实现激活函数的性能验证,几种激活函数的平均误差精度均达到了10-5数量级;与不做系数量化的方案相比LUT大小减少了70%;使用Synopsys的HAPS-80开发板进行硬件资源消耗分析,本设计仅使用了32个复杂运算单元(DSP)和0.05%的存储单元(REG),较少的占用率为后续的开发工作提供较大资源空间。
本文后半部分主要对GTA验证困难和效率提升进行了研究,包括以下几个方面:
(1)针对复杂控制逻辑且与时序强相关的模块,其状态空间庞大模拟验证无法100%覆盖的问题,本文利用形式属性验证(Formal Property Verification,FPV)方法对GTA的程序控制单元(Program Control Unit,PCU)展开验证,设计了验证环境,并引入了量子态信号来解决状态空间爆炸导致验证无法收敛的问题,同时给出了一系列流程以确保形式验证的完备性以及验证环境质量。最终验证结果COI覆盖率和FC覆盖率均达到了100%,且求解速度是未引入量子态信号的6-7倍。
(2)针对GTA的逻辑运算单元(Arithmetic Logic Unit,ALU)与乘法运算单元(Multiplier Functional Unit,MFU)所包含的指令操作逻辑进行数据路径验证(Data Path Validation,DPV),设计了证明所有指令功能的自动化索引流程,仅用5小时即一次性证明了全部54条指令操作的正确性,相较于模拟验证的效率有很大提升。
(3)利用可移植激励标准(Portable Stimulus Standard,PSS)技术制定了GTA的子系统级验证方案,并设计PSS模型用于产生验证所需要的测试场景,解决了行为级System C模型、寄存器传输级(Register Transfer Level,RTL)模型以及参考模型不能使用同一套测试用例的问题,减少了测试场景的开发总体上缩短了验证时间。最后给出了PSS验证平台的设计流程。通过随机测试,RTL功能覆盖率和代码覆盖率均达到了100%,System C模型的冗余代码经过豁免后,其代码覆盖率也达到了100%。