模型部署
模型部署是将训练好的模型部署到运行环境中进行推理的过程,
模型部署的过程中需要解决训练模型到推理模型的转换,
硬件资源对模型的限制,模型推理的时延、功耗、内存占用等指标对整个系统的影响以及模型的安全等一系列的问题
模型部署到运行环境以后,保护模型的安全
模型的数据结构
模型拓扑连接 以及算子原型定义
模型处理
模型压缩: 量化 模型稀疏 知识蒸馏
模型推理
模型的安全保护
静态保护和动态保护
训练格式
权重文件(.weights),配置文件(.cfg)
PyTorch (.pth/.pt): 这种格式是PyTorch的原生格式,主要用于保存和加载PyTorch模型
ONNX格式
weights权重文件转为onnx格式
ONNX (Open Neural Network Exchange)
tensorRT格式
将onnx格式转为tensorrt格式
需要parser onnx后,进行serialize生成trt
本质就是二进制的序列文件
tensorrt格式的权重有两种,一种是.trt,一种是.engine。
tensorRT
TensorRT是一个深度学习模型优化器和运行时,
主要用于加速模型的推理。TRT格式是为NVIDIA GPU优化的,并且经过了量化、层融合和其他优化
TensorRT 支持不同的数据格式。有两个方面需要考虑:
数据类型和布局
数据类型:
分别是FP32(32位浮点,或单精度),
FP16(16位浮点或半精度),INT32(32位整数表示),和 INT8(8 位表示)
TensorRT支持多种数据格式,包括NHWC8和NCHW
存储值的顺序。通常,batch 维度是最左边的维度,其他维度指的是每个数据项的方面,
例如图像中的C是通道, H是高度, W是宽度
HWC 的布局格式:图像存储为单个HxW矩阵,其值实际上是 C 元组,每个通道都有一个值;一个点(像素)的所有值都是连续存储的
CHW 的布局格式:图像分为HxW矩阵,每个通道一个,矩阵按顺序存储;通道的所有值都是连续存储的。
NHWC8 ( TensorFormat::kHWC8 )
NC/2HW2 ( TensorFormat::kCHW2 )
过程
部署流程分为 预处理阶段 和 推理阶段,具体如下:
1. 导出 深度学习 网络定义 和 权重参数
2. 解析 深度学习 网络定义 和 权重参数 parse ONNX
3. 根据 显卡算子 构造出最优执行计划
4. 将最优执行计划 序列化存储
5. 反序列化 最优执行计划
6. 进行推理
在 推理阶段,tensorrt 只关注 网络定义和权重参数,对于 输入和输出 需 另外导入
说明
1.解析onnx
A:解析对象为onnx文件:没有已经转好的trt或者已有的trt不适配,需要将onnx转为trt
已有的trt不适配,需要将onnx转为trt
parse onnx
serialize trt
保存trt文件
2.解析trt
B:解析对象为trt文件:已有trt,直接导入然后得到engine和context,使用
使用B的限制条件,以下环境需要一致
硬件环境必须一样,因为engine会根据硬件做优化,不能跨硬件平台
CUDA
cuDNN
tensorRT环境,不同版本tensorrt生成的engine不能够相互兼容
同平台同环境多次生成的engine可能不同
3.A,B两者最重要的中间产物都是parseTRT或者onnx得到的engine和context
参考
TensorRT入门指南(一)TensorRT简介 https://zhuanlan.zhihu.com/p/652641086
深度学习 之 模型部署【2】-TensorRT 入门 https://www.cnblogs.com/yanshw/p/16461169.html
模型的安全保护 https://openmlsys.github.io/chapter_model_deployment/model_security.html
标签:engine,AI,onnx,模型,格式,推理,trt
From: https://www.cnblogs.com/ytwang/p/18252942