⚠️本项目是基于韩博的tensorrt_starter,增加了大量案例和注解
🥰代表一些知识点的简介,🚀代表实战案例,❗代表一些tips
WIP!!!
1.generate-onnx初步尝试:导出三个简单的onnx模型(两个输出头|动态shape)
2.export-onnx使用onnx-simplifier对算子进行简化,观察算子融合现象(Conv+BN+Act)
3.read-and-parse-onnx使用onnx提供的API一步步搭建onnx模型,解析onnx各个节点的信息(输入输出节点,shape,name…),这部分主要的参考链接:点我
4.export-unsupported-node学习如何导出不被支持的算子或自定义算子,给出了以下4种情况下的处理方式:
🥰当出现导出onnx不成功的时候,我们需要考虑的事情,难易度从低到高:
onnx-surgeon部分onnx-surgeon官方代码,学习如何使用onnx-surgeon,代码比较容易理解,也对部分代码进行了解读🥰onnx-surgeon更加方便的添加/修改onnx节点,更加方便的修改子图 ,更加方便的替换算子,底层一般是用的onnx.helper,但是给做了一些封装。
onnx_graph_surgeon(gs)中的IR会有以下三种结构:
Tensor有两种类型
Node:跟onnx中的NodeProto差不多
Graph:跟onnx中的GraphProto差不多
🥰gs帮助我们隐藏了很多信息 :node的属性以前使用AttributeProto保存, 但是gs中统一用dict来保存。gs可以方便我们把整个网络中的一些子图给“挖”出来,以此来分析细节 ,一般配合polygraphy使用,去寻找量化掉精度严重的子图。 gs中最重要的一个特点,在于我们可以使用gs来替换算子或者创建算子 ,这个会直接跟后面的TensorRT plugin绑定,实现算子的加速或者不兼容算子的实现。
7.onnxsurgeon使用onnx-surgeon替换LayerNormalization算子和min-max算子
6.export-onnx-from-oss将swin transformer导出为onnx
🥰导出了onnx不是重点,我们需要将这些onnx导出为TensorRT模型,并查看性能。我们有几种方式导出 :
⚠️本项目是基于韩博的tensorrt_starter,增加了大量案例和注解
🥰代表一些知识点的简介,🚀代表实战案例,❗代表一些tips
WIP!!!
1.generate-onnx初步尝试:导出三个简单的onnx模型(两个输出头|动态shape)
2.export-onnx使用onnx-simplifier对算子进行简化,观察算子融合现象(Conv+BN+Act)
3.read-and-parse-onnx使用onnx提供的API一步步搭建onnx模型,解析onnx各个节点的信息(输入输出节点,shape,name…),这部分主要的参考链接:点我
4.export-unsupported-node学习如何导出不被支持的算子或自定义算子,给出了以下4种情况下的处理方式:
🥰当出现导出onnx不成功的时候,我们需要考虑的事情,难易度从低到高:
onnx-surgeon部分onnx-surgeon官方代码,学习如何使用onnx-surgeon,代码比较容易理解,也对部分代码进行了解读🥰onnx-surgeon更加方便的添加/修改onnx节点,更加方便的修改子图 ,更加方便的替换算子,底层一般是用的onnx.helper,但是给做了一些封装。
onnx_graph_surgeon(gs)中的IR会有以下三种结构:
Tensor有两种类型
Node:跟onnx中的NodeProto差不多
Graph:跟onnx中的GraphProto差不多
🥰gs帮助我们隐藏了很多信息 :node的属性以前使用AttributeProto保存, 但是gs中统一用dict来保存。gs可以方便我们把整个网络中的一些子图给“挖”出来,以此来分析细节 ,一般配合polygraphy使用,去寻找量化掉精度严重的子图。 gs中最重要的一个特点,在于我们可以使用gs来替换算子或者创建算子 ,这个会直接跟后面的TensorRT plugin绑定,实现算子的加速或者不兼容算子的实现。
7.onnxsurgeon使用onnx-surgeon替换LayerNormalization算子和min-max算子
6.export-onnx-from-oss将swin transformer导出为onnx
🥰导出了onnx不是重点,我们需要将这些onnx导出为TensorRT模型,并查看性能。我们有几种方式导出 :