Brevitas导出QNN为ONNX部署FINN时报enable_onnx_checker参数错误
问题背景
- 基于Brevitas完成QNN(量化神经网络)模型训练,模型输入张量形状为
torch.Size([1, 3, 1024]) - 已成功导出
.pt格式模型,加载验证、混淆矩阵生成结果均符合预期,确认模型本身无逻辑问题 - 目标为将Brevitas训练的模型部署到FINN框架,尝试导出ONNX格式文件时触发报错
使用的导出代码如下:
from brevitas.export import FINNManager FINNManager.export(my_model, input_shape=(1, 3, 1024), export_path='myfinnmodel.onnx')
触发的报错信息:
torch.onnx.export(module, input_t, export_target, **kwargs) TypeError: export() got an unexpected keyword argument 'enable_onnx_checker'
根因分析
该报错由依赖版本不兼容导致,和模型本身逻辑无关:enable_onnx_checker是PyTorch 2.0及更早版本中torch.onnx.export接口支持的参数,在PyTorch 2.1之后的版本中该参数被官方移除。如果当前环境安装的Brevitas版本为0.8.x及更早版本,其内部FINNManager调用torch.onnx.export时仍然会传入这个已废弃的参数,就会触发上述参数不匹配的TypeError。
解决方法
- 方法一:版本对齐(推荐,适配FINN全部署流程)
卸载当前环境的PyTorch、Brevitas依赖,安装经过FINN官方验证的兼容版本组合:PyTorch 1.10.0 + Brevitas 0.7.1。该版本组合导出的ONNX模型算子完全匹配FINN的支持范围,不会出现后续编译、部署阶段的算子兼容问题,安装完成后直接运行原有导出代码即可正常生成可用的ONNX文件。 - 方法二:高版本PyTorch临时修复
如果不想降级现有PyTorch版本,可以找到本地Python环境中Brevitas安装目录下的brevitas/export/manager.py文件,定位到FINNManager类中调用torch.onnx.export的代码段,删除传入的enable_onnx_checker=True参数,保存文件后重新运行导出代码即可绕过该报错。注意该方法导出的ONNX可能存在opset版本、量化算子标识不匹配FINN要求的问题,若后续部署阶段遇到算子相关报错,仍需回退到方法一的版本组合处理。
内容的提问来源于stack exchange,提问作者MrFoxs
相关产品推荐
相关产品推荐

