TVM-初识TVM

TVM简介

随着深度学习的发展,深度学习的能力可以说是越来越强大,识别率节节攀升,与此同时,深度学习框架也变得越来越多,目前比较主流的深度学习框架包括:Pytorch、TensorFlow、MxNet、Caffe、Keras等。
一般进行深度学习任务主要包括两部分,一是训练出精度比较高的模型,然后将其部署到对应的目标机器上。
针对第一部分,自然我们可以使用各种深度学习框架,通过修改网络参数等,训练出精度比较满意的模型,一般情况下,在训练深度学习模型的时候,都会使用到GPU。
针对部署,这里的目标机包括服务器、手机、其他硬件设备等等。部署的模型自然是希望越快越好,所以硬件厂商一般会针对自己的硬件设备进行一定的优化,以使模型达到更高的效率,比如Nvidia的TensorRT。但是框架这么多,硬件平台这么多,并不是所有的硬件平台都像Nvidia提供了硬件加速库,而即使做了加速,要适应所有的深度学习训练框架,也是一件比较难的事情。
其实介绍了这么多总结起来就是两个问题:
1.在进行模型部署的时候,我们是否可以对不同框架训练的模型均生成统一的模型,解决硬件平台需要适配所有框架的问题?
2.在进行模型部署的时候,我们是否可以自动化的针对不同的硬件进行优化,进而得到更高效的模型?
TVM实际上就是在解决这两个问题,并且解决的还不错。

那么TVM是什么?

TVM is an open deep learning compiler stack for CPUs, GPUs, and specialized accelerators. It aims to close the gap between the productivity-focused deep learning frameworks, and the performance- or efficiency-oriented hardware backends.

TVM是一个开源的可面向多种硬件设备的深度学习编译器,它的作用在于打通模型框架、模型表现以及硬件设备的鸿沟,进而得到表现最好的可部署的深度学习模型,实现端到端的深度学习模型部署。

TVM做了哪些工作

针对第一个问题:
TVM将不同前端(深度学习框架)训练的模型,转换为统一的中间语言表示,如果想要详细理解这里,可以了解一下NNVM,NNVM是陈天奇团队开发的可以针对不同框架进行深度学习编译的框架,在TVM中,陈天奇团队进一步优化,实现了NNVM的第二代Relay,Relay是TVM中实现的一种高级IR,可以简单理解为另一种计算图表示。其在TVM所处的位置如下图所示,并且该部分实现了比如运算融合等操作,可以提升一部分模型效率。
在这里插入图片描述

针对第二个问题:
TVM设计了对不同的硬件后端,自动优化tensor操作,以达到加速的目的。该部分的实现,TVM使用机器学习的方法进行计算空间的最优化搜索,通过在目标硬件上跑大量trial,来获得该硬件上相关运算(例如卷积)的最优实现。详细介绍可以参考TVM主页以及论文:
在这里插入图片描述

参考资料:
TVM官网: https://tvm.ai/
TVM论文:arxiv: https://arxiv.org/abs/1802.04799
tensorRT加速参考文献:https://blog.csdn.net/xh_hit/article/details/79769599
Nvidia参考文献:https://devblogs.nvidia.com/production-deep-learning-nvidia-gpu-inference-engine/

猜你喜欢

转载自blog.csdn.net/qq_33287871/article/details/113096155