TVM是由华盛顿大学在读博士陈天奇等人提出的深度学习自动代码生成方法，去年8月机器之心曾对其进行过简要介绍。该技术能自动为大多数计算硬件生成可部署优化代码，其性能可与当前最优的供应商提供的优化计算库相比，且可以适应新型专用加速器后端。近日，这项研究的论文《TVM:End-to-EndOptimizationStackforDeepLearning》终于完成，内容包含新方法的介绍与讨论，以及TVM在英伟达、AMD的GPU、树莓派及一些FPGA上的性能评估。
显而易见，以现有的点到点方式实现不同深度学习框架对所有种类的硬件进行后端支持是不现实的。我们的最终目标是让深度学习负载可以轻松部署到所有硬件种类中，其中不仅包括GPU、FPGA和ASIC（如谷歌TPU），也包括嵌入式设备，这些硬件的内存组织与计算能力存在着显着的差异（如图1所示）。考虑到这种需求的复杂性，开发一种能够将深度学习高级程序降低为适应任何硬件后端的低级优化代码的优化框架是较好的方法。
目前的深度学习框架依赖于计算图的中间表示来实现优化，如自动微分和动态内存管理[3,7,4]。然而，图级别的优化通常过于高级，无法有效处理硬件后端算子级别的转换。另一方面，目前深度学习框架的算子级别库通常过于僵化，难以轻松移植到不同硬件设备上。为了解决这些问题，我们需要一个可实现从计算图到算子级别的优化，为各种硬件后端带来强大性能的编译器框架。
图1：CPU、GPU与类TPU加速器需要不同的片上存储架构和计算基元。在生成优化代码时我们必须考虑这一问题。
深度学习的优化编译器需要同时展示高级别与低级别的优化，在论文中，研究人员总结了在计算图级别与张量算子级别上的四大基本挑战：
高级数据流复写：不同的硬件设备可能具有截然不同的内存层次结构，因此，融合算子与优化数据布局的策略对于优化内存访问至关重要。
跨线程内存复用：现代GPU与专用加速器的内存可被多个计算核心共享，传统的无共享嵌套并行模式已不再是最优方法。为优化内核，在共享内存负载上的线程合作很有必要。
张量计算内部函数：的硬件带来了超越向量运算的新指令集，如TPU中的GEMM算子和英伟达Volta架构中的TensorCore。因此在调度过程中，我们必须将计算分解为张量算术内部函数，而非标量或向量代码。
延迟隐藏（LatencyHiding）：尽管在现代CPU与GPU上，同时拥有多线程和自动缓存管理的传统架构隐藏了延迟问题，但专用的加速器设计通常使用精简控制与分流，这为编译器堆栈的调度带来了复杂性。所以，调度仍需仔细，以隐藏内存访问延迟。
TVM：一个端到端优化堆栈（见图2），该端到端优化编译器堆栈可降低和调整深度学习工作负载，以适应多种硬件后端。TVM的设计目的是分离算法描述、调度和硬件接口。该原则受到Halide[22]的计算／调度分离思想的启发，而且通过将调度与目标硬件内部函数分开而进行了扩展。这一额外分离使支持新型专用加速器及其对应新型内部函数成为可能。TVM具备两个优化层：计算图优化层，用于解决第一个调度挑战；具备新型调度基元的张量优化层，以解决剩余的三个挑战。通过结合这两种优化层，TVM从大部分深度学习框架中获取模型描述，执行高级和低级优化，生成特定硬件的后端优化代码，如树莓派、GPU和基于FPGA的专用加速器。该论文做出了以下贡献：
我们构建了一个端到端的编译优化堆栈，允许将高级框架（如Caffe、MXNet、PyTorch、Caffe2、CNTK）专用的深度学习工作负载部署到多种硬件后端上（包括CPU、GPU和基于FPGA的加速器）。
我们发现了提供深度学习工作负载在不同硬件后端中的性能可移植性的主要优化挑战，并引入新型调度基元（scheduleprimitive）以利用跨线程内存重用、新型硬件内部函数和延迟隐藏。
图3：两层卷积神经网络的计算图示例。图中每个节点表示一次运算，它消耗一或多个张量，并生成一或多个张量。张量运算可以通过属性进行参数化，以配置其行为（如padding或stride）。
摘要：可扩展框架，如TensorFlow、MXNet、Caffe和PyTorch是目前深度学习领域中最流行和易用的框架。但是，这些框架只对窄范围的服务器级GPU进行优化，要把工作负载部署到其他平台，如手机、嵌入式设备和专用加速器（如FPGA、ASIC），则需要大量手动工作。我们提出了TVM，一个端到端的优化堆栈，具备图形级和算子级的优化，以为多种硬件后端提供深度学习工作负载的性能可移植性。我们讨论了TVM所解决的深度学习优化挑战：高级算子融合（operatorfusion）、多线程低级内存重用、任意硬件基元的映射，以及内存延迟隐藏。实验结果证明TVM在多个硬件后端中的性能可与适应低功耗CPU和服务器级GPU的当前最优库相比。我们还通过针对基于FPGA的通用深度学习加速器的实验，展示了TVM对新型硬件加速器的适应能力。该编译器基础架构已开源。
刚刚，图灵奖授予“深度学习三巨头”！
深度学习的本质是什么？