Skip to content

Commit

Permalink
WebNN: Allow 0-D (scalar) reductions
Browse files Browse the repository at this point in the history
crrev.com/c/5496321 added a restriction on the reduction ops
(including argMin/argMax) that the rank of the input tensor must be
greater than zero.

In webmachinelearning/webnn#681, @fdwr
points out that 0-D (scalar) reductions are fine, it's just a no-op.
Per that discussion, this removes a restriction. There are already
WPT cases for argMin/argMax (although they fail for other reasons);
cases are added for the plethora of reduction ops (which also fail
for other reasons).

Change-Id: Ib10a9b0bb3062f9d2b6001d9a4963b14e751d14f
Cq-Include-Trybots: luci.chromium.try:mac14-blink-rel,mac14.arm64-blink-rel,win11-blink-rel
  • Loading branch information
inexorabletash authored and chromium-wpt-export-bot committed May 13, 2024
1 parent 38a6c3e commit ed5beae
Show file tree
Hide file tree
Showing 11 changed files with 183 additions and 3 deletions.
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_l1.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceL1 float32 0D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
"input": {
"shape": [],
"data": [
5.50882625579834
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 5.50882625579834,
"type": "float32"
}
},
{
"name": "reduceL1 float32 1D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_l2.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceL2 float32 0D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
"input": {
"shape": [],
"data": [
4.860228061676025
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 4.860228061676025,
"type": "float32"
}
},
{
"name": "reduceL2 float32 1D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_log_sum.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceLogSum float32 0D constant tensor all non-negative default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
"input": {
"shape": [],
"data": [
64.54827117919922
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 4.167413234710693,
"type": "float32"
}
},
{
"name": "reduceLogSum float32 1D constant tensor all non-negative default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_log_sum_exp.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceLogSumExp float32 0D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
"input": {
"shape": [],
"data": [
0.7974132895469666
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 0.7974132895469666,
"type": "float32"
}
},
{
"name": "reduceLogSumExp float32 1D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_max.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceMax float32 0D constant tensor default options",
"inputs": {
"input": {
"shape": [],
"data": [
32.16658401489258
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 32.16658401489258,
"type": "float32"
}
},
{
"name": "reduceMax float32 1D constant tensor default options",
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_mean.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceMean float32 0D constant tensor all positive default options",
"inputs": {
"input": {
"shape": [],
"data": [
95.84498596191406
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 95.84498596191406,
"type": "float32"
}
},
{
"name": "reduceMean float32 1D constant tensor all positive default options",
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_min.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceMin float32 0D constant tensor default options",
"inputs": {
"input": {
"shape": [],
"data": [
-58.76195526123047
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": -58.76195526123047,
"type": "float32"
}
},
{
"name": "reduceMin float32 1D constant tensor default options",
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_product.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceProduct float32 0D constant tensor default options",
"inputs": {
"input": {
"shape": [],
"data": [
-68.75911712646484
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": -68.75911712646484,
"type": "float32"
}
},
{
"name": "reduceProduct float32 1D constant tensor default options",
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_sum.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceSum float32 0D constant tensor all positive default options",
"inputs": {
"input": {
"shape": [],
"data": [
69.6038589477539
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 69.6038589477539,
"type": "float32"
}
},
{
"name": "reduceSum float32 1D constant tensor all positive default options",
"inputs": {
Expand Down
18 changes: 18 additions & 0 deletions webnn/resources/test_data/reduce_sum_square.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{
"tests": [
{
"name": "reduceSumSquare float32 0D constant tensor all positive default options",
"inputs": {
"input": {
"shape": [],
"data": [
52.5615348815918
],
"type": "float32",
"constant": true
}
},
"expected": {
"name": "output",
"data": 2762.71484375,
"type": "float32"
}
},
{
"name": "reduceSumSquare float32 1D constant tensor all positive default options", // default options: {axes: null, keepDimensions: false}
"inputs": {
Expand Down
6 changes: 3 additions & 3 deletions webnn/resources/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,9 @@ const getReductionPrecisionTolerance = (resources, operationName) => {
} else {
sizes = inputShape;
}
const reducedElementCount = sizes.reduce(
(accumulator, currentValue) => accumulator * currentValue
);
const reducedElementCount = sizes.length ?
sizes.reduce((accumulator, currentValue) => accumulator * currentValue) :
1;
let tolerance;
switch (operationName) {
case 'reduceL1':
Expand Down

0 comments on commit ed5beae

Please sign in to comment.