Android平台使用ONNXRuntime出现AssignNodesToEpsFromHashesImpl报错如何解决?
ONNXRuntime Android MaxPool算子内核缺失问题解决方案
AssignNodesToEpsFromHashesImpl Failed to find kernel def hash (8090321298879394920) in kernel registries for MaxPool(8) node with name 'layer3/pool_3/MaxPool'
该报错本质为当前ONNXRuntime运行环境缺少对应Opset版本、对应参数配置的MaxPool算子内核实现,可按以下步骤排查解决:
- 升级ONNXRuntime Android依赖版本
如果你是通过gradle官方源引入依赖,优先升级到最新稳定版即可覆盖绝大多数常用算子实现,依赖配置参考:
注意不要使用裁剪过的implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.16.3'onnxruntime-mobile包,除非你确认裁剪包包含了你需要的所有算子。 - 调整模型导出的Opset版本
报错中MaxPool(8)表示该节点使用的是ONNX Opset 8版本的MaxPool定义,如果你需要保留当前ONNXRuntime版本,可在导出ONNX模型时调整Opset版本到当前运行环境支持的范围。比如使用PyTorch导出模型时显式指定适配性更广的版本:
ONNXRuntime 1.7及以上版本均完整支持Opset 11版本的MaxPool算子。torch.onnx.export(model, input, "model.onnx", opset_version=11) - 验证执行提供者配置
如果你启用了NNAPI、GPU等非CPU执行提供者,可能存在对应后端不支持当前MaxPool参数配置的问题。可以先切换到默认CPU执行提供者测试是否能正常创建会话,如果CPU后端可以正常运行,再针对对应后端的算子支持列表调整模型配置或者运行参数。 - 检查自定义编译的算子裁剪规则
如果你使用的是自行编译的ONNXRuntime Android包,确认编译配置中没有将MaxPool算子从编译列表中移除,同时确认你开启了对应执行后端的算子编译开关。
内容的提问来源于stack exchange,提问作者소문주
相关产品推荐
相关产品推荐

