stable diffusion 量化学习笔记
一、一些tensorRT背景及使用介绍
1)深度学习介绍
- 简单学习介绍量化背景
补充
1)tensorFlow python版本其实是调用的TensorFlow C的接口
2)libtorch其实是pytorch的C++版本
3)cublas是实现矩阵相乘的功能
4)cudnn主要实现dnn上的一些算子功能,例如卷积等
5)不同NVIDIA显卡架构间不兼容,同代显卡基本是同架构
2)TensorRT优化策略介绍
- 优化策略
1、低精度优化 :int8 int16
2、Kernel自动调优
例如:cublas gemm多种实现:①不用shared memory ;②小矩阵相乘;③使用额外显存的策略
3、算子融合:例如:
relu+bias+1x1 conv =1x1 CBR
4、多流运行
5、显存优化
3)TensorRT基础使用流程
- 代码使用流程
4)dynamic shape 模式
- 背景
①TensorRT 6.0之后 explicit(显式)batch支持动态batchsize
②CV的图片基本都是固定大小,而NLP和speech语音很多都是不固定大小的 - 思路
1)build engine阶段设置:
①用createNetworkV2设置显示batchsize
②设置最大batchsize
③设置优化profile选项,选择最大、最常用、最小的数据维度(类似,15s\20s\30s的语音)
2)infer推理阶段
①每次推理设置输出的数据维度
②检查输入的数据维度是否符合需求
③开启推理
5)TensorRT模型转换
①onnx:一键解析pytorch转为onnx,不用像API那样一层一层构建onnx
②torch2trt:pytorch直接转为trt
③TensorFlow:谷歌出品,不用pytorch,tf直接转为trt(tf2tensorrt)
④Tencent Forward:支持pytorch\onnx\tf直接转为trt,接口简单
二、TensorRT转onnx模型
1)onnx介绍
-
onnx:表示深度学习模型的开放模式
-
备注:CPU上线首推ONNX-RUNTIME
-
onnx模型组成:Graph、Node、Tensor
Graph:注意opset版本参数
2)背景知识:lower概念
- 概念
用基础算子加、减、乘、除、fc等组合成一个模型不支持的、复杂的算子,成为lower,反之为upper(tensor合并算子就可以提高速度,拆分成这么多算子速度会下降)
3)TRT转换模型的主要重点
4)onnx-parser && onnx-graphsurgen
(1)onnx-parser:把onnx导出为二进制模型的工具
- 例子代码截图
- onnx-parser导出模型方式:
①python API
②trtexec
③polygraph - onnx-parser痛点
(备注:LSTM的算子没有tensorflow支持的全,基本只能靠裁剪)
(2)onnx-graphsurgeon:onnx模型的编辑器
- 传送门
传送门
5)实践:
(1)transformer模型优化:解决不支持的算子
(2)transformer模型优化:合并LayerNorm算子
6)polygraphy
六、实操
1)编译tensorRT开源代码运行SampleMNIST
2)英伟达TensorRT加速AI推理Hackthon2022-Transformer模型优化
原文地址:https://blog.csdn.net/weixin_43679037/article/details/145074730
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!