opset_version=11的onnx无法导出RuntimeError: /github/workspace/onnx/version_converter/adapters/no_previous_version.h:26: adapt: Assertion false failed: No Previous Version of LayerNormalization exists
您好,算子支持可以参考: 模型算子支持列表 | RDK DOC
你好,后续怎么处理呢
您好请问您解决这个问题了吗
您好,针对您遇到的 ONNX opset_version=11 导出失败,报错 No Previous Version of LayerNormalization exists 的问题,目前社区尚未看到明确的最终解决方案,但可以提供以下排查路径和建议:
核心结论
该错误通常是因为 ONNX 模型中使用了 LayerNormalization 算子,但该算子在 opset 11 中尚未被完全支持或版本转换失败。RDK X5 工具链对算子的支持有特定要求,建议按以下步骤处理:
解决步骤
确认算子支持列表
首先查阅官方支持的算子列表,确认 LayerNormalization 在 RDK X5 工具链中的支持情况:
尝试升级 ONNX opset 版本
LayerNormalization 在 opset 17+ 中才被正式标准化。如果您的模型框架(如 PyTorch/TensorFlow)支持,尝试导出为更高 opset 版本:
# PyTorch 示例
torch.onnx.export(
model,
dummy_input,
"model.onnx",
opset_version=17, # 尝试 17 或更高
do_constant_folding=True,
input_names=["input"],
output_names=["output"],
)
替换或融合算子
如果无法升级 opset,可尝试在导出前将 LayerNormalization 替换为等价的底层算子组合(如 Mean + Variance + Scale + Bias),或使用框架提供的融合选项:
# 某些框架支持自动融合
torch.onnx.export(
model,
dummy_input,
"model.onnx",
opset_version=11,
operator_export_type=torch.onnx.OperatorExportTypes.ONNX_ATEN_FALLBACK, # 尝试回退到 ATEN
)
使用 ONNX 简化器
导出后使用 onnx-simplifier 尝试简化模型,可能自动处理版本兼容问题:
pip install onnx-simplifier
python -m onnxsim model.onnx model_simplified.onnx
检查工具链版本
确保您使用的 天工开物(OpenExplorer)工具链 是最新版本,旧版本可能对某些算子支持不完善:
cat /etc/version # 查看板端版本
hb_mapper --version # 查看工具链版本
建议后续操作
- 如果上述方法无效,建议将您的 模型结构、导出代码、工具链版本 整理后发帖到社区,附上完整报错日志,便于进一步分析。
- 可参考类似案例:LN算子指定为int16量化、X5工具链采用opset11编译F.grid_sample时报错问题
如您方便,可补充以下信息以便更精准定位:
- 使用的深度学习框架及版本(PyTorch/TensorFlow/其他)
- 导出 ONNX 的具体代码
- 天工开物工具链版本
- 模型中
LayerNormalization的来源(原生/自定义/第三方库)
我们会持续跟进此问题,有进展会同步更新。