硬件软件蓝图灵活的深度学习专业化
抽象的专业深度学习(DL)加速堆栈,专为一组特定的框架、模型架构、算子,
和数据类型,提供了高性能的吸引力,同时牺牲了灵活性。算法、模型、运算符或数值系统的变化威胁专用硬件加速器的生存能力。
提出了VTA,一个可编程的深度学习架构模板,可以在不断变化的工作负载下进行扩展。VTA通过可参数化的体系结构,两级ISA,和一个JIT编译器。两级ISA基于
(1)任务ISA显式编排并发计算和内存任务
(2)一种微代码ISA,单循环张量张量运算。
接下来,提出一个系统配备JIT编译器,用于灵活的代码生成和异构执行,从而能够有效地使用VTA体系结构。
VTA集成并开源到ApacheTVM中,这是一种最先进的深度学习编译堆栈,为各种应用程序提供了灵活性模型和不同的硬件后端。
提出一个流程执行设计空间探索,生成自定义硬件体系结构和软件算子库主流学习框架。
通过用于对象分类的优化深度学习模型的部署在边缘级FPGA上进行样式转换。
1.Introduction
硬件专门化是加速已知的一组应用程序和工作负载。不幸的是,深度学习任何东西,除了一个静态的领域,和机器学习社区,改变了用来编写模型的软件模型本身、所述模型使用的算子以及数据操作的类型。
研究界主要关注两种加速器设计方法:固定功能加速器和固定功能加速器可编程加速器(也称为领域专用加速器)。
当前的解决方案提供了引人注目的峰值性能,但往往无法融入到先进的机器学习中场景。
固定模型加速器通常是空间和静态的布局,为某些工作负载提供有吸引力的性能。
不幸的是,这种方法的静态特性排除了重用硬件资源不足,限制了对较大或较新型号的支持。
相比之下,利用ISA的灵活性,可编程加速器提供了更多的功能。
由于这些加速器中可编程性,需要有能力的深度学习编译器,实现峰值性能,可以映射大量将工作负载加载到一组固定的硬件内部函数上。
定制这些加速器的行为,即使是开源的,也高度依赖于透明应用程序的可用性以及模块化的软件栈。
先前工作的一个中心挑战,将对快速变化的机器软件的专门化学习创新联系起来。
这一挑战并不特定于计算机体系结构;存在于堆栈的所有级别。端到端的方法需要在框架、系统、编译器和架构,使用硬件加速,执行最先进的机器学习。峰值FLOPs,仅程序员可以访问。
提出了VTA(通用张量加速器):一个显式的可编程体系结构与功能强大的JIT编译器,以及不牺牲专业化的优势,可以与深度学习模型同步发展的runtime。VTA使以下贡献:
•可编程加速器设计,暴露两级编程接口:允许显式任务调度由编译器栈的ISA底层微码,提供软件定义的操作灵活性。
此外,VTA体系结构完全可参数化:
硬件内部函数、内存和适应硬件后端需求数据类型定制。
•用于异构执行的可扩展runtime系统,对微代码内核执行JIT编译,提供算子灵活性。VTA runtime,
例如,为了扩展VTA计算机视觉为中心的原始设计,支持样式转换应用程序,无需任何硬件修改。
•可优化数据访问的调度表自动调整平台和数据重用,快速适应底层硬件环境的变化和工作负载多样性的变化。
通过为两个边缘FPGA调整不同的工作负载来展示VTA的灵活性。
图1:VTA在硬件目标和深度学习模型方面提供了灵活性。此流程图显示,通过探索VTA硬件配置,在计算机上执行自动算子调整,使给定的模型适应最佳硬件后端硬件方案。这个过程生成了在任何深度学习框架中部署VTA所必需的部分。
图1展示了如何映射使用VTA架构和runtime将工作负载转换为fpga。这个进程探索VTA硬件变体,为每个候选设计自动调整执行软件。最终的设计和定制的软件二进制文件,可以很容易地集成到深度学习框架。
最后,评估整个系统,用工作负载上的FPGA edge,演示VTA超越edge GPU的能力。
图2:VTA构建的软件堆栈的框架。利用Apache TVM编译器VTA目标堆栈。
图3:VTA硬件结构。VTA由以下部分组成,通过队列和sram进行通信的模块。定义了任务管道,这有助于最大限度地提高计算资源利用率。
2. VTA HARDWARE-SOFTWARE STACK OVERVIEW
在VTA上运行端到端工作负,载需要一个完整的可以将高级模型映射到VTA公开的编程接口。
概述了下面的VTA系统堆栈,内置到Apache TVM深度学习编译器堆栈。
框架
框架允许程序员轻松地表达以陈述的方式做模特,并在在标准数据集上扩展。
像张量流这样的框架,PyTorch、MxNet得到了广泛的采用,允许社区可以方便地共享和部署模型。
TVM能够从这些流行的框架中获取模型,支持从框架到VTA的通用编译。
中继图优化器。中继是TVM的高级程序陈述。继电器概括了使用的计算图,通过以前的框架和深入学习编译器变成完整的程序设计语言。中继优化流水线执行通用优化,例如运算符融合和部分评估。继电器的设计注重可扩展性,用一组优化来扩展中继的属性特定于VTA。当瞄准VTA时,量化输入匹配VTA的低精度数据类型,转换数据布局,最大化数据重用,并转换输入和权重数据利用VTA的张量内在论的布局。
TVM算子优化器。
TVM自动化将工作负载调度到VTA加速器变体上的繁琐过程。由于多种原因,日程安排很重要。
首先,这是平铺的最大化数据重用的计算。
第二,插入VTAruntime,可以转换线程并行性为任务级管道。
第三,对算子进行划,分为子计算,这些子计算可以映射到高级硬件内部函数,如批量DMA加载或GEMM。TVM合并了AutoTVM,一个自动化的调度优化器。
依靠AutoTVM来指导硬件候选,探索寻找给定的工作量最佳的VTA候选。
JIT编译器和runtime。
通过间接引入一个级别,runtime对加速器二进制文件执行JIT编译,并在CPU和VTA之间管理异类执行。
硬件架构
VTA是一种可参数化的加速器这加快了深度学习的速度图表。使用两级编程接口,VTA由编译器堆栈显式编程。建筑是由GEMM内核的大小参数化,SRAM形状和数据类型宽度。
参数化硬件体系结构使重新定位到具有不同硬件资源的设备同一设计成为可能。
图4:VTA高级指令字段。在DMA读/写和SRAM之间,在DRAM之间执行2D跨步,加载和存储指令。GEMM指令用于矩阵乘法、2D卷积等,而ALU指令可以执行大范围的激活、规范化和池化任务运算。
3. VTA ARCHITECTURE AND JIT RUNTIME
柔性深度学习加速器的成功实现,需要硬件和软件堆栈的共同设计。从高层次上描述两个共同设计的组件,实现这个目标:VTA硬件架构,VTA JIT编译器和runtime。
3.1硬件架构
图3给出了VTA硬件的高级概述组织。VTA由四个模块组成:fetch,load,计算和存储。这些模块一起定义了一个任务管道,可以在在内存受限的工作负载上,受计算限制的工作负载和高内存带宽利用率。
这些模块通过命令队列和片上共享存储器作为单向数据通道。对这些内存的访问,通过依赖队列同步,防止数据危险,如读后写(RAW)和读后写(WAR)。
最后,可以使用三级体系结构(负载计算存储)构建任意深度管理得当的任务管道。
参数化能力
VTA体系结构完全可参数化:
GEMM张量本征的形状可以修改为影响硬件资源的利用率。修改输入、权重和累加器张量的形状GEMM单元,直接影响要乘法器实例化个数,以及SRAMs需要端口宽度。
此外,每个数据类型可以自定义为不同的整数精度:
权重和输入类型可以是8位或更少,而累积类型可以是32位或更少。整数精度的控制可以缩放资源受限时的片上算法密度。
开放任务级管道并行性
任务级管道并行性(TLPP)是VTA体系结构的一个重要特性,可以同时使用计算和内存,最大限度地利用资源。TLPP基于访问执行解耦的范例,为了提取TLPP,将任务划分为两个相互排斥的执行上下文,使并发的加载、计算和存储操作互相干扰。这种分区很容易在使用虚拟线程的TVM中实现。
保证解耦访问执行指令流及时准确,将依赖信息编码到指令中。有效地导致在计算绑定的工作负载上隐藏内存延迟(如二维卷积)。
任务级ISA
VTA支持高级任务ISA多周期计算和内存操作编码,包括加载,GEMM、ALU和存储说明。如图4所示,加载和存储指令描述了如何从DRAM中读取数据,加载并存储到片上sram中。快速内存访问
支持在不修改内存布局的情况下加载张量图块。
GEMM和ALU指令调用微代码内核,基于微操作指令,描述了定义给定的深度学习算子。将在下面的VTA中演示一个简单的执行管道:
•加载模块从DRAM进入片上存储器,加载输入、权重和bias tensor。
计算模块从DRAM加载微代码内核进入芯片内存,微内核是基于微操作的,描述了输入、权重和biases的数据访问。
•计算模块执行微代码内核,通过GEMM执行密集线性代数计算,通过张量运算单元进行核心运算或配对运算。
•存储模块读取计算机处理的结果,写入DRAM。
计算模块
两个功能单元执行寄存器文件:张量ALU和GEMM核心。
张量ALU执行元素的张量运算,例如加法,激活,规范化和池化任务。GEMM核对输入执行高算术强度矩阵乘法和权重张量,实现常见的深度学习算子,例如二维卷积,或全连接层。
GEMM核在同一时间执行矩阵乘法运算,每周期一个输入权重矩阵乘法的流水线速率。简化树逻辑实现并行向量点积,可以用其它实现替代,比如,脉动阵列。
GEMM核定义了一个低级张量,暴露于TVM编译器堆栈的硬件内部。
TVM使用张量化(tensorization):一种将深度学习算子(如2d卷积)映射到固定张量的自动化硬件。
微码ISA
描述计算核心从微操作数据缓存。图5详细说明了GEMM核心,如何执行计算输入,权重以及累加器存储器中存储的过量数据。
这些微操作不提供控制流。需要展开以表示可重复的数据访问模板。有两种类型的计算微操作:ALU和GEMM操作。
尽量减少微操作内核的占用,同时避免需要控制流指令时,计算核心执行两级嵌套循环中的微操作序列。通过仿射函数确定每个张量寄存器的位置。这个压缩方法有助于减少发送到加速器的数据。
3.2 JIT Runtime System
VTA的JITruntime支持深度学习的协作执行CPU主机和加速器之间的工作负载。JIT runtime
设计遵循五个目标:
(1)实现异构执行,
(2) 降低编译器设计复杂度
(3)克服物理限制
(4)减少二进制膨胀
(5)未来证明。
异构执行
固定功能加速器存在一个模型演化挑战,因为大多数加速器是为固定模型而构建的。异构执行克服了将操作符适当地调度到目标中(例如,CPU或VTA)的限制,这取决于对不同类型的算子。例如,大多数cnn中第一卷积层包含在CPU上表现良好的强度,运算量较低的算子。背后的异构执行另一个动机为支持VTA尚未支持的新兴算子。
图5:GEMM核可以对输入张量和权重张量执行一次密集矩阵乘法,并将结果添加到寄存器文件张量。数据寻址模式由微编码序列指定:映射一个固定大小的矩阵乘法内在算子不同的深度学习。
编译器设计
通过添加一级间接寻址,生成后端代码,JIT-ting无需编写编译器代码。对于不同的可编程系统来说,维护起来可能会很乏味。
加速器
JIT编译器向TVM公开了一个高级API,抽象出特定于VTA的变量,将调度降低到架构细节。可以扩展TVM编译器支持为VTA构建,覆盖不同形状大小变体。
物理限制
JIT runtime生成并管理微内核。控制何时从加速器有限的微操作缓存中加载内核DRAM。消除了微操作内存的物理限制,支持大容量模型,一下子使所有层的所有微内核都不适合SRAM。允许交换micro-op资源缓存使用的面积,如,数据存储或计算单元。
二进制膨胀
将微内核生成延迟到JIT编译阶段,可以最大限度地减少二进制膨胀。因为VTA的架构对控制流的支持有限,微内核必须展开,可以产生相当大的二进制文件。另外,微内核代码JIT-ting表示二进制文件,以便在单一ISA:不提供混合二进制,只提供一个执行加速器二进制JIT的CPU。
经得起未来考验
深度学习的进展概述了动态神经网络工作负载的流行控制流量。此外,系统的进步也显示出趋势异构多加速器系统及其扩展加速。具有处理动态决策的runtime跨异构平台,将保持硬件的设计,像VTA这样的很简单加速器,并且限制了对未来的支持模型,一个主要由软件定义的问题。
图6. XGBoost对单个ResNet-18的进度探索超96层。八个VTA设计候选(2,16)x(16,16)
考虑了W8A8的(8,8)x(8,8)GEMM本征。图层是conv2d:IC=256,OC=256,H=W=14,KW=KH=3,步长=(1,1),填充=(0,0)。
图7:硬件设计探索和时间表示例,在Ultra96 FPGA上,一次完整的ResNet-18推理工作负载运行中自动调整。探索始于有前途的VTA硬件变量并收敛到最佳硬件设计,同时使用所需优化时间的一小部分详尽地评估每个硬件设计。
4 . VTA HIERARCHICAL OPTIMIZATION
4.1 Hardware Exploration for Varying FPGA Sizes
展示VTA架构灵活性的一种方法是不同的FPGA平台。FPGA越来越容易获得比以往任何时候都低100美元的开发板,FPGA云计算实例变得无处不在。
VTA设计提供多种体系结构定制图1中列出的参数。Architectural knobs包括GEMM硬件内部形状,数据类型,并行数,张量运算中的算术单位ALU,ALU运算,BRAM片上存储器之间的分配。
电路knobs包括硬件流水线在更高频率下关闭定时的程度,PLL频率。这些定制knobs定义了硬件设计空间为100至1000个独立设计。
这个设计可以对空间进行详尽的探索,以找到最佳的选择特殊的工作量。
按顺序进行探索分层的步骤。
首先,使用一个简单的FPGA资源模型,删除不可行的VTA参数化。修剪后,每个候选硬件设计被编译、放置和路由。每个{fpga选择最佳可行的设计× 数据类型× 批处理}组合,通常探索有希望的候选-其余的设计要么产生低峰值性能或失败放置、路由或定时关闭。为了这个最后一组设计,生成优化软件,使用算子自动调整,并使用此软件获取工作负载的性能简介。
基于理论吞吐量和频率,采用峰值性能分析模型对硬件设计进行初步滤波。假设计算资源利用率为100%。但是,假设特定算子对计算资源的100%利用率是通常不准确。例如,根据工作负载组合,像conv2d这样具有大窗口大小的算子,可能会表现出较高的性能算术强度(以Op/字节为单位)。高负荷运行算术强度转化为高利用率,接近峰值性能。运算量低的算子像conv2d一样,窗口大小为1的强度是内存带宽受限的。可以使用任务级管道并行性来减轻性能损失。
4.2 Schedule Exploration for Operator Autotuning
调度自动调整是自动搜索的过程,算法试图优化给定的程序或工作负载,向硬件性能峰值迈进。执行自动调谐,通过应用不同的内存平铺、循环变换(例如,拆分、重新排序、展开)、矢量化/张量化和并行化策略。
在硬件上,使用TVM编译器表示每个算子的调度模板(例如conv2d,conv2du transpose,groupu conv2d,fc)。
使用TVM的自动调度库来获取最大化给定组合性能的调度算子,张量形状和硬件参数化。
图6显示了优化时的自动调整搜索过程,单个ResNet层的不同VTA硬件候选。使用XGBoost搜索算法来查找最佳调度,在有限的试验次数内对每个硬件变体进行测试。然后针对每个候选硬件调整工作负载的层。
用于选择VTA硬件最适合给定模型的变量聚合推理时间。
在一台计算机上彻底调整一个网络需要几个小时硬件variant。鉴于VTA硬件设计数量庞大
测试和建模架构,支持自动调整搜索。
如果不仔细设计,很快就会变得棘手。引入了一个分层的优先级问题,最小化跨多个候选硬件的全网络自动调谐时间。通过应用超参数优化技术,处理这个问题成功减半。不是在定义网络体系结构的超参数,应用这种技术可以在VTA设计候选中进行选择。
如何在每次迭代中同时考察各相关性能,硬件设计都会针对给定的工作负载进行优化算法改进。
在整个优化过程中,对于每个硬件设计,使用循环策略来更新所有算子的延迟估计。
4.3 Full Network Optimization Case Study
在图7中展示了一个对于ResNet-18的工作负载分层优化的示例,基于硬件的探索,以及之前描述的勘探技术。在生成的一组VTA候选上执行这些优化,使用W8A8(8位权重,8位激活)数据表示。选择了八个有前途的硬件候选,并申请成功减半,很有希望修剪未显示的设计。类似于神经网络的超参数优化网络训练,这是一项艰巨的任务,作为相对的表现,
硬件设计之间的差异在早期可能很小。之后一个中等数量的迭代,成功的减半是可以的,收敛到最佳候选硬件设计。
这个案例研究展示了VTA快速导航的能力,给定工作负载的加速器配置的非平凡空间。随着加速器配置的改变,软件也会随之改变编程。这种联合优化问题只能有一个灵活的堆栈求解。
5. EVALUATION
随着深度学习领域的不断发展,在不断发展对支持新兴模式很重要。评估VTA的能力,支持两种超越标准深度的新型模型架构卷积网。
首先,评估MobileNet,一个最近的模型,使用分组卷积来减少网络的计算开销。对于MobileNet,评估一个变体称之为MobileNet,通过VTA的GEMM核心向量因子。
第二,实施生成对抗网络(DCGAN)模型,用于图像对图像的翻译与生成。
这两种模型都需要非平凡的扩展来支持新的算子。在通道组上显示块稀疏模式,MobileNetG需要对分组卷积的支持。
DCGAN需要支持具有空间稀疏模式。加速器必须支持这些访问,避免不必要的计算并实现最大性能。runtime可以很容易地利用调度,生成支持这些访问模式的微内核变换硬件。
将VTA集成到apachetvm中,评估了各种一组边缘FPGA器件的深度学习模型不同的资源预算。从MxNet导入了亚马逊使用的深度学习框架所有模型。
继电器的模型进口商提供了各种各样的其它产品前端,VTA不限于MxNet。
图8显示了这些模型的性能比较,比较VTA加速执行与高度优化ARM CPU和GPU平台依赖行业实力学习库:ARM ComputeLib(ARM CL)和TVM。
这个采集ARM Cortex-A9、ARM Cortex-A53和Mali-T860 GPU来自Pynq-Z1(65美元)、Ultra-96(250美元)和Firefly-RK3399(200美元)boards.。对于VTA硬件设计,使用了一个自动化的来自32位浮点(FP32)的8位整数缩放和平移过程,精度下降可以忽略不计。对于CPU基线,使用TVM自动调谐,获得FP32 CPU内核利用霓虹灯矢量化、多线程和
最先进的调度技巧(空间平铺、Winograd变换等)。
对于GPU基线,使用ARM CL v18.03,利用16位浮点(FP16)库支持。ARM CL缺失支持dcgan的conv2d转置,演示VTA的能够在非常规工作负载下保持领先。
图8:多CPU端到端性能评估,配备GPU和FPGA的边缘系统。对于类似系统,VTA比传统的基于CPU和GPU的推理。
图8显示了端到端的结果,可以在两个方面进行讨论成本方面的可比设备组:
(1)VTA Pynq与Cortex-A9(100美元以下)
(2)Ultra96上的VTA与CortexA53和Mali-T860 GPU(200美元至250美元)的比较。
首先,Pynq-Z1上的VTA性能优于Cortex-A9 CPU 3.0×, 4.4×, 5.3× 和2.1×在MobileNet、ResNet-18、ResNet-34和DCGAN上。
第二,VTAUltra-96的性能比Cortex-A53好2.5倍×, 4.7×, 6×,3.8× 和11.5× 在MobileNet上,ResNet-18,ResNet-34,ResNet-50和DCGAN。
此外,Ultra-96上的VTA表现优于移动级Mali-T860 GPU 2.1×, 2.5×, 3.2× 和2.1× 在MobileNet、ResNet-18、ResNet-34和ResNet-50。
总的来说,VTA证明了体系结构的灵活性可以提供高性能,同时形成一条进化路径,用于加速各种设备上的不同工作负载。
6. CONCLUSION
本文提出了软硬件蓝图的“灵活”专业化:效率从硬件中获得的理念专业化与工作负载灵活性并不相互排斥。
提出了VTA,一个参数化的深度学习体系结构,通过两级ISA显式编程。共同设计带有运行时系统的加速器,JIT编译微内核提供算子灵活性。
通过这种方法,支持较不传统的算子,如卷积转置,以及分组卷积,无需对硬件。评估表明,VTA可以有效地不同的FPGA、多种工作负载和现成的利用率,深入学习编译器,快速集成优化软件有专门的硬件。
最后,证明了集成的硬件和软件堆栈,可以执行完整的堆栈FPGA的优化与探索。