### Description
<!-- Describe your changes. -->
As title.
### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->
Uint8 type might be required for some model used in sample application.
To match supported data types for onnxruntime-react-native for Android.
Co-authored-by: rachguo <rachguo@rachguos-Mac-mini.local>
Co-authored-by: rachguo <rachguo@rachguos-Mini.attlocal.net>
**Description**: This PR adds support for "XNNPACK EP" in ORTWeb and
changes the behavior of how ORTWeb deals with "backends", or "EPs" in
API.
**Background**: Term "backend" is introduced in ONNX.js to representing
a TypeScript type which implements a "backend" interface, which is a
similar but different concept to ORT's EP (execution provider). There
was 3 backends in ONNX.js: "cpu", "wasm" and "webgl".
When ORT Web is launched, the concept is derived to help users to
integrate smoothly. Technically, when "wasm" backend is used, users need
to also specify "EP" in the session options. Considering it may get
complicated and confused for users to figure out the difference between
"backend" and "EP", the JS API hide the "backend" concept and made a
mapping between names, backends and EPs:
"webgl" (Name) <==> "onnxjsBackend" (Backend)
"wasm" (Name) <==> "wasmBackend" (Backend) <==> "CPU" (EP)
**Details**:
The following changes are applied in this PR:
1. allow multi-registration for backends using the same name. This is
for use scenarios where both "onnxruntime-node" and "onnxruntime-web"
are consumed in a Node.js App ( so "cpu" will be registered twice in
this scenario. )
2. re-assign priority values to backends. I give 100 as base to "cpu"
for node and react_native, and 10 as base to "cpu" in web.
3. add "cpu", "xnnpack" as new names of backends.
4. update onnxruntime wasm exported functions to support EP
registration.
5. update implementations in ort web to handle execution providers in
session options.
6. add '--use_xnnpack' as default build flag for ort-web
### Description
<!-- Describe your changes. -->
Update React Native documentation to reflect change to use full ORT. Fix
broken links.
### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
ORT v1.13 uses the full ORT package. Instructions for performing a
custom build did not cover this.
Co-authored-by: Edward Chen <18449977+edgchen1@users.noreply.github.com>
### Description ###
Add opset17 node test data
### Motivation and Context ###
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->
**Description**:
Use full ORT package for onnxruntime-react-native.
Left the params required for the mobile build in comments so they're
easily discovered if we need to create onnxruntime-react-native-mobile
in the future.
**Motivation and Context**
Remove barrier to using ORT with react native as the mobile package that
was being used supports a limited range of opsets/operators/types, and
requires ORT format models. The full package will run any model.
Added a check for tensor validation on the input - this change fixes the
quiet abort WASM takes when processing a non tensor data in
"OrtGetTensorData"
**Motivation and Context**
At the current status when we try to process non-tensor data through
OrtGetTensorData and exception is thrown which results in a quiet abort
from WASM (assuming WASM was built without exception handling).
I added a check in the C API to catch this case and output a meaningful
message to the user
[example_error_github_12622.zip](https://github.com/microsoft/onnxruntime/files/9464328/example_error_github_12622.zip)
# Motivation
Currently, ORT minimal builds use kernel def hashes to map from nodes to
kernels to execute when loading the model. As the kernel def hashes must
be known ahead of time, this works for statically registered kernels.
This works well for the CPU EP.
For this approach to work, the kernel def hashes must also be known at
ORT format model conversion time, which means the EP with statically
registered kernels must also be enabled then. This is not an issue for
the always-available CPU EP. However, we do not want to require that any
EP which statically registers kernels is always available too.
Consequently, we explore another approach to match nodes to kernels that
does not rely on kernel def hashes. An added benefit of this is the
possibility of moving away from kernel def hashes completely, which
would eliminate the maintenance burden of keeping the hashes stable.
# Approach
In a full build, ORT uses some information from the ONNX op schema to
match a node to a kernel. We want to avoid including the ONNX op schema
in a minimal build to reduce binary size. Essentially, we take the
necessary information from the ONNX op schema and make it available in a
minimal build.
We decouple the ONNX op schema from the kernel matching logic. The
kernel matching logic instead relies on per-op information which can
either be obtained from the ONNX op schema or another source.
This per-op information must be available in a minimal build when there
are no ONNX op schemas. We put it in the ORT format model.
Existing uses of kernel def hashes to look up kernels are replaced
with the updated kernel matching logic. We no longer store
kernel def hashes in the ORT format model’s session state and runtime
optimization representations. We no longer keep the logic to
generate and ensure stability of kernel def hashes.
using ensureSymlinkSync might have issues with permissions when using 'dir' - changed to 'junction' to avoid this.
If the folder generation fails it will cause the test to fails as well.
* consume onnx test data from github
* ensure tests
* update script and allow opset specification
* fix python format
* fix python format
* consume new filter format
* fix linting error
Prior to this every test shared the same tolerances. This meant
that if an ONNX test failed due to a small but acceptable difference in
output, the only alternative was to disable the test entirely.
In op set 17, the DFT operator is being added. Without this change, the
tests for that operator fail because the output is off by about 5e-5.
It's better to keep test coverage for this new op rather than disable
the test entirely.
Also prior to this change, the global tolerances were not shared between
C++, JavaScript, and Python tests. Now they are.
Also fix various minor issues raised by linters.
Unblocks https://github.com/microsoft/onnxruntime/issues/11640.
* skip browserstack test at release pipeline
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* pool name as a parameter to run at lotus
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* Update web-ci-pipeline.yml for Azure Pipelines
* create a packaging pipeline for web
* Update web-packaging-pipeline.yml for Azure Pipelines
* make web-ci-pipeline as a template
* make web-ci-pipeline as a template
* make web-ci-pipeline as a template
* make web-ci-pipeline as a template
* change a paramter name checking a pipeline
* make a pool name changable for react native pipeline
* disable code sign validation for react native
* fix react native package.json publish
* fix indentation
* remove unnecessary comment
* test onnxruntime-common package publish
* ts and js files use lf as eol for windows
* use Linux style of ending line break
* change newLine at only tsconfig.json
* restore a commented code
* fix git restore directory for npm packaging
* fix a typo
* force eol to lf on windows for js directory in CI
* Pipeline for ONNX Runtime react native
* Fix a test failure
* test with custom built binaries
* add onnxruntime-common package back
* don't bob build when bootstrap
* revise Android test
* rename example to e2e
* remove onnxruntime packages from package.json
* remove release-it package
* upgrade gradle version to the same as CI
* add a pipeline for react native
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* android and ios mobile build for react native e2e
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* use android aar package template
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* use android aar package template
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* publish ios test results
* add e2e tests and publish a npm package
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* remove aar from npm package
* wait for view displayed
* change a waiting logic
* increase wait time for app launching
* give more time to launch an app
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* disable metro server on testing
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* test ios simulator launching
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* fix iOS e2e test
* use a publishing version of npm packages
* make pretty
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* make only one onnxruntime-common package after packaging
* make a powershell script of packaging universal
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Add a warning for file changes during a test
* clean up
* fix lint errors
* fix js npm packaging
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* Update mac-react-native-ci-pipeline.yml for Azure Pipelines
* resolve comments
* fix a typo
* es2017 by default for ort-common
* add visualizer and define plugin
* es2017 for ort-web. also add build target for es5
* add multiple reduced size build for ort-web
* resolve comments, add e2e tests and add docs
* add p50 in test
* Support FusedConv in WebGL
* resolve comments
* add a comment for longToNumber change
Co-authored-by: Yulong Wang <yulongw@microsoft.com>
* add p50 in test
* support opset-13 of softmax
* update a operators.md
* resolve comments
* fix lint and format
Co-authored-by: Yulong Wang <yulongw@microsoft.com>
* Support opset-13 for squeeze, unsqueeze, maxpool, pad, cast, clip
* merge master and update a operators.md
* resolve comment. revise pool and cast kernel implementation.
* skip fusion when clip min and max is not in initializer