ONNX注意事项

本篇记录建议搭配 ONNX模型结构解析-CSDN博客 共同查阅

1.在onnx -> trt的转化过程中,会提示警告:

WARNING: onnx2trt_utils.cpp:374: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.

解决方法:该问题无法解决,且几乎不会影响推理结果。

在ONNX内部结构中,可以出现int64类型的数据可能在两个地方,一个是model.graph.initializer中,内部存储一些张量权重等数据,此处若出现int64数据,是可以手动修改为int32类型的;另外一个地方是model.graph.node中的attribute数据,该类数据的类型如果是整形或者整形数组,则对应的类型为INT和INTS,默认是int64类型,因此此处无法手动修改。

而在TensorRT中,暂不支持INT64类型的数据。

 2.若.onnx模型的输入或输出是int64类型,对于低版本的TensorRT,解析时可能自动转为int32类型,而高版本例如10.x,仍会保留int64的输出,因此,建议统一在生成PyTorch模型时,就把类型提前转为int32,避免后续不同版本的解析歧义。

3.更新中…

### 将注意力机制模型转换为ONNX格式的方法 将带有注意力机制的深度学习模型转换为ONNX格式是一项常见的需求,尤其是在部署阶段。以下是实现这一目标的关键步骤和技术要点。 #### 1. 准备工作 确保环境已安装必要的库工具,例如 `torch` 和 `onnx`。如果需要优化 ONNX 文件,则需额外安装 `onnx-simplifier` 工具[^1]。 通过命令行执行以下操作完成依赖项安装: ```bash pip install torch onnx onnxsim ``` #### 2. 转换过程中的注意事项PyTorch 中定义并训练好的注意力机制模型可以直接导出为 ONNX 格式,但在实际过程中需要注意一些细节: - **避免直接调用 `.size()` 返回值**:当涉及张量形状的操作时,应显式地将其转为 Python 的整数值再参与后续运算。例如,使用 `int(tensor.size(1))` 替代原始方法[^2]。 - **动态尺寸支持**:为了使生成的 ONNX 模型能够处理不同批次大小的数据输入,建议在 reshape 或 view 操作中仅固定必要维度,而让 batch 维度保持 `-1` 表示自动推断[^2]。 - **插值层配置**:如果有图像缩放功能(如 upsampling),推荐采用 scale factor 参数而非绝对 size 值设定目标分辨率。 - **Softmax 层调整**:某些情况下,PyTorch 默认行为可能引起兼容性问题。因此,在连接多个分支前务必确认 softmax 应用于正确轴向[^2]。 #### 3. 导出代码实例 假设有一个基于 Transformer 架构构建的标准自注意模块作为待迁移对象,其核心部分如下所示: ```python import torch from torch import nn class AttentionModel(nn.Module): def __init__(self, dim=768, num_heads=8): super().__init__() self.attention = nn.MultiheadAttention(embed_dim=dim, num_heads=num_heads) def forward(self, x): attn_output, _ = self.attention(x, x, x) return attn_output + x # Add residual connection # 初始化模型与虚拟数据 model = AttentionModel() dummy_input = torch.randn((1, 50, 768)) # 设置模型评估模式 model.eval() # 执行导出流程 torch.onnx.export( model, dummy_input, "attention_model.onnx", input_names=["input"], output_names=["output"], dynamic_axes={"input": {0: "batch_size"}, "output": {0: "batch_size"}}, opset_version=13 ) print("Exported to ONNX successfully.") ``` 此脚本展示了如何利用 `torch.onnx.export` 方法保存经过验证后的网络结构至文件系统,并允许指定变量名称以及启用动态批处理选项以便灵活适应多种场景下的推理请求[^3]。 #### 4. 后续优化措施 一旦成功创建初始版本之后,还可以借助第三方实用程序进一步精简不必要的组件从而提高效率。比如运行以下指令即可启动简化进程[^1]: ```bash onnxsim attention_model.onnx optimized_attention_model.onnx ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值