mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-20 19:12:24 +00:00
[js/web] add sessionOptions.freeDimensionOverrides (#17488)
### Description Allows to specify fixed size for dynamic input of a model. resolves #16707 Pending test
This commit is contained in:
parent
5d3786206b
commit
a2e75114cc
5 changed files with 36 additions and 0 deletions
|
|
@ -66,6 +66,13 @@ export declare namespace InferenceSession {
|
|||
*/
|
||||
interOpNumThreads?: number;
|
||||
|
||||
/**
|
||||
* The free dimension override.
|
||||
*
|
||||
* This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend
|
||||
*/
|
||||
freeDimensionOverrides?: {readonly [dimensionName: string]: number};
|
||||
|
||||
/**
|
||||
* The optimization level.
|
||||
*
|
||||
|
|
|
|||
1
js/web/lib/wasm/binding/ort-wasm.d.ts
vendored
1
js/web/lib/wasm/binding/ort-wasm.d.ts
vendored
|
|
@ -54,6 +54,7 @@ export interface OrtWasmModule extends EmscriptenModule {
|
|||
enableProfiling: boolean, profileFilePrefix: number, logId: number, logSeverityLevel: number,
|
||||
logVerbosityLevel: number, optimizedModelFilePath: number): number;
|
||||
_OrtAppendExecutionProvider(sessionOptionsHandle: number, name: number): number;
|
||||
_OrtAddFreeDimensionOverride(sessionOptionsHandle: number, name: number, dim: number): number;
|
||||
_OrtAddSessionConfigEntry(sessionOptionsHandle: number, configKey: number, configValue: number): number;
|
||||
_OrtReleaseSessionOptions(sessionOptionsHandle: number): void;
|
||||
|
||||
|
|
|
|||
|
|
@ -143,6 +143,21 @@ export const setSessionOptions = (options?: InferenceSession.SessionOptions): [n
|
|||
setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs);
|
||||
}
|
||||
|
||||
if (sessionOptions.freeDimensionOverrides) {
|
||||
for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) {
|
||||
if (typeof name !== 'string') {
|
||||
throw new Error(`free dimension override name must be a string: ${name}`);
|
||||
}
|
||||
if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
|
||||
throw new Error(`free dimension override value must be a non-negative integer: ${value}`);
|
||||
}
|
||||
const nameOffset = allocWasmString(name, allocs);
|
||||
if (wasm._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) {
|
||||
checkLastError(`Can't set a free dimension override: ${name} - ${value}.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sessionOptions.extra !== undefined) {
|
||||
iterateExtraOptions(sessionOptions.extra, '', new WeakSet<Record<string, unknown>>(), (key, value) => {
|
||||
const keyDataOffset = allocWasmString(key, allocs);
|
||||
|
|
|
|||
|
|
@ -155,6 +155,12 @@ int OrtAppendExecutionProvider(ort_session_options_handle_t session_options, con
|
|||
return CHECK_STATUS(SessionOptionsAppendExecutionProvider, session_options, name, nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
int OrtAddFreeDimensionOverride(ort_session_options_handle_t session_options,
|
||||
const char* dim_param_name,
|
||||
int dim_value) {
|
||||
return CHECK_STATUS(AddFreeDimensionOverrideByName, session_options, dim_param_name, dim_value);
|
||||
}
|
||||
|
||||
int OrtAddSessionConfigEntry(OrtSessionOptions* session_options,
|
||||
const char* config_key,
|
||||
const char* config_value) {
|
||||
|
|
|
|||
|
|
@ -84,6 +84,13 @@ ort_session_options_handle_t EMSCRIPTEN_KEEPALIVE OrtCreateSessionOptions(size_t
|
|||
int EMSCRIPTEN_KEEPALIVE OrtAppendExecutionProvider(ort_session_options_handle_t session_options,
|
||||
const char* name);
|
||||
|
||||
/**
|
||||
* add a free dimension override for one dimension of a session's input.
|
||||
*/
|
||||
int EMSCRIPTEN_KEEPALIVE OrtAddFreeDimensionOverride(ort_session_options_handle_t session_options,
|
||||
const char* dim_param_name,
|
||||
int dim_value);
|
||||
|
||||
/**
|
||||
* store configurations for a session.
|
||||
* @param session_options a handle to session options created by OrtCreateSessionOptions
|
||||
|
|
|
|||
Loading…
Reference in a new issue