microsoft / microsoft/onnxruntime
[Feature Request] Extend CPU ONNX Ops to latest opset version
- Dominant language
- C++
- Stars
- 21.9k
- Forks
- 4.2k
- Avg merge
- 4d 11h
- Merged PRs (30d)
- 184
Description
## Summary
- Strict registry-level audit found **10** ONNX-domain CPU ops whose highest registered opset is below the latest ONNX changelog opset.
- Priority breakdown: **P1 1**, **P2 3**, **P3 6**.
- Method: compare the highest opset registered in [`onnxruntime/core/providers/cpu/cpu_execution_provider.cc`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc) against the latest version entry in [`build/cuda/Debug/_deps/onnx-src/docs/Changelog.md`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md).
- This report is intentionally strict about registration coverage. It does **not** assume a newer schema is automatically backward-compatible with an older kernel registration.
## Priority Legend
- **P1**: foundational graph/model-import gaps that are more likely to block modern models or common exporter output.
- **P2**: secondary operator gaps that are real registration misses but are typically narrower in impact.
- **P3**: deprecated, generator, or otherwise lower-urgency gaps.
## Gaps
| Priority | Operator | CPU Max | ONNX Latest | Gap | Registration | Changelog |
| --- | --- | ---: | ---: | ---: | --- | --- |
| P1 | `RoiAlign` | 16 | 22 | 6 | [`cpu_execution_provider.cc:2965`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L2965) | [`Changelog.md:27917`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27917) |
| P2 | `MaxRoiPool` | 1 | 22 | 21 | [`cpu_execution_provider.cc:1768`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1768) | [`Changelog.md:27298`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27298) |
| P2 | `GlobalLpPool` | 2 | 22 | 20 | [`cpu_execution_provider.cc:1765`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1765) | [`Changelog.md:26742`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L26742) |
| P2 | `Multinomial` | 7 | 22 | 15 | [`cpu_execution_provider.cc:1569`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1569) | [`Changelog.md:27438`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27438) |
| P3 | `RandomNormal` | 1 | 22 | 21 | [`cpu_execution_provider.cc:1565`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1565) | [`Changelog.md:27726`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27726) |
| P3 | `RandomNormalLike` | 1 | 22 | 21 | [`cpu_execution_provider.cc:1567`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1567) | [`Changelog.md:27772`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27772) |
| P3 | `RandomUniform` | 1 | 22 | 21 | [`cpu_execution_provider.cc:1566`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1566) | [`Changelog.md:27822`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27822) |
| P3 | `RandomUniformLike` | 1 | 22 | 21 | [`cpu_execution_provider.cc:1568`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L1568) | [`Changelog.md:27867`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L27867) |
| P3 | `Scatter` | 10 | 11 | 1 | [`cpu_execution_provider.cc:2031`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L2031) | [`Changelog.md:12972`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L12972) |
| P3 | `Upsample` | 9 | 10 | 1 | [`cpu_execution_provider.cc:2079`](https://github.com/microsoft/onnxruntime/blob/9fbdb466d4bcaee28f87361a57fa7874ce34c73f/onnxruntime/core/providers/cpu/cpu_execution_provider.cc#L2079) | [`Changelog.md:10297`](https://github.com/onnx/onnx/blob/rel-1.20.1/docs/Changelog.md#L10297) |
## Notes
- `Scatter` and `Upsample` are deprecated ONNX operators, so they stay in the report but are ranked lower.
- The random-generator operators are also ranked lower because they are less central to general model execution than layout, pooling, or detection operators.
- This wider pass still confirms that the CPU ONNX-domain opset-gap surface is much smaller than the CUDA one.
### Describe scenario use case
To run latest onnx model
Contributor guide
Research direction
Start at the listed registrations in onnxruntime/core/providers/cpu/cpu_execution_provider.cc and compare each operator against its corresponding entry in ONNX docs/Changelog.md. Review the ten reported gaps and their existing implementations before determining the required registration coverage; done means the targeted CPU operators support the intended latest opsets and the latest ONNX model scenario works.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- machine-learning
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100