全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
6.3 嵌入式GPU评估
对于移动GPU实验,在配备ARM Mali-T860MP4 GPU的Firefly-RK3399板上,运行端到端管道。基线是供应商提供的库,即ARM计算库(v18.03)。
Figure 19: End-to-end experiment results on Mali-T860MP4. Two data types, flfloat32 and flfloat16, were evaluated.
如图19所示,对于float16和float32,在三种可用模型上的表现,都优于基线(基线尚不支持DCGAN和LSTM)。加速比范围为1.2×到1.6×6.4 FPGA加速器,评估Vanilla深度学习加速器,介绍TVM如何在在FPGA上原型化的通用推理加速器设计上,处理特定于加速器的代码生成。
在本次评估中使用了Vanilla DeepLearning Accelerator(VDLA)——将以前加速器提案中的特征,提取到一个最低限度的硬件架构中——展示TVM生成高效调度的能力,该调度可以针对专门的加速器。图20显示了VDLA体系结构的高级硬件组织。VDLA编程为张量处理器,高效执行高计算强度的算子(例如,矩阵乘法,高维卷积)。可以执行加载/存储操作,将阻塞的三维张量,从DRAM带到SRAM的相邻区域。为网络参数,层输入(窄数据类型)和层输出(宽数据类型),提供专门的片上存储器。最后,VDLA提供了对连续加载,计算和存储的显式同步控制,最大化内存和计算算子间的重叠。
Figure 20: VDLA Hardware design overview.
在低功耗PYNQ板上,实现了VDLA设计,该板集成了时钟频率为667MHz的ARM Cortex A9双核CPU和基于Artix-7的FPGA结构。在这些有限的FPGA资源上,实现了一个时钟频率为200MHz的16×16矩阵向量单元,执行8位值的乘积,在每个周期累加到32位寄存器中。此VDLA设计的理论峰值吞吐量约为102.4GOPS/s。为激活存储分配了32kB的资源,为参数存储分配了32kB的资源,为microcode缓冲区分配了32kB的资源,为寄存器文件分配了128kB的资源。这些片上缓冲区决不足以为单层ResNet,提供足够的片上存储,无法对有效的内存重用和延迟隐藏,进行案例研究。
使用C Runtime API为VDLA构建了一个驱动程序库,该API构造指令,推送到目标加速器执行。代码生成算法将加速器程序转换为一系列调用,转换为Runtime API。添加专门的加速器后端,需要∼Python中的2k LoC。
端到端ResNet评估。使用TVM在PYNQ平台上,生成ResNet推理内核,将尽可能多的层卸载到VDLA。
生成仅CPU和CPU+FPGA实现的调度。由于卷积深度较低,第一个ResNet卷积层,无法在FPGA上有效卸载,而是在CPU上计算。然而,ResNet中的所有其它卷积层,都适合于高效的floading。由于VDLA不支持支持这些操作,因此CPU上执行了诸如剩余层和激活类的操作。
Figure 21: We offlfloaded convolutions in the ResNet workload to an FPGA-based accelerator. The grayed-out bars correspond to layers that could not be accelerated by the FPGA and therefore had to run on the CPU. The FPGA provided a 40x acceleration on offlfloaded convolution layers over the Cortex A9.
图21将ResNet推理时间分解为仅CPU执行和CPU+FPGA执行。大部分计算都花费在卷积层上,这些卷积层可以卸载到VDLA。对于这些卷积层,实现的加速比为40×。不幸的是,由于阿姆达尔定律,FPGA加速系统的整体性能,受到必须在CPU上执行的部分工作负载的制约。扩展VDLA设计,支持这些其它算子,将有助于进一步降低成本。
这个基于FPGA的实验,展示了TVM适应新体系结构和所暴露的硬件本质的能力。
7.相关工作
深度学习框架为用户提供了方便的界面,表达DL工作负载,轻松部署到不同的硬件后端。虽然现有框架目前依赖于供应商特定的tensor算子库,执行工作负载,但可以利用TVM的堆栈为大量硬件设备,生成优化的代码。
高级计算图DSL是表示和执行高级优化的典型方式。Tensorflow的XLA和最近推出的DLVM属于这一类。这些工作中计算图的表示是相似的,本文使用了高级计算图DSL。虽然图级表示非常适合高级优化,但级别太高,无法在一组不同的硬件后端下优化张量算子。以前的工作依赖于特定的降低规则,直接生成低级LLVM,或者求助于供应商定制的库。这些方法需要对每个硬件后端和变型算子组合,进行大量工程设计。
Halide引入了分离计算和调度的思想。采用Halide的思想,在编译器中重用现有的有用调度原语。
张量算子调度与GPU DSL和基于多面体的循环变换的其它工作有关。TACO介绍了一种在CPU上生成稀疏张量算子的通用方法。Weld是用于数据处理任务的DSL。特别关注解决GPU和专用加速器的DL工作负载的新调度挑战。新原语可能被这些工作中的优化管道所采用。
ATLAS和FFTW等高性能库,使用自动调优获得最佳性能。张量理解应用黑盒自动调谐和多面体优化CUDA内核。OpenTuner和现有的超参数优化算法,采用域无关搜索。预定义的成本模型,用于自动调度Halid中的图像处理管道。TVM的ML模型,使用有效的领域感知成本模型,该模型考虑了项目结构。
基于分布式的调度优化器,可以扩展到更大的搜索空间,可以在大量受支持的后端上,找到最先进的内核。提供了一个端到端堆栈,可以直接从DL框架中获取描述,与图形级堆栈一起进行联合优化。
尽管用于深度学习的加速器越来越流行,但如何有效地针对这些设备,构建编译堆栈仍不清楚。评估中使用的VDLA设计,提供了一种总结类TPU加速器特性的通用方法,提供了一个关于如何为加速器编译代码的具体案例研究。
可能有利于将深度学习编译为FPGA的现有系统。本文提供了一个通用的解决方案,通过张量化和编译器驱动的延迟隐藏,有效定位加速器。
8.结论
提出了一个端到端编译堆栈,解决跨不同硬件后端的深度学习的基本优化挑战。系统包括自动端到端优化,这是从历史上看,这是一项劳动密集型和高度专业化的任务。
希望这项工作将鼓励对端到端编译方法的进一步研究,为DL系统软硬件协同设计技术打开新的机会。
参考文献:
TVM An Automated End-to-End Optimizing Compiler