神经网络编译器TVM,autoTVM自动代码优化及c++部署cuda实践

内容简介:

  本文介绍了一种能够让你的神经网络跑的飞起的技术方法,截止目前已经有一定知名度,把这个方法学会,应该能有一定的收获.特别是在模型提速层面有不小的提速,同时,值得注意的时,这种autotvm是一种神经网络推理代码的搜索,其本质是自动生成了推理的代码,并且帮助你编译成对应的平台,更加需要提一嘴的事情是,autotvm没有改变数学层面的推理部分表达,该是wx+b 亦或者是激活函数部分是没有变化的,不会像比如量化的那种优化方法会造成一定的精度损失.所以这个方法值得尝试!下面是本个教程的所有代码仓库,如果在玩这个工程的时候遇到什么问题,有相关问题搜索知识星球号:1453755 【CV老司机】加入星球提问。扫码也可加入.

也可以搜索关注微信公众号: CV老司机

相关代码和详细资源或者相关问题,可联系牛先生小猪wx号: jishudashou

github仓库:https://github.com/leoluopy/autotvm_tutorial

部署优化常见方案:

  目前市面上,关于神经网络的提速方案,可谓八仙过海各显神通,各家都有自己的亲儿子,比如英伟达搞了tensorRT ; 然后facebook依托着pytorch也做了 libtorch c++ 的相关部署方案; 同时也有谷歌在他原有的tensorflow的生态做了tensorflow c++以及tensorflow lite相关的方案,这些方案各有优劣,各有长短,不过他们有一个共有的特点,那就是推理代码,推理框架是通用的,你不同的神经网络模型,都是加载到这个通用推理框架来做推理,没有做针对你专门的神经网络来做专门的比如cache命中,中间缓存,推理中间层融合等,当然通用的优化他们都做了.只是一些专用的优化,比如针对resNet有效但是对于,centerNet无效的之类优化就没有做.当然为了框架的通用性,也没法做.

  现在我们就介绍今天的主角,为每一个网络,自动优化,自动搜索最优的推理代码.让计算机去帮你搜索最优的代码,并帮你编译成对应平台的库.

什么是TVM:

TVM工作主要流程

  为了介绍今天我们最重要的内容,我们需要先介绍一下TVM.

  TVM是一款开源项目,主要由华盛顿大学的SAMPL组贡献开发.其实是一个神经网络的编译框架,如上图所示,他的输入输出,还有中间的结果一目了然,这张图在官网的介绍中可以看到.

  首先TVM有一个基础认识,也即是每个神经网络模型的运算其实分为两部分:

  一部分是compute:也即是数学层面的东西,他就是我们平时说得f(wx+b)这样的东西.在整个TVM神经网络编译过程中没有发生变化,也就是说精度不会损失,这也是他的优势;

  另一部分是schedule: 也即是代码层面对这些数学逻辑实现的调度层面的东西,比如我的for循环如何设计,中间变量如何存储,cache命中率如何,寄存器访问如何设置.是否有两步合并做一步的更高效的操作.这些部分的实现,对于我们上面说的tensorRT,tensorflow之类他有统一的实现,不会对每个神经网络做定制.而这部分对于推理时间的影响十分的大.

  输入是已经训练好的神经网络模型,比如onnx,tensorflow,pytorch,之类.随后通过TVM这个框架自定义的算子和计算规则表达方式,把整个模型表达为relay.也就是计算原语.

得到计算原语之后,tvm框架实现了一个算子仓库,算子仓库根据计算原语,重新组装compute和schedule。形成最终的推理代码。这一步也就是神经网络的编译过程。

上文说的编译过程,可以使用tvm默认的schedule方式,也就是默认编译方式,也可以使用自动重新搜索的方式,也就是autoTVM,一般而已如果模型目前的推理时间还比较长,比如10ms的时候,使用autotvm的方法往往能取得还不错的效果。

如上面网络架构所示,tvm编译完成后,会生成目标平台的代码,比如cuda,树莓派,苹果手机,安卓手机。生成的代码就是咱们需要的推理代码啦,平台为了我们方便的使用,同时又帮我们编译成的so库,或者dll库。不同平台动态库类型不一样。

目前TVM的架构是:

  1)最高层级支持主流的深度学习前端框架,包括TensorFlow,MXNet,Pytorch等。

  2)Relay IR支持可微分,该层级进行图融合,数据重排等图优化操作。

  3)基于tensor张量化计算图,并根据后端进行硬件原语级优化,autoTVM根据优化目标探索搜索空间,找到最优解。

  4)后端支持ARM、CUDA/Metal/OpenCL、加速器VTA(Versatile Tensor Accelerator)

安装传送门:http://tvm.apache.org/docs/install/index.html

官方简介传送门:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值