[RDK X5] 算子支持

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 的问题,目前社区尚未看到明确的最终解决方案,但可以提供以下排查路径和建议:


:white_check_mark: 核心结论

该错误通常是因为 ONNX 模型中使用了 LayerNormalization 算子,但该算子在 opset 11 中尚未被完全支持或版本转换失败。RDK X5 工具链对算子的支持有特定要求,建议按以下步骤处理:


:wrench: 解决步骤

:one: 确认算子支持列表

首先查阅官方支持的算子列表,确认 LayerNormalization 在 RDK X5 工具链中的支持情况:

:two: 尝试升级 ONNX opset 版本

LayerNormalizationopset 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"],
)

:three: 替换或融合算子

如果无法升级 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
)

:four: 使用 ONNX 简化器

导出后使用 onnx-simplifier 尝试简化模型,可能自动处理版本兼容问题:

pip install onnx-simplifier
python -m onnxsim model.onnx model_simplified.onnx

:five: 检查工具链版本

确保您使用的 天工开物(OpenExplorer)工具链 是最新版本,旧版本可能对某些算子支持不完善:

cat /etc/version  # 查看板端版本
hb_mapper --version  # 查看工具链版本

:pushpin: 建议后续操作


如您方便,可补充以下信息以便更精准定位:

  1. 使用的深度学习框架及版本(PyTorch/TensorFlow/其他)
  2. 导出 ONNX 的具体代码
  3. 天工开物工具链版本
  4. 模型中 LayerNormalization 的来源(原生/自定义/第三方库)

我们会持续跟进此问题,有进展会同步更新。