m自定义融合算子替换优化调优案例-进阶调优-性能调优案例-性能调优-PyTorch 网络模型迁移和训练-模型开发(PyTorch)-CANN商用版6.3.RC2开发文档-昇腾社区自定义融合算子替换优化调优案例 问题背景 当前部分算子接口已经进行了NPU亲和优化,并提升了性能。将算子替换为高性能的NPU亲和自定义算子,可以优化性能。本调优案例以已经适配NPU的EfficientNet模型为例,介绍此性能调优方法。 总体思路 将已经进行了NPU亲和优化的算子替换为NPU自定义算子。NPU自定义算子信息可参考《支持Caffe&TensorFlow&ONNX&amhttps://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模型,指导模拟退火算法寻找最优调度配置。