VTA:一个开放、可定制的深度学习加速堆栈


Thierry Moreau(VTA 架构师),陈天奇(TVM 堆栈),蒋子珩†(图编译),Luis Vega(云部署)

顾问:Luis Ceze,Carlos Guestrin,Arvind Krishnamurthy

华盛顿大学保罗·G·艾伦计算机科学与工程学院

硬件加速是实现普及和高效深度学习的关键。随着硬件加速器在数据中心和边缘设备中的出现,硬件专业化在深度学习系统堆栈中占据了重要地位。

我们很高兴地宣布推出通用张量加速器 (VTA,发音为 vita),这是一种开放、通用且可定制的深度学习加速器设计。VTA 是一种可编程加速器,它公开了类似 RISC 的编程抽象来描述张量级操作。我们设计 VTA 的目的是为了展示主流深度学习加速器最显著和最常见的特性,例如张量运算、DMA 加载/存储以及显式的计算/内存仲裁。

VTA 不仅仅是一个独立的加速器设计:它是一个端到端的解决方案,包括驱动程序、JIT 运行时以及基于 TVM 的优化编译器堆栈。当前版本包括一个行为硬件模拟器,以及在低成本 FPGA 硬件上部署 VTA 以进行快速原型设计的 инфраструктура。通过使用可定制的开源深度学习硬件加速器设计扩展 TVM 堆栈,我们公开了一个透明的端到端深度学习堆栈,从高级深度学习框架一直到实际的硬件设计和实现。这构成了一个真正的端到端、软硬件开源深度学习系统堆栈。

image

VTA 和 TVM 堆栈共同构成了端到端、以加速器为中心的深度学习系统的蓝图,它可以

  • 为硬件、编译器和系统研究人员提供一个开放的深度学习系统堆栈,以便整合优化和协同设计技术。
  • 降低机器学习从业者尝试需要专门硬件支持的新型网络架构、运算符和数据表示的门槛。

研究人员的用例场景

我们重点介绍 VTA 设计与完整的 TVM 软件堆栈相结合如何在硬件、编译器和深度学习研究领域实现新的机遇。

硬件设计师和计算机架构师

随着新的 ASIC 设计不断发布,在新型硬件之上提供完整且可用的软件堆栈对于在研究领域和商业上获得竞争优势至关重要。我们的 VTA 版本提供了一个为硬件加速器构建的参考 TVM 软件堆栈。我们希望赋能硬件设计师快速构建和部署优化的深度学习库,以便供 TensorFlow 或 PyTorch 等高级框架使用。软件支持对于执行全系统评估以了解硬件加速系统中的限制和性能瓶颈至关重要。通过使用 FPGA 作为硬件部署后端,我们为快速迭代硬件设计原型设计提供了一个完整的解决方案。最后,我们的愿景是看到 VTA 成长为硬件设计的集合,最终形成一个定制硬件加速器的开放生态系统。

image

此外,VTA 是首批硬件-软件可复现的 ACM 工件之一,它可以作为可复现深度学习架构研究的模板。VTA 工件可以使用 CK 部署,并在与 ASPLOS 同期举办的 ReQuEST 2018 上进行了展示。

优化编译器研究人员

已经提出了像 TVM 这样的新型中间表示和优化编译器,以更好地利用深度学习工作负载的特性。VTA 补充了 TVM,以提供以加速器为中心的优化过程和底层代码生成。我们的开源深度学习编译器堆栈还旨在效仿 LLVM 的成功,允许社区随着时间的推移改进以加速器为中心的编译器支持,尤其是在出现更多 VTA 硬件变体时。编译器堆栈的可扩展性,加上修改硬件后端架构和编程接口的能力,应该会在深度学习的软硬件协同设计中带来令人兴奋的机会。

深度学习研究人员

透明且可定制的软硬件堆栈使深度学习研究人员能够提出新型神经网络运算符和数据表示,同时能够对端到端系统上的这些优化进行完整评估。像二值化这样的技术目前仅限于 CPU 和 GPU 评估,除非投入大量的工程资源来生产可以评估该技术全部节能潜力的 FPGA 或 ASIC 设计。凭借易于部署的参考硬件堆栈,VTA 可以降低机器学习从业者(他们没有太多硬件设计背景)进行硬件定制的门槛。

技术细节

堆栈概述

VTA 深度学习加速器和 TVM 堆栈可以弥合以生产力为导向的深度学习框架与以性能为中心的硬件底层(例如 FPGA)之间的差距。

  • NNVM,图级优化器,提供了一个图级中间表示 (IR),用作不同深度学习框架之间的通用语言,以利用图级优化,例如运算符融合。NNVM IR 也用于指定数据布局和数据格式约束:例如,用于张量化的平铺和用于超低精度计算的位打包。
  • TVM,张量级优化器,建立在 Halide DSL 和调度原语之上,以提供一个优化编译器,该编译器能够为跨硬件后端的深度学习带来性能可移植性。TVM 带来了针对专用硬件加速器的新型调度原语,例如张量化,它将计算降低到专用的张量-张量硬件指令上。此外,它还提供调度原语和降低规则,允许显式内存管理,以最大限度地提高硬件加速器中的资源利用率。
  • VTA 运行时执行 VTA 二进制文件(指令流和微内核代码)的 JIT 编译,管理共享内存,并执行同步以将执行权交给 VTA。VTA 运行时提供了一个对 TVM 来说看起来通用的 API,以隐藏特定于平台的簿记任务的复杂性。它公开了一个 C++ API,TVM 模块可以调用它——这简化了未来包含其他硬件加速器设计的过程,而无需大幅修改上层 TVM 层。
  • VTA 的两级 ISA 提供了 (1) 高级 CISC ISA,用于描述可变延迟操作,例如 DMA 加载或深度学习运算符,以及 (2) 低级且固定延迟 RISC ISA,用于描述低级矩阵-矩阵运算。这种两级 ISA 既允许代码紧凑,又具有表现力。
  • 最后,VTA 的微架构提供了一个灵活的深度学习硬件设计规范,可以方便地编译到其他 FPGA 平台,并最终在长期内编译到 ASIC。

VTA 硬件设计概述

Vanilla 张量加速器 (VTA) 是一种通用的深度学习加速器,围绕 GEMM 核心构建,该核心以高计算吞吐量执行密集矩阵乘法。该设计灵感来自主流深度学习加速器,例如 Google 的 TPU 加速器。该设计采用了解耦的访问-执行模式,以隐藏内存访问延迟并最大限度地利用计算资源。在更广泛的范围内,VTA 可以作为深度学习加速器设计的模板,向编译器堆栈公开清晰的张量计算抽象。

image

上图概述了 VTA 硬件组织的高级视图。VTA 由四个模块组成,这些模块通过 FIFO 队列和单写/单读 SRAM 内存块相互通信,以实现任务级流水线并行性。计算模块使用其 GEMM 核心执行密集线性代数计算,并使用其张量 ALU 执行通用计算。它在一个寄存器文件上运行,该文件不是存储标量值,而是存储秩为 1 或 2 的张量。微操作缓存存储底层代码,该代码指示一系列操作来改变寄存器文件。

VTA 硬件设计模板为用户提供了模块化,可以选择修改硬件数据类型、内存架构、GEMM 核心尺寸、硬件运算符和流水线阶段。向编译器堆栈公开 VTA 的多个变体有助于编译器的开发,因为我们可以测试 TVM 定位多种硬件加速器而不是单个设计的能力。

使用 VTA 模拟器和 Pynq FPGA 板进行 VTA 原型设计

VTA 版本允许用户通过两种方式试验硬件加速和以加速器为中心的编译器优化。第一种方法不需要特殊的硬件,是在 VTA 设计的行为模拟器上运行深度学习工作负载。此模拟器后端可供开发人员轻松使用。第二种方法依赖于现成的低成本 FPGA 开发板——Pynq 板,它公开了可重配置的 FPGA 结构和一个 ARM SoC。

image

VTA 版本在 Pynq 平台上提供了 VTA 硬件设计和 TVM 工作负载的简单编译和部署流程,借助 RPC 服务器接口。RPC 服务器处理 FPGA 重新配置任务和 TVM 模块调用卸载到 VTA 运行时。VTA 运行时系统在 Pynq 嵌入式系统的 ARM CPU 上运行,并动态生成 VTA 二进制文件以卸载到 FPGA 硬件。这个完整的解决方案允许在低成本 FPGA 上进行开箱即用的原型设计,并具有交互式且熟悉的 Python 环境,从而为用户隐藏了 FPGA 设计的大部分复杂性和难题。

对于熟悉硬件和 FPGA 的程序员,我们公开了以 HLS C 表示的 VTA 设计,并提供了构建在 Xilinx 工具链之上的脚本,以将该设计编译为 FPGA 比特流。我们目前正在构建一个 VTA 变体存储库,以便用户可以探索其深度学习工作负载的不同设计变体,而无需经历耗时的 FPGA 编译过程。

性能评估

VTA 仍处于开发的早期阶段,我们预计未来会有更多的性能改进和优化。目前,我们在低成本 Pynq 板上提供端到端性能评估,该板集成了过时的 28nm FPGA 结构。虽然该平台旨在用于原型设计(2012 年的 FPGA 无法与现代 ASIC 竞争),但我们正在将 VTA 移植到更新的高性能 FPGA 平台,这些平台将提供更具竞争力的性能。

我们正在进行更多实验,并将随着结果的获得发布新的结果。

ResNet-18 上的资源利用率

用于评估硬件高效使用的常用方法是屋顶线图:给定一个硬件设计,不同的工作负载如何有效地利用硬件计算和内存资源。下面的屋顶线图显示了在 ResNet-18 推理基准测试的不同卷积层上实现的吞吐量。每一层都有不同的算术强度,即计算与数据移动的比率。在左半部分,卷积层受带宽限制,而在右半部分,它们受计算限制。

image

设计硬件架构和编译器堆栈背后的目标是使每个工作负载尽可能接近目标硬件的屋顶线。屋顶线图显示了硬件和编译器协同工作以最大限度地利用可用硬件资源的效果。展示的技术是延迟隐藏,这需要在硬件级别进行显式依赖关系跟踪,编译器支持划分工作,在代码生成期间在指令流中显式插入依赖关系。结果是可用计算和内存资源的总体利用率更高。

端到端 ResNet-18 评估

image

拥有为 VTA 构建的完整编译器堆栈的一个好处是能够运行端到端工作负载。这在硬件加速的背景下非常引人注目,因为我们需要了解哪些性能瓶颈和阿姆达尔定律限制了获得更快性能的途径。上面的条形图显示了在 Pynq 板的 ARM Cortex A9 SoC 上,将 ResNet 卷积层卸载到基于 FPGA 的 VTA 设计和不卸载的情况下,推理性能。乍一看,很明显 VTA 实现了其目标,减少了在 CPU 上执行卷积所需的时间(深蓝色)。然而,很明显,其他运算符需要卸载,因为它们现在构成了新的瓶颈。这种高层次的可见性对于想要了解系统如何影响端到端性能的系统设计人员至关重要。

开源工作

VTA 是华盛顿大学保罗·G·艾伦计算机科学与工程学院的一项研究工作,现已集成到 TVM 堆栈中。TVM 项目遵循 Apache 开源模式,旨在创建一个社区维护的项目。我们非常欢迎您加入我们并领导这项工作。

致谢

VTA 是 SAML 小组的一个研究项目,该小组得到了 DARPA 和美国国家科学基金会的慷慨资助,以及华为、甲骨文、英特尔和匿名捐赠者的捐赠。

开始吧!