1.NVDLA简介
英伟达深度学习加速器(NVDLA)是一种免费开放式架构,NVDLA具有可扩展性,高度可配置性,旨在简化集成和可移植性。NVDLA软件生态系统包括一个设备上的软件堆栈(开源版本的一部分),一个完整的培训基础架构,用于构建包含深度学习的新模型,以及将现有模型转换为可在设备上使用的形式的解析器软件。可以提供其自己的硬件平台以及软件内核:
- 硬件架构:基于Xavier–全球首款专为汽车产品设计的自动处理器 - 以及完整的验证套件。
- 基于开放行业标准的IP核模型提供:Verilog模型是RTL形式的综合和仿真模型,TLM SystemC仿真模型可用于软件开发,系统集成和测试。
2.硬件架构
2.1硬件简介
NVIDIA®深度学习加速器(NVDLA)是一种可配置的固定功能硬件加速器,适用于深度学习应用程序中的推理操作。通过展示加速与每个CNN层相关的操作的各个构建块(例如,卷积,反卷积,完全连接,激活,池化,本地响应归一化等),为卷积神经网络(CNN)提供全硬件加速。保持独立且可独立配置的块意味着NVDLA的尺寸可以适用于许多较小的应用。
NVDLA架构中的每个块都支持特定的操作,这些操作对于深度神经网络的推理是不可或缺的。推理操作分为五组:
- 卷积运算(卷积核心和缓冲区块)
卷积模式有很多种支持:直接卷积、图像输入卷积模式、Winograd卷积模式、批量卷积模式、卷积缓冲区 - 单数据点操作(激活引擎块)
单数据点操作支持:线性函数、非线性函数 - 平面数据操作(池化引擎块)
池化功能支持:maximum-pooling - 从池窗口获取最大值、最小池 - 从池窗口获取最小值、average-pooling - 池化窗口中的特征值的平均值 - 多平面操作(本地和标准块)
- 数据存储器和重塑操作(重塑和桥接DMA模块)
桥DMA(BDMA)模块提供数据复制引擎,以在系统DRAM和专用高性能存储器接口(如果存在)之间移动数据。提供在这两个未连接的内存系统之间移动数据的加速路径。
2.2外部接口
NVDLA整个系统有四个接口。这些是:
- 配置空间总线(“CSB”)。主机系统使用非常简单的地址/数据接口访问和配置NVDLA寄存器组。一些系统可以通过合适的总线桥将主CPU直接连接到CSB接口; 其他可能更大的系统将把一个小型微控制器连接到CSB接口,将管理NVDLA的一些工作卸载到外部核心。
- 外部中断(“IRQ”): NVDLA中的某些状态要求异步报告给命令NVDLA的处理器,这些状态包括操作完成和错误条件。外部中断接口提供单个输出引脚,与CSB接口互补。
- 数据主干(“DBBIF”): NVDLA包含自己的DMA引擎,用于从系统的其余部分加载和存储值(包括参数和数据集)。数据主干是符合AMBA AXI4标准的接口,旨在访问大量相对高延迟的内存(如系统DRAM)。
- SRAM连接(“SRAMIF”):某些系统可能需要比系统DRAM提供的更高的吞吐量和更低的延迟,并且可能希望使用小型SRAM作为缓存来提高NVDLA的性能。提供符合AXI4标准的辅助接口,用于连接到NVDLA的可选SRAM。
3. 软件设计
NVDLA拥有完整的软件生态系统,包括从编译网络到推理的支持。该生态系统的一部分包括设备上的软件堆栈,这是NVDLA开源版本的一部分; 此外,NVIDIA将提供完整的培训基础架构,以构建包含深度学习的新模型,并将现有模型转换为NVDLA软件可使用的形式。通常,与NVDLA相关联的软件分为两部分:
编译工具(模型转换)
运行时环境(在NVDLA上加载和执行编译的神经网络的运行时软件)。
3.1编译工具
编译阶段负责将深度神经网络转换(也称为编译)为针对给定NVDLA配置优化的硬件层序列。针对特定硬件配置优化的编译网络通过减少模型大小,负载和运行时间来提高性能。编译是一个两步过程,包括:解析和编译。
- 解析器
解析器是一种解析预训练模型的相对简单的工具。在最基本的版本中,它读取预先训练的Caffe模型,并创建一个合适的网络表示形式作为一组图层,并将其传递给编译的下一步。高级解析器允许将其他框架(如TensorFlow,Theano等)上的预训练模型转换为适合编译器的相同标准表示。虽然编译器是完全理解底层硬件配置的人,但是Parser足够聪明,可以主动识别那些不适合NVDLA实现的神经网络操作并向应用程序报告。解析器还可以检测具有拓扑中的中断/循环的错误网络或损坏的训练数据,其布局不适合相关联的网络操作。 - 编译器
编译器将Parser的输出作为其输入,并使用对NVDLA实现的底层硬件规范的理解将其转换(即编译)为一组硬件层。编译器可以将解析的网络解释为有向图,其中节点表示网络操作,边缘表示操作之间的中间张量。编译器的主要工作是有效地将每个网络操作映射到NVDLA实现的目标功能块,同时牢记硬件的规格。了解硬件配置允许编译器为可用功能生成适当的操作。例如,这可能包括在不同的卷积操作模式(例如Winograd卷积或基本卷积)之间进行选择,
3.2运行环境
运行时环境包括在兼容的NVDLA硬件上运行编译的神经网络的软件。它由两部分组成:
用户模式驱动程序 - 这是应用程序的主界面。如编译工具中所述,在逐层解析和编译神经网络之后,编译的输出以称为 NVDLA可加载的文件格式存储。用户模式运行时驱动程序加载此可加载项并将推理作业提交给内核模式驱动程序。
内核模式驱动程序 - 由内核模式驱动程序和引擎调度程序组成,它负责在 NVDLA上调度编译网络并对 NVDLA寄存器进行编程以配置每个功能块。
3.2.1用户模式驱动程序:
UMD提供标准应用程序编程接口(API),用于处理可加载图像,将输入和输出张量绑定到存储器位置,以及向KMD提交推理作业。该层将网络加载到一组定义的数据结构中的内存中,并以实现定义的方式将其传递给KMD。例如,在Linux上,这可能是一个ioctl(),将数据从用户模式驱动程序传递到内核模式驱动程序; 在KMD在与UMD相同的环境中运行的单进程系统上,这可能是一个简单的函数调用。低级功能在用户模式驱动程序中实现。
- 运行时接口
这是运行时库的接口。它实现了从文件中重新处理后从应用程序传递的可加载缓冲区的函数,为张量和中间缓冲区分配内存,准备同步点,最后向KMD提交推理作业。提交给KMD的推理工作称为DLA任务。
- 使用运行接口提交推理任务包括:
- 创建NVDLA运行时实例
- 获取NVDLA设备信息
- 加载网络数据
- 获取输入和输出张量信息
- 更新输入和输出张量信息
- 为输入和输出张量分配内存
- 使用张量绑定内存句柄
- 提交任务以进行推理
- 卸载网络资源
- 可移植性层
UMD的可移植层实现了访问NVDLA设备,分配DMA内存和向低级驱动程序提交任务的功能。对于此功能,UMD必须与KMD通信,并且通信接口与OS相关。可移植性层抽象此OS依赖接口。
3.2.2 内核模式驱动程序
KMD主入口点在内存中接收推理作业,从多个可用作业中进行选择以供执行(如果在多进程系统上),并将其提交给核心引擎调度程序。该核心引擎调度程序负责处理来自NVDLA的中断,在每个单独的功能块上调度层,以及根据层的完成更新任何依赖性。调度程序使用来自依赖关系图的信息来确定后续层何时准备好进行调度; 这允许编译器以优化的方式决定层的调度,并避免与KMD的不同实现的性能差异。
- 核心引擎接口
神经网络被转换为硬件层,以便在DLA硬件上执行。这些层使用依赖图相互连接,并在DLA上由称为引擎调度程序的模块执行。此调度程序负责更新依赖项计数,处理事件和编程硬件层。它是DLA软件的核心模块,可跨不同操作系统移植。可移植层应使用以下接口来启用核心引擎模块。核心引擎模块也被称为固件,因为相同的源代码将用于配套控制器的固件中,用于头部配置。
KMD中的一般执行顺序如下:
- 在探测期间向固件注册驱动程序
- 驱动程序提交任务信息以供执行
- 固件程序硬件层
- 从硬件接收中断
- 下半部分调用者在中断后处理事件
- 重置任务和引擎状态
4.实验平台
4.1 虚拟仿真实验
要在云中启动虚拟服务器实例,需要使用Amazon Machine Image(AMI)。虚拟模拟器可以在连接了FPGA板的实例上运行。以下部分描述了虚拟模拟器如何在不同的AMI上运行
- 在NVIDIA AMI上使用虚拟模拟器:NVIDIA提供NVDLA AMI(基于ubuntu14.04),包括所有必要的系统要求,允许用户无需任何额外操作即可运行虚拟模拟器。
- 在AWS AMI上使用虚拟模拟器:虚拟模拟器可以在AWS提供的基本ubuntu / centos AMI上运行。本节介绍如何逐步在基本AMI上运行虚拟模拟器。
- 在AWS FPGA AMI上生成AFI:AWS FPGA平台需要Amazon FPGA映像(AFI)。在AWS FPGA平台上运行虚拟模拟器之前,需要注册AFI并将其加载到AWS。NVIDIA提供了一个经过验证的演示AFI。用户还可以开发自己的FPGA设计,当设计完成后,用户可以使用FPGA预先构建的FPGA开发和运行时工具生成AFI。本节介绍如何逐步在AWS FPGA AMI上生成AFI。
详情见网址:http://nvdla/vp_fpga.html#using-the-virtual-simulator-on-nvidia-ami
更多推荐
nvdla_investigate
发布评论