TVM学习笔记(一)初步了解

TVM官网:http://tvm.apache.org/

文档:https://tvm.apache.org/docs/index.html

源码:https://github.com/apache/tvm/ 加速镜像:https://hub.fastgit.org/apache/tvm/

TVM是一个开源的机器学习编译框架,用于在CPU、GPU、FPGA等设备上进行加速优化,使其在机器学习模型在后端设备上更加高效的运行。


TVM系统概述

TVM具有以下两个特点:

1、将深度学习模型编译为最小可部署模型(minimum deployable modules)
2、自动生成和优化模型,使得模型在更多后端设备具有更好的性能。

其项目愿景是构建一个可用的(accessible)、可扩展的(extensible)和自动化(automated)的开源框架,为任何硬件平台优化机器学习模型。以此缩小以生产力为导向的深度学习框架和以性能和效率为导向的硬件后端之间的差距。

TVM及模型优化概述[1]

TVM流程

① Import the model from a framework likeTensorflow,Pytorch, or Onnx.

TVM可以从其他框架导入机器学习模型,但不同框架的模型支持程度不一致,如果模型导入时遇到问题,可将模型转换为ONNX模型。

② Translate to Relay, TVM's high-level model language

“Relay”是一种函数式语言和神经网络的中间表示。其支持如下:1、Traditional data flow-style representations;2、Functional-style scoping, let-binding which makes it a fully featured differentiable language;3、Ability to allow the user to mix the two programming styles 。Relay使用了图级优化过程来优化模型

③ Lower toTensor Expression(TE) representation

“lowing”是指高级(high-level)表示转化为低级(low-level)表示。经过高级优化,Relay 通过FuseOps 将模型划分为许多小子图(small subgraphs),并将这些子图转换为TE表示。Tensor Expression(TE) 是一种特定领域的语言,用于描述张量计算。TE同样提供许多调度原语用于指定低级循环优化,如:分块、向量化、平行化、展开和融合等。为了帮助将Relay表示转换为TE表示,TVM中包括了Tensor Operator Inventory (TOPI),其中预定义一些常用的张量算子模板(如:conv2d,transpose)。

④ Search for the best schedule using the auto-tuning module AutoTVM or AutoScheduler.

“schedule”具体指使用TE表示的算子或子图的低级循环优化。自动调优模块搜索最佳优化并将其与未经优化的模型(cost model)进行性能测算。在TVM里有 AutoTVM 和 AutoScheduler 两个自动调优模块。

⑤ Choose the optimal configurations for model compilation.

经过模型调优,自动调优模型得到调优记录并以JSON形式保存,在这一步中,将会对每个子图选择最佳调优结果。

⑥ Lower to Tensor Intermediate Representation (TIR), TVM's low-level intermediate representation.

经过上一步获取的最佳调优结果,每一个TE子图继续划分为TIR,并继续更低级的优化过程。对于TIR的优化降低到硬件平台的目标编译器,这是生成可部署到生产环境中的代码的最后阶段。TVM支持的编译器后端:LLVM、NVCC 等。

⑦ Compile down to machine code.

在整个过程的最后阶段,TVM可以将模型编译为可链接的模块,并利用TVM运行时提供的C接口动态的加载模型。TVM亦可将运行时与模型捆绑打包为单 个部署包完成部署。

从TVM的整体来看,Relay使用一些算子描述计算过程,在算子中则用TE表示输入和输出张量。


  1. An Overview of TVM and Model Optimization https://tvm.apache.org/docs/tutorials/get_started/introduction.html#sphx-glr-tutorials-get-started-introduction-py ↩

你可能感兴趣的:(TVM学习笔记(一)初步了解)