TVM框架

m​​​​​​​自定义融合算子替换优化调优案例-进阶调优-性能调优案例-性能调优-PyTorch 网络模型迁移和训练-模型开发(PyTorch)-CANN商用版6.3.RC2开发文档-昇腾社区自定义融合算子替换优化调优案例 问题背景 当前部分算子接口已经进行了NPU亲和优化,并提升了性能。将算子替换为高性能的NPU亲和自定义算子,可以优化性能。本调优案例以已经适配NPU的EfficientNet模型为例,介绍此性能调优方法。 总体思路 将已经进行了NPU亲和优化的算子替换为NPU自定义算子。NPU自定义算子信息可参考《支持Caffe&TensorFlow&ONNX&amicon-default.png?t=N7T8https://www.hiascend.com/document/detail/zh/canncommercial/63RC2/modeldevpt/ptmigr/ptmigr_0083.html

上面这玩意,找个机会看一下优化方法

1 Introduction

Models From Frameworks:前端

Unified IR(统一的中间表示):一种低级别的计算图表示,可以表示各种算子和操作。包括Relay和TIR,前者是图级别的IR,后者用于表示具体的计算细节和硬件感知的优化。

Multiple Backend And Mininmal Runtime:

支持的前端:onnx、pytorch、tensorflow

支持的后端:CUDA、OpenCL、NVLL

编译栈

(忘了,画的图传不出去,白画了=-=)

  • Model from Frameworks: 从PyTorch、MXNet等框架导出的模型
  • IR Module(Relay): TVM的图级别IR,数据结构为Relay Expression构成的Relay AST,查看源码可以发现,relay.Function实际上是relay.Expr的一种子类,其功能是为Relay Pass(遍历Relay AST的手段)提供一个入口点,故而官网中也把Relay IR称为"End to end function"
  • IR Module(TIR): TVM的Tensor级别IR,仍然以AST的形式组织Expr,但包含了各算子(对应网络层)的具体调度细节(循环嵌套、并行、指令集等),这一层IR由一系列的tir.PrimFunc组成,此处的PrimFunc不再是访问整个AST的“入口点”,而是对应神经网络的一个层或融合层(如Conv+BN+Activation)的具体计算调度过程
  • Runtime Module: TVM编译栈的最底层IR,直接对接Runtime在目标设备上运行

流程:使用Relay将Model文件转换成IR,随后进行优化计算,如算子融合、剪枝、转换、量化等。

代码调度与计算分离。提供从前端深度学习框架到裸机硬件的端到端编译的pipeline(管道)。

图比较老,但是大体流程不变

2 代码阅读

图摆这里,后面看

3 特色

3.1 算子计算和调度过程定义分离

计算:定义计算过程与结果;

调度:细化过程的计算细节。

3.2 AutoTVM

自动搜索当前硬件下最优调度配置。为每个Relay子函数定义一系列调度原语,在海量配置组合中找到最优的调度配置。

怎么找最优配置?

无法遍历。用XGBoost模型,指导模拟退火算法寻找最优调度配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值