{"record":{"id":"0ab7bc4e33599bcc","repo":"invoke-ai/InvokeAI","slug":"i-ve-had-issues-with-optimizer-in-recent-versions","errorCode":null,"errorMessage":"I've had issues with optimizer in recent versions of PyTorch / ONNX.Try onnxruntime optimization if this doesn't work.","messagePattern":"I've had issues with optimizer in recent versions of PyTorch / ONNX\\.Try onnxruntime optimization if this doesn't work\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py","lineNumber":71,"sourceCode":"        'eliminate_unused_initializer',\n        'extract_constant_to_initializer',\n        'fuse_add_bias_into_conv',\n        'fuse_bn_into_conv',\n        'fuse_consecutive_concats',\n        'fuse_consecutive_reduce_unsqueeze',\n        'fuse_consecutive_squeezes',\n        'fuse_consecutive_transposes',\n        #'fuse_matmul_add_bias_into_gemm',\n        'fuse_pad_into_conv',\n        #'fuse_transpose_into_gemm',\n        #'lift_lexical_references',\n    ]\n\n    # Apply the optimization on the original serialized model\n    # WARNING I've had issues with optimizer in recent versions of PyTorch / ONNX causing\n    # 'duplicate definition of name' errors, see: https://github.com/onnx/onnx/issues/2401\n    # It may be better to rely on onnxruntime optimizations, see onnx_validate.py script.\n    warnings.warn(\"I've had issues with optimizer in recent versions of PyTorch / ONNX.\"\n                  \"Try onnxruntime optimization if this doesn't work.\")\n    optimized_model = optimizer.optimize(onnx_model, passes)\n\n    num_optimized_nodes, optimzied_graph_str = traverse_graph(optimized_model.graph)\n    print('==> The model after optimization:\\n{}\\n'.format(optimzied_graph_str))\n    print('==> The optimized model has {} nodes, the original had {}.'.format(num_optimized_nodes, num_original_nodes))\n\n    # Save the ONNX model\n    onnx.save(optimized_model, args.output)\n\n\nif __name__ == \"__main__\":\n    main()\n","sourceCodeStart":53,"sourceCodeEnd":85,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/image_util/normal_bae/nets/submodules/efficientnet_repo/onnx_optimize.py#L53-L85","documentation":"This is a warning emitted by the vendored ONNX optimization script before running the onnx optimizer over the serialized model. The upstream tooling had known issues in recent PyTorch/ONNX versions causing 'duplicate definition of name' errors (onnx/onnx#2401), so the script warns that if optimization fails, onnxruntime-based optimization (see onnx_validate.py) is the recommended alternative.","triggerScenarios":"Running `python onnx_optimize.py` (the `main` entry point) on an ONNX model with newer ONNX/PyTorch versions where the onnx optimizer hits the duplicate-definition bug; the warning appears unconditionally before `optimizer.optimize(...)` runs.","commonSituations":"Normal execution of the normal_bae ONNX export/optimize workflow on modern ONNX versions; hitting 'duplicate definition of name' errors during optimize; maintaining the vendored EfficientNet repo tooling in a newer environment than it was written for.","solutions":["Use the onnxruntime-based optimization path instead (onnx_validate.py script)","Pin onnx to an older version without the duplicate-definition bug (pre-regression versions referenced in onnx/onnx#2401)","If optimize() succeeds, ignore the warning; it is informational","Apply `onnxruntime.InferenceSession` graph optimization as a post-step instead of the onnx optimizer passes"],"exampleFix":"# before\noptimizer.optimize(onnx_model, passes)  # may raise duplicate definition errors\n# after\nimport onnxruntime as ort\nsess_options = ort.SessionOptions()\nsess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL\nsession = ort.InferenceSession(\"model.onnx\", sess_options)","handlingStrategy":"fallback","validationCode":"# Prefer onnxruntime optimization when available\nimport importlib.util\nuse_ort = importlib.util.find_spec(\"onnxruntime\") is not None\nif not use_ort:\n    warnings.warn(\"onnx optimizer may hit duplicate-definition errors on recent ONNX versions\")","typeGuard":null,"tryCatchPattern":"try:\n    optimized_model = optimizer.optimize(onnx_model, passes)\nexcept Exception as e:\n    warnings.warn(f\"onnx optimizer failed ({e}); falling back to onnxruntime optimization\")\n    import onnxruntime as ort\n    so = ort.SessionOptions()\n    so.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL\n    ort.InferenceSession(model_path, so)  # optimized graph via onnxruntime","preventionTips":["Prefer onnxruntime graph optimization for vendored ONNX tooling","Pin onnx/onnxruntime versions known to work with the export scripts","Run the optimization once in CI to detect duplicate-definition regressions after upgrades","Read the script's own warning comments before upgrading ONNX dependencies"],"tags":["warning","onnx","pytorch","model-optimization","version-compatibility"],"backgroundTag":"onnx-optimizer-version-incompatibility","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}