先看现象。导出模型时报 Unsupported operator aten::scaled_dot_product_attention,导出直接中断。

真正麻烦的地方在于,几个原因的现象几乎一样。模型用了导出器不支持的融合算子。另一种情况是算子集版本过低。

另外,自定义层没有注册符号实现。

少数情况下是动态轴设置与模型输入不匹配。

提高算子集版本

torch.onnx.export(model, dummy, 'm.onnx', opset_version=17)

再往下切到较新的导出器实现

torch.onnx.export(model, dummy, 'm.onnx', dynamo=True)

接着关闭融合注意力改用等价实现

python -c "print('disable sdpa in config')"

指定动态轴后再导出

torch.onnx.export(model, dummy, 'm.onnx', dynamic_axes={'input_ids':{1:'seq'}})

同一份数据我导出了两份,一份留底,一份拿来试。

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

改完先别撤,确认这几项。导出成功并生成 onnx 文件,用推理引擎加载后输出与原始模型接近,延迟也符合预期。

导出成功率与算子集版本关系很大,遇到不支持先升版本,再考虑改模型实现,改动越小越好维护。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189