[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(4)

[Onnx简化库深度剖析] OnnxSimplifier和OnnxOptimizer解读-(4)

简介

现在主要用于通过实操进行onnx简化库的每种pass的特性和效果。因为Pass实在太多,因此这里挑了一些效果显著的Pass进行呈现。

左边的是原始模型,右边的是特定Pass优化后的模型

OnnxOptimizer各Pass的实操和特性说明

adjust_add

  • 前:常量输入是A,动态输入是B
  • 后:常量输入是B, 动态输入是A
  • 特性:把动态输入变成Add算子的第一个input
    在这里插入图片描述在这里插入图片描述

eliminate_common_subexpression

  • 前:含有两个公共的表达式Y(Mul(X,Sigmoid(X)))
  • 后:合并只有一个
  • 特性:合并公共的结构

在这里插入图片描述在这里插入图片描述

eliminate_if_with_const_cond

  • 前:含有If算子,存在子图
  • 后:没有If算子,子图被暴露
  • 特性:cond确定的If算子被去除

请添加图片描述请添加图片描述

eliminate_nop_cast

  • 前:有一个Cast算子,to=float32,input_dtype=float32
  • 后:没有Cast算子
  • 特性:to=input_dtype的Cast被消除

请添加图片描述在这里插入图片描述

eliminate_nop_flatten

  • 前:存在Flatten算子
  • 后:没有Flatten算子
  • 特性:对shape不起作用的Flatten算子被消除

在这里插入图片描述在这里插入图片描述

eliminate_nop_monotone_argmax

  • 前:存在Y=ArgMax(Exp(X))这样的结构
  • 后:只有Y=ArgMax(X)
  • 特性:类似于Exp,只要是输出/输入是正相关的激活函数接入ArgMax算子后,该激活函数可以被消除而不影响结果

在这里插入图片描述在这里插入图片描述

eliminate_nop_with_unit

  • 前:存在很多乘1.0、加0.0等无效操作
  • 后:去除了很多无效的操作
  • 特性:消除掉同0并的And、同1乘的Mul、同0或的Or、同0加的Add、减0的Sub、除1的Div、方1的Pow、 无效的Concat

在这里插入图片描述在这里插入图片描述

eliminate_shape_gather

  • 前:Y=Gather(Shape(X))
  • 后:Y=2
  • 特性:X的Shape已知,那么Y就是已知的。

在这里插入图片描述在这里插入图片描述

fuse_add_bias_into_conv

  • 前:B=Add(Conv2d(X,Y), A)
  • 后:B=Conv2d(X,Y,A)
  • 特性:把Add常量融合进Conv2d中

在这里插入图片描述在这里插入图片描述

fuse_bn_into_conv

  • 前:Y=BN(Conv2d(X))
  • 后:Y=Conv2d(X)
  • 特性:把BN融合进Conv2d中,主要因为重构了Conv2d的weight和bias

在这里插入图片描述在这里插入图片描述

fuse_consecutive_concats

  • 前:存在很多axes一致的连续concat操作
  • 后:只有一个concat
  • 特性:合并很多axes一致的连续concat操作为一个

在这里插入图片描述在这里插入图片描述

fuse_consecutive_log_softmax

  • 前:Z=log(softmax(X))
  • 后:X=logsoftmax(X)
  • 特性:合并算子成为一个算子

在这里插入图片描述在这里插入图片描述

fuse_qkv

  • 前:普通的产生qkv的结构,拥有三个矩阵乘
  • 后:合并为一个矩阵乘,后续用split分开
  • 特性:对qkv结构特定优化

在这里插入图片描述在这里插入图片描述

fuse_transpose_into_gemm

  • 前:存在transpose执行矩阵转置操作
  • 后:转置操作被gemm的transA/B属性替代
  • 特性:消除transpose算子

在这里插入图片描述在这里插入图片描述

总结

结束了,已经搞定了onnx官方的简化库的基本细节了。后面再续其他有趣的东东。

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 00:50:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 00:50:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 00:50:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 00:50:04       18 阅读

热门阅读

  1. 4 微信小程序

    2024-01-13 00:50:04       33 阅读
  2. 深入理解区间合并:让数字之间的故事更加有序

    2024-01-13 00:50:04       34 阅读
  3. linux系统nginx工具的一些应用

    2024-01-13 00:50:04       34 阅读
  4. C# 快速模指数运算 快速求余运算

    2024-01-13 00:50:04       34 阅读
  5. Linux中关于文件权限详解

    2024-01-13 00:50:04       37 阅读
  6. checkpoint存的是参数还是模型?

    2024-01-13 00:50:04       37 阅读
  7. 面试 React 框架八股文十问十答第六期

    2024-01-13 00:50:04       31 阅读
  8. e.printStackTrace()不会打印到日志文件中

    2024-01-13 00:50:04       35 阅读
  9. Leetcod面试经典150题刷题记录 —— 数学篇

    2024-01-13 00:50:04       22 阅读