译者前言
在阅读NVDLA架构和源码的过程中,顺便翻译以加深理解,谨供参考,英文原文:http://nvdla.org/primer.html。
摘要
深度学习推理的大部分计算工作量主要是基于几类数学操作,可归为以下四类:卷积(convolutions),激活(activations),池化(pooling)和归一化(normalization)。这些操作具有共同的少量特征,使得它们可以非常好的适用于专用硬件来实现:它们的存储控制模式的可预测性非常高且易于并行化。NVDLA工程推动一种标准化且开放的架构来实现推理计算的需求。NVDLA架构是可扩展的,而且具有很好的可配置性;模块化的设计保持了灵活性和简化集成。标准化的深度学习加速器推动了大部分现代深度学习网络的可操作性,促进深度神经网络的大规模统一增长。
NVDLA硬件提供了一种简单,灵活,鲁棒的推理加速器解决方案。它支持很大范围的性能水平和可伸缩的应用,从比较小的,成本敏感的loT设备,到面向较高性能的loT设备。NVDLA事实上提供了一个基于开放工业标准的IP-core组成的集合:the Verilog model是一个RTL形式的综合和仿真的模型,the TLM SystemC simulation model可用于软件开发,系统集成和测试,NVDLA软件生态系统包括一个on-device software stack(片上软件栈,开源发布的一部分),一个完整的training infrastructure(训练基础设施)来构建深度学习的新模型,parsers(解释器)把已存在的模型转换成on-device software可用的格式。
开源NVDLA工程以开放,定向的社区形式管理,NVDLA保持对想要提交修改的外部用户和开发者的开放,贡献者需要同意Contributor License Agreement,以确保任何来源于某个贡献者的IP权利,可以授权给所有的NVDLA用户;不想回馈NVDLA的用户不承担这种义务。在初版发布后,开发过程将开放式的进行。NVDLA软件,硬件和文档,将在GitHub上可见。
NVDLA硬件和软件将在NVIDIA Open NVDLA License的许可下可获得,这是一个包含FRAND-RF专利授权的许可证。另外,对于构建了NVDLA-compatible(兼容NVDLA)实现可以和更大NVDLA生态进行交互的用户,英伟达将授权其使用NVDLA的名字或其他英伟达相关商标。(这个license描述只是透露相关信息,不是标准授权,如果有与NVDLA license冲突的地方,以NVDLA license为准)。
使用NVDLA加速Deep learning推理
NVDLA介绍一种模块化的架构设计来简化配置,集成和轻量化。它采用了几块积木来加速主要的神经网络推理操作。NVDLA硬件由以下几个部件组成:
Convolution Core:卷积核,优化的高性能卷积引擎
Single Data Processor:SDP,用于激活函数(activation)的单点查找引擎
Planar Data Processor:PDP,用于池化(pooling)的平面均值引擎
Channel Data Processor:CDP,用于高级归一化函数(normalization)的多通道均值引擎
Dedicated Memory and Data Reshape Engines:RUBIK,专用存储器和数据重整引擎,用于tensor reshape和拷贝操作的存储转换加速器。
每一块积木都是互相分离且可以独立配置的。比如说,一个不需要pooling的系统,完全可以通过配置去除planar averaging engine;一个需要更高卷积性能的系统,可以通过配置提高卷积单元的性能,而不需要修改加速器的其他单元。对各个单元进行调度操作(scheduling operations)被分配给一个协处理器或CPU来进行;他们在非常细粒度的调度边界上进行操作,每个单元操作都是独立的。这些对严密管理调度的要求,可以作为NVDLA子系统的一部分,外加一个专用管理协处理器来完成(这就是“headed”实现)。或者,这些功能也可以融合在较高级别的驱动程序实现中,由主系统处理器来完成(这就是“headless”实现)。这使得相同的NVDLA硬件架构提供多种实现大小。
NVDLA硬件与系统其他部分的接口应用的标准实践:一个控制通道(control channel)实现一个寄存器文件和中断接口,一对标准AXI总线接口用来连接存储。主存储器接口(the primary memory interface)用来连接系统的宽存储系统(wider memory system),包括系统动态存储器(system DRAM),这个存储器接口应该与系统的CPU和I/O外设进行共享。副存储器接口(the second memory interface)是可选的,允许连接更高带宽的存储器(通常可能专用于NVDLA或一个计算机视觉子系统)。这种对于异构存储器接口的可选择性,提供了在不同类型的主机系统之间进行扩展的额外灵活性。
典型的推理流程从NVDLA管理处理器(可以是headed实现中的微控制器,也可以是headless实现中的主CPU)发起,发送一个硬件层配置和对应的activate命令。如果数据依赖性方面允许,多个硬件层配置可以被发送到不同的引擎并同时被激活(比如说,存在另外一个层,它的输入不依赖于前面一个层的输出的情况)。因为每一个引擎为它的配置寄存器组(configuration registers)准备了双缓存机制(double-buffer),在激活层处理完成的一刹那,它还可以拿到第二个层的配置并立刻开始处理。一旦硬件引擎完成了它激活的任务,它会触发一个中断给管理处理器来通知这个完成事件,管理处理器将再次启动一个处理流程。这种“命令-执行-中断”流程(command-execute-interrupt flow)持续重复,直到整个网络的推理任务完成。
NVDLA的实现方式,通常有两种类别:
Headless方式:对NVDLA硬件进行逐个单元的管理(unit-by-unit management),用主系统处理器CPU来完成。
Headed方式:专门用一个协助的微处理器来完成那些高频中断任务(high-interrupt-frequency task),紧密的耦合到NVDLA子系统中。
提示:最初版本的NVDLA开源代码只提供headless模式的软件方案,后续将提供headed模式的驱动程序。
Fig1中的小系统模型(the small system model),展示了一个headless方式NVDLA实现,大系统模型(the large system model)展示的是headed方式的NVDLA实现。小系统模型代表的是对成本更加敏感的构建设备的NVDLA实现,大系统模式的特点是,增加了专用控制协处理器(dedicated control coprocessor)和高带宽的静态存储器(high-bandwidth SRAM)来支持NVDLA子系统。大系统模型适合于面向那些会同时执行很多任务的高性能loT设备。
Small NVDLA system/Model
小系统模式,将深度学习技术拓展到了那些之前不可行的领域。这种模式很适合于那些成本敏感的loT接入类设备,面向AI和自动话的系统,他们有着清晰的定位,比如成本,面积,功耗这些指标是主要的驱动因素。通过NVDLA可配置的资源在成本,面积和功耗这些方面完成节约(savings)的诉求。神经网络模型可以预编译,并进行性能优化,允许大一些的模型被剪枝,降低加载的复杂度。反过来,这种裁剪的NVDLA实现,要求一个耗费更小存储的模型和耗费更少计算时间的系统软件来进行加载和处理。
这种定制构建的系统(purpose-built systems),通常在同一时间只执行一个任务,并且这种在NVDLA执行中牺牲系统性能的方面,通常并不是关注的重点。这些系统能够进行相对廉价的内容切换