microsoft / microsoft/onnxruntime

[Feature Request] Extend CPU ONNX Ops to latest opset version

Open
#27,731 0 comments 0 reactions 0 assignees View on GitHub
feature request
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.