Skip to content

Conversation

huningxin
Copy link
Contributor

@huningxin huningxin commented Jun 4, 2025

This PR also supports rankRange for graph input, constant and output in opSupportLimits.

Fix #835


Preview | Diff

@huningxin huningxin requested review from reillyeon and fdwr June 4, 2025 08:08
@huningxin
Copy link
Contributor Author

/cc @philloooo

Copy link
Collaborator

@fdwr fdwr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Ningxin. 👍

@huningxin
Copy link
Contributor Author

FYI, I am prototyping it in Chromium, will inform whether this PR is good to merge.

Copy link
Collaborator

@fdwr fdwr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor Author

@huningxin huningxin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fdwr @reillyeon , adding new changes that are based on Chromium prototype: https://chromium-review.googlesource.com/c/chromium/src/+/6903617, please take another look. Thanks!

@@ -2237,8 +2237,8 @@ partial dictionary MLOpSupportLimits {
</tr>
<tr>
<td>*output*</td>
<td>{{MLArgMinMaxOptions/outputDataType}}</td>
<td>{{input}}'s [=MLOperand/rank=] - 1 to {{input}}'s [=MLOperand/rank=]</td>
<td>{{MLOperandDataType/"int32"}}, {{MLOperandDataType/"int64"}}</td>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: This should list all allowed data types. The original outputDatatype is more useful for output data type calculation in the algorithm steps.

@@ -3421,7 +3421,7 @@ partial dictionary MLOpSupportLimits {
<tr>
<td>*output*</td>
<td>[=/same type as|same as=] {{a}}</td>
<td>maximum of {{a}}'s [=MLOperand/rank=] and {{b}}'s [=MLOperand/rank=]</td>
<td>[=/any rank|N=]</td>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: Same here and the following, the allowed ranks, not the output rank calculation.

Copy link
Collaborator

@fdwr fdwr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔

1. Add allowed ranks for all lstm and gru output tensors.
2. Validate new shape's rank of expand and reshape operations.
3. Simplify allowed ranks for some operations based on implementation
   experience.
4. Other minor changes for consistency.
Move the output tensor rank range info from constraints table to Returns
section for argMin/Max and reduction ops.

The element-wise binary and logical ops, matmul and where ops already have
such info in the Returns section.

Fix issues of output rank description of prelu and scatterND.
Copy link
Collaborator

@fdwr fdwr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Thanks NH.

chromium-wpt-export-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Sep 17, 2025
This CL prototypes WebNN spec change [1] that supports tensor rank
range for graph input, constant, output and each operation's output.

This CL adds new shape rank validation according to allowed output
tensor rank of expand and reshape operations.

The sequence output of gru and cell operations has different rank,
this CL extends context properties to support them.

For logical ops, the output rank ranges are set to each op's input
rank ranges, while the output data types are set to unified logical
output data type of context properties.

[1]: webmachinelearning/webnn#857

Bug: 442209350
Change-Id: Ie5ca5c794cebb4586bcccaaa8d237be1dffea458
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

opSupportLimits: Level of detail for output tensor(s)?
3 participants