mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-05 04:17:53 +00:00
**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
203 lines
9.2 KiB
C
203 lines
9.2 KiB
C
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
// NOTE: This file contains declarations of exported functions as WebAssembly API.
|
|
// Unlike a normal C-API, the purpose of this API is to make emcc to generate correct exports for the WebAssembly. The
|
|
// macro "EMSCRIPTEN_KEEPALIVE" helps the compiler to mark the function as an exported funtion of the WebAssembly
|
|
// module. Users are expected to consume those functions from JavaScript side.
|
|
|
|
#pragma once
|
|
|
|
#include <emscripten.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
struct OrtSession;
|
|
using ort_session_handle_t = OrtSession*;
|
|
|
|
struct OrtSessionOptions;
|
|
using ort_session_options_handle_t = OrtSessionOptions*;
|
|
|
|
struct OrtRunOptions;
|
|
using ort_run_options_handle_t = OrtRunOptions*;
|
|
|
|
struct OrtValue;
|
|
using ort_tensor_handle_t = OrtValue*;
|
|
|
|
extern "C" {
|
|
|
|
/**
|
|
* perform global initialization. should be called only once.
|
|
* @param num_threads number of total threads to use.
|
|
* @param logging_level default logging level.
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtInit(int num_threads, int logging_level);
|
|
|
|
/**
|
|
* create an instance of ORT session options.
|
|
* assume that all enum type parameters, such as graph_optimization_level, execution_mode, and log_severity_level,
|
|
* are checked and set properly at JavaScript.
|
|
* @param graph_optimization_level disabled, basic, extended, or enable all
|
|
* @param enable_cpu_mem_arena enable or disable cpu memory arena
|
|
* @param enable_mem_pattern enable or disable memory pattern
|
|
* @param execution_mode sequential or parallel execution mode
|
|
* @param enable_profiling enable or disable profiling.
|
|
* @param profile_file_prefix file prefix for profiling data. it's a no-op and for a future use.
|
|
* @param log_id logger id for session output
|
|
* @param log_severity_level verbose, info, warning, error or fatal
|
|
* @param log_verbosity_level vlog level
|
|
* @returns a pointer to a session option handle and must be freed by calling OrtReleaseSessionOptions().
|
|
*/
|
|
ort_session_options_handle_t EMSCRIPTEN_KEEPALIVE OrtCreateSessionOptions(size_t graph_optimization_level,
|
|
bool enable_cpu_mem_arena,
|
|
bool enable_mem_pattern,
|
|
size_t execution_mode,
|
|
bool enable_profiling,
|
|
const char* profile_file_prefix,
|
|
const char* log_id,
|
|
size_t log_severity_level,
|
|
size_t log_verbosity_level);
|
|
|
|
/**
|
|
* append an execution provider for a session.
|
|
* @param name the name of the execution provider
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtAppendExecutionProvider(ort_session_options_handle_t session_options,
|
|
const char* name);
|
|
|
|
/**
|
|
* store configurations for a session.
|
|
* @param session_options a handle to session options created by OrtCreateSessionOptions
|
|
* @param config_key configuration keys and value formats are defined in
|
|
* include/onnxruntime/core/session/onnxruntime_session_options_config_keys.h
|
|
* @param config_value value for config_key
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtAddSessionConfigEntry(ort_session_options_handle_t session_options,
|
|
const char* config_key,
|
|
const char* config_value);
|
|
|
|
/**
|
|
* release the specified ORT session options.
|
|
*/
|
|
void EMSCRIPTEN_KEEPALIVE OrtReleaseSessionOptions(ort_session_options_handle_t session_options);
|
|
|
|
/**
|
|
* create an instance of ORT session.
|
|
* @param data a pointer to a buffer that contains the ONNX or ORT format model.
|
|
* @param data_length the size of the buffer in bytes.
|
|
* @returns a handle of the ORT session.
|
|
*/
|
|
ort_session_handle_t EMSCRIPTEN_KEEPALIVE OrtCreateSession(void* data,
|
|
size_t data_length,
|
|
ort_session_options_handle_t session_options);
|
|
|
|
/**
|
|
* release the specified ORT session.
|
|
*/
|
|
void EMSCRIPTEN_KEEPALIVE OrtReleaseSession(ort_session_handle_t session);
|
|
|
|
size_t EMSCRIPTEN_KEEPALIVE OrtGetInputCount(ort_session_handle_t session);
|
|
size_t EMSCRIPTEN_KEEPALIVE OrtGetOutputCount(ort_session_handle_t session);
|
|
|
|
/**
|
|
* get the model's input name.
|
|
* @param session handle of the specified session
|
|
* @param index the input index
|
|
* @returns a pointer to a buffer which contains C-style string. Caller must release the C style string after use by
|
|
* calling OrtFree().
|
|
*/
|
|
char* EMSCRIPTEN_KEEPALIVE OrtGetInputName(ort_session_handle_t session, size_t index);
|
|
/**
|
|
* get the model's output name.
|
|
* @param session handle of the specified session
|
|
* @param index the output index
|
|
* @returns a pointer to a buffer which contains C-style string. Caller must release the C style string after use by
|
|
* calling OrtFree().
|
|
*/
|
|
char* EMSCRIPTEN_KEEPALIVE OrtGetOutputName(ort_session_handle_t session, size_t index);
|
|
|
|
/**
|
|
* free the specified buffer.
|
|
* @param ptr a pointer to the buffer.
|
|
*/
|
|
void EMSCRIPTEN_KEEPALIVE OrtFree(void* ptr);
|
|
|
|
/**
|
|
* create an instance of ORT tensor.
|
|
* @param data_type data type defined in enum ONNXTensorElementDataType.
|
|
* @param data for numeric tensor: a pointer to the tensor data buffer. for string tensor: a pointer to a C-Style null terminated string array.
|
|
* @param data_length size of the buffer 'data' in bytes.
|
|
* @param dims a pointer to an array of dims. the array should contain (dims_length) element(s).
|
|
* @param dims_length the length of the tensor's dimension
|
|
* @returns a handle of the tensor.
|
|
*/
|
|
ort_tensor_handle_t EMSCRIPTEN_KEEPALIVE OrtCreateTensor(int data_type, void* data, size_t data_length, size_t* dims, size_t dims_length);
|
|
|
|
/**
|
|
* get type, shape info and data of the specified tensor.
|
|
* @param tensor handle of the tensor.
|
|
* @param data_type [out] specify the memory to write data type
|
|
* @param data [out] specify the memory to write the tensor data. for string tensor: an array of C-Style null terminated string.
|
|
* @param dims [out] specify the memory to write address of the buffer containing value of each dimension.
|
|
* @param dims_length [out] specify the memory to write dims length
|
|
* @remarks following temporary buffers are allocated during the call. Caller must release the buffers after use by calling OrtFree():
|
|
* 'dims' (for all types of tensor), 'data' (only for string tensor)
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtGetTensorData(ort_tensor_handle_t tensor, int* data_type, void** data, size_t** dims, size_t* dims_length);
|
|
|
|
/**
|
|
* release the specified tensor.
|
|
*/
|
|
void EMSCRIPTEN_KEEPALIVE OrtReleaseTensor(ort_tensor_handle_t tensor);
|
|
|
|
/**
|
|
* create an instance of ORT run options.
|
|
* @param log_severity_level verbose, info, warning, error or fatal
|
|
* @param log_verbosity_level vlog level
|
|
* @param terminate if true, all incomplete OrtRun calls will exit as soon as possible
|
|
* @param tag tag for this run
|
|
* @returns a pointer to a run option handle and must be freed by calling OrtReleaseRunOptions().
|
|
*/
|
|
ort_run_options_handle_t EMSCRIPTEN_KEEPALIVE OrtCreateRunOptions(size_t log_severity_level,
|
|
size_t log_verbosity_level,
|
|
bool terminate,
|
|
const char* tag);
|
|
|
|
/**
|
|
* set a single run configuration entry
|
|
* @param run_options a handle to run options created by OrtCreateRunOptions
|
|
* @param config_key configuration keys and value formats are defined in
|
|
* include/onnxruntime/core/session/onnxruntime_run_options_config_keys.h
|
|
* @param config_value value for config_key
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtAddRunConfigEntry(ort_run_options_handle_t run_options,
|
|
const char* config_key,
|
|
const char* config_value);
|
|
|
|
/**
|
|
* release the specified ORT run options.
|
|
*/
|
|
void EMSCRIPTEN_KEEPALIVE OrtReleaseRunOptions(ort_run_options_handle_t run_options);
|
|
|
|
/**
|
|
* inference the model.
|
|
* @param session handle of the specified session
|
|
* @returns error code defined in enum OrtErrorCode
|
|
*/
|
|
int EMSCRIPTEN_KEEPALIVE OrtRun(ort_session_handle_t session,
|
|
const char** input_names,
|
|
const ort_tensor_handle_t* inputs,
|
|
size_t input_count,
|
|
const char** output_names,
|
|
size_t output_count,
|
|
ort_tensor_handle_t* outputs,
|
|
ort_run_options_handle_t run_options);
|
|
|
|
/**
|
|
* end profiling.
|
|
* @param session handle of the specified session
|
|
* @returns a pointer to a buffer which contains C-style string of profile filename.
|
|
* Caller must release the C style string after use by calling OrtFree().
|
|
*/
|
|
char* EMSCRIPTEN_KEEPALIVE OrtEndProfiling(ort_session_handle_t session);
|
|
};
|