文章目录
什么是TVM
本部分参考 “TVM等神经编译器概览:它是连接深度学习框架和硬件的桥梁” ,讲解通俗易懂
传统的编译器:LLVM(low level virtual machine)
LLVM通过模块分为前端,中端(优化)和后端三部分。每当出现新的编程语言,只需要开发相应的前端,将编程语言转换成LLVM的中间表示;类似地,出现新的硬件架构,只需要开发相应的后端,对接上LLVM的中间表示。
神经网络编译器
神经网络编译器:输入是深度学习训练框架训练出来的模型定义文件,输出是能够在不同硬件高效执行的代码。
- 最上层对接各个深度学习训练框架训练出来的算法模型(Tensorflow, Caffe, Pytorch, Mxnet等)。
- 图层级(High-level IR):神经网络的结构可以表示成计算图,图层级的操作则是对计算图进行一些和具体硬件和框架无关的操作,比如算子融合,内存分配优化,数据类型和数据维度的推导等。
- 算子层级(operator level/kernel level)算子层级主要是张量计算。为了实现这些计算在硬件上高效实现,发挥芯片的性能,通常硬件芯片配有专门优化的算子计算库,如Intel的MKL, Nvidia的CuDNN, TensorRT。这个层级需要支持每个硬件后端的算子实现。
- 各硬件后端:GPU, ARM CPU, X86 CPU, NPU等。
各类深度学习编译器,其实TVM(tensor virtual machine) 较为突出。
TVM(tensor virtual machine)
- 最高层级支持主流的深度学习前端框架,包括TensorFlow,MXNet,Pytorch等。
- Relay IR支持可微分,该层级进行图融合,数据重排等图优化操作。
- 基于tensor张量化计算图,并根据后端进行硬件原语级优化,autoTVM根据优化目标探索搜索空间,找到最优解。
- 后端支持ARM、CUDA/Metal/OpenCL、加速器VTA(Versatile Tensor Accelerator)。
TVM能做什么
- 帮助深度学习模型部署在一些常规编译器不支持的硬件上;
- TVM编译后的模型可以获得更快的推理速度
- software supprort
how to use TVM
常规的神经网络层有很多矩阵运算,每一个简单的矩阵乘/加背后都对应一套非常负责的手动设计的算子计算(比如上万行的tflite) 。