Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] WebGPU EP [skip ci] #21904

Closed
wants to merge 167 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
4037bd4
[WIP] WebGPU EP initial commit
fs-eire Aug 28, 2024
9c36250
update C-API
fs-eire Aug 28, 2024
3a0756d
fix build break
fs-eire Aug 28, 2024
5199e98
add an empty symbols.txt file
fs-eire Aug 28, 2024
1c68dbd
fix an error in doc
fs-eire Aug 29, 2024
7db03de
remove string_join.h in favor of absl::StrJoin
fs-eire Aug 29, 2024
6a373c2
fix DLL copy
fs-eire Aug 29, 2024
ee42bba
update doc: require --skip_tests
fs-eire Aug 29, 2024
5fac202
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Aug 29, 2024
3f46e5c
update dawn version
fs-eire Aug 29, 2024
9f61279
disable Tint tests
fs-eire Aug 29, 2024
6bb6335
fix one build break in Linux
fs-eire Aug 29, 2024
d839dbc
remove unused variables
fs-eire Aug 30, 2024
b70943d
make webgpu build on linux and known to most tools (#21937)
guschmue Aug 30, 2024
c33ac2e
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Aug 30, 2024
8437267
revert type of ShaderVariable::rank_ to int
fs-eire Aug 30, 2024
3caf032
output Impl() for variables
fs-eire Aug 30, 2024
84494c4
code formatting
fs-eire Aug 30, 2024
aa70163
better format of Uniform
fs-eire Aug 30, 2024
d772db7
revise document
fs-eire Aug 30, 2024
6ef3dad
more build fix for linux
fs-eire Aug 31, 2024
a56f6c3
apply formatter
fs-eire Aug 31, 2024
12cd79d
simple test runner
fs-eire Aug 31, 2024
14c8966
Program macros update - allow extend
fs-eire Aug 31, 2024
4fff35f
fix BucketCacheManager
fs-eire Sep 1, 2024
4fd8ad1
add a method to get logger from ComputeContext
fs-eire Sep 1, 2024
3bd92ad
add verbose log for cache key
fs-eire Sep 1, 2024
6a1bbfe
revise suite test
fs-eire Sep 1, 2024
947aee1
device lost handler
fs-eire Sep 1, 2024
99b2578
add '-a' and '-t' to test runner
fs-eire Sep 1, 2024
aa7b3f5
atol/rtol 0.0001 -> 0.001
fs-eire Sep 1, 2024
e659acd
Fix uniform
fs-eire Sep 2, 2024
6ad89c5
add some unary ops
fs-eire Sep 2, 2024
8361fc3
various of fixes
fs-eire Sep 2, 2024
c89159d
fix workgroup_size, cache key stringnify and indices type
fs-eire Sep 3, 2024
5ea5936
shape_uniforms preparation
fs-eire Sep 3, 2024
7d83054
allow uniforms of input/output shape/stride being added automatically
fs-eire Sep 3, 2024
7a64cc7
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 3, 2024
1d53ac8
fix build (linux)
fs-eire Sep 3, 2024
4d52602
fix stride
fs-eire Sep 3, 2024
3761aad
fix "{res_name}_bi2o_{name}"
fs-eire Sep 3, 2024
351da84
Add Expand operator (#21933)
qjia7 Sep 3, 2024
0b7ce77
support onnxruntime_test_all
fs-eire Sep 3, 2024
33726b1
reflect change in WebGpuProviderFactoryCreator::Create signature (#21…
guschmue Sep 3, 2024
50ea9eb
compare the content of WEBGPU_BUFFER, not the address (#21967)
guschmue Sep 3, 2024
d6f6148
fix tanh
fs-eire Sep 3, 2024
626edaf
support size==0 for element wise operators
fs-eire Sep 4, 2024
8913da1
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 4, 2024
bacc54c
use shared ComputeBroadcastOutputShape()
fs-eire Sep 4, 2024
7ecc5bb
add workgroup_idx
fs-eire Sep 4, 2024
ae836b1
expose name for shader variable
fs-eire Sep 4, 2024
243078b
add uniform for 1D variable
fs-eire Sep 5, 2024
4d48d28
fix GetElementAt with uniform
fs-eire Sep 5, 2024
dbe673b
document update folder
fs-eire Sep 5, 2024
38f182e
fix adapter/device creating: add toggles
fs-eire Sep 5, 2024
eb80f7c
more strict shape&stride usage check
fs-eire Sep 6, 2024
39d5509
fix vector realloc
fs-eire Sep 6, 2024
cd961c3
simplify cache hint interface.
fs-eire Sep 6, 2024
ddc2fbb
revise expand
fs-eire Sep 6, 2024
e8be835
revise unary
fs-eire Sep 6, 2024
bd7d592
Elu/Relu/LeakyRelu/ThresholdedRelu/Gelu
fs-eire Sep 6, 2024
eecac18
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 6, 2024
601e50f
remove unused field in class Gelu
fs-eire Sep 6, 2024
8f36da2
remove out-of-dated comments
fs-eire Sep 6, 2024
72ebd85
Clip
fs-eire Sep 7, 2024
a3244ae
fix rank in shader helper
fs-eire Sep 7, 2024
5a2ae8c
fix shader variable
fs-eire Sep 9, 2024
aa54ff8
move components number from variable to program
fs-eire Sep 9, 2024
969384d
mark components in cache key
fs-eire Sep 9, 2024
6b82486
Add FastGelu op (#21991)
qjia7 Sep 10, 2024
2b3e7c2
use 'set/add' as prefix for some functions
fs-eire Sep 10, 2024
ef0d53b
remove unnecessary cache hint for FastGelu
fs-eire Sep 10, 2024
c4ca47f
revise unary - expose consts in header
fs-eire Sep 10, 2024
8806d57
use path for header file
fs-eire Sep 10, 2024
0568e2b
a few revises to the code (#22047)
fs-eire Sep 10, 2024
b7a9c0e
use OrtMutex
fs-eire Sep 11, 2024
f65ade9
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 11, 2024
d4a963d
[webgpu-native] Add transpose op (#21986)
axinging Sep 11, 2024
8b61532
PushErrorScope and PopErrorScope
fs-eire Sep 11, 2024
dce0f18
placeholder for setting proc table
fs-eire Sep 12, 2024
8978d89
Revert "placeholder for setting proc table"
fs-eire Sep 12, 2024
43ccaf4
allow setting "ValidationMode"
fs-eire Sep 12, 2024
eae4c3f
make shape/stride correct when component != 1
fs-eire Sep 13, 2024
b8c369d
expose number of components
fs-eire Sep 13, 2024
c3086d6
Fix build errors
skottmckay Sep 13, 2024
c5cf2ab
[WebGPU EP] Support Shape operator (#22095)
satyajandhyala Sep 14, 2024
0bc714f
[webgpu EP] Binary operators (#22112)
fs-eire Sep 17, 2024
4421676
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 17, 2024
2e91a8b
use f32 for pow anyway
fs-eire Sep 17, 2024
87f9edb
Cast operator
fs-eire Sep 17, 2024
19ee9f3
do not use virtual function for getting ProgramMetadata
fs-eire Sep 17, 2024
d9f7f19
reshape, squeeze and unsqueeze
fs-eire Sep 18, 2024
07675cf
fix Cast and Clip
fs-eire Sep 18, 2024
dfab322
[webgpu-native] Add where op (#22014)
axinging Sep 20, 2024
cb9f3a4
fix linux build break
fs-eire Sep 20, 2024
207be92
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Sep 24, 2024
929725e
expose KernelContext
fs-eire Sep 25, 2024
c5e5af3
revise fast gelu
fs-eire Sep 25, 2024
82cd59e
expose Rank in IndicesHelper
fs-eire Sep 25, 2024
2393dbf
fix: move inline impl to .h
fs-eire Sep 25, 2024
9bdbd85
add const modifier
fs-eire Sep 25, 2024
0101ce8
remove toggle "disable_workgroup_init"
fs-eire Sep 25, 2024
3896706
set backend type to D3D12 since we always uses dxc (win).
fs-eire Sep 25, 2024
f02e85a
update build configurations to webgpu EP (#22047)
fs-eire Sep 25, 2024
e5233ce
enable build pipeline on Windows for WebGPU
fs-eire Sep 26, 2024
0f7a5f6
[webgpu native] Add RotaryEmbedding op (#22194)
axinging Sep 27, 2024
41f6ff3
[webgpu native] Add transpose shared (#22098)
axinging Sep 27, 2024
b1b5e1f
[webgpu-native] Add gather (#22183)
qjia7 Sep 27, 2024
92a08e2
[Native-WebGPU] Add Concat (#22225)
satyajandhyala Sep 27, 2024
8da1f7a
[webgpu-native] Add MatmulNBits (#22150)
qjia7 Sep 27, 2024
f9b6b7c
[WebGPU-Native] Tile Operator (#22239)
prathikr Sep 30, 2024
c1ae1fd
use Abseil OStringStream in WebGPU EP string concat (#22241)
fs-eire Sep 30, 2024
b574f2c
Range
fs-eire Sep 30, 2024
14ea5db
webgpu: support MultiHeadAttention operator (#22144)
xhcao Sep 30, 2024
c70441e
[webgpu-native] support for webgpu layernorms (#22249)
guschmue Oct 1, 2024
468c720
nodejs binding support webgpu
fs-eire Oct 1, 2024
cbf106e
fix where
fs-eire Oct 1, 2024
bce7a98
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 1, 2024
5086c7c
revert some changes that are not necessary
fs-eire Oct 1, 2024
fe7d3e4
revise perftest help msg
fs-eire Oct 1, 2024
d219bb7
[webgpu-native] Fix a few build errors on Linux (#22286)
snnn Oct 1, 2024
7f7d6da
format
fs-eire Oct 1, 2024
c561ed6
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 1, 2024
27640e3
fix issues for e2e phi3 (#22287)
guschmue Oct 1, 2024
4129cd6
fix perf problem: force Flush by end of session
fs-eire Oct 3, 2024
5fd65e7
Uniform buffer mode: LazyRelease -> Simple
fs-eire Oct 3, 2024
dcf2062
nodejs binding support IO binding for webgpu
fs-eire Oct 3, 2024
481111b
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 4, 2024
b84401d
fix matmul test after conflict resolve
fs-eire Oct 4, 2024
08434d2
a few build fixes
fs-eire Oct 4, 2024
1b01583
fix build break in android build
fs-eire Oct 4, 2024
130dc9b
fix duplicate "it"
fs-eire Oct 4, 2024
646a744
always disable DAWN_ENABLE_SPIRV_VALIDATION
fs-eire Oct 4, 2024
da6406b
Enable OBJC/OBJCXX for all projects if necessary
fs-eire Oct 5, 2024
53ff621
minimal webgpu io-binding support for python (#22334)
guschmue Oct 7, 2024
74b5131
reset dispatch count
fs-eire Oct 8, 2024
4f4efcb
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 9, 2024
0a8f872
remove unnecessary initialization options in test
fs-eire Oct 9, 2024
3f104fb
support ORT profiling in node.js
fs-eire Oct 9, 2024
8261ca6
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 11, 2024
e7d05ba
[webgpu-native] support webgpu profiling (#22255)
qjia7 Oct 11, 2024
613ad6d
check ValidationMode for push/pop error scope
fs-eire Oct 11, 2024
f4bb64e
[WebGPU EP] Remove unused variable. (#22412)
edgchen1 Oct 11, 2024
cf8c478
fix typo
fs-eire Oct 14, 2024
be95c28
add "WebGPU:" prefix for config entries
fs-eire Oct 14, 2024
e76fe1f
nodejs support EP config
fs-eire Oct 14, 2024
c7c1e82
support session options "optimizedModelFilePath" and "extra"
fs-eire Oct 15, 2024
cae9dab
allow to set a list for specifying force CPU nodes (#22431)
fs-eire Oct 16, 2024
2beeaf5
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 16, 2024
2c27a59
fix bug in Gather
fs-eire Oct 17, 2024
de6cf6b
Fix Unsqueeze
fs-eire Oct 17, 2024
59298ff
fix supports_device() in python interface
fs-eire Oct 17, 2024
f18a65f
fix linux build
fs-eire Oct 17, 2024
cc340e2
enable pybind
fs-eire Oct 17, 2024
8553aec
fix mac build
fs-eire Oct 17, 2024
289145c
add test_dynamicquantizelinear_expanded_cpu
fs-eire Oct 17, 2024
f2ee91c
remove temp tests
fs-eire Oct 17, 2024
3b462d6
add power preference
fs-eire Oct 18, 2024
0d49662
exclude dx11
fs-eire Oct 18, 2024
ddef640
WIN32 macro -> _WIN32
fs-eire Oct 18, 2024
d312b38
[webgpu-native] opt matmulnbits (#22472)
qjia7 Oct 21, 2024
89b4549
webgpu ep support dawn proc table (#22509)
fs-eire Oct 21, 2024
dc01790
[webgpu-native] Fix CI errors on MacOS (#22535)
qjia7 Oct 22, 2024
26ff482
Merge remote-tracking branch 'origin/main' into fs-eire/webgpu-ep
fs-eire Oct 22, 2024
872149b
replace OrtMutex
fs-eire Oct 22, 2024
a00f5b8
allow build flag --use_external_dawn (#22552)
fs-eire Oct 24, 2024
d4764a8
update dawn patch
fs-eire Oct 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ option(onnxruntime_TVM_USE_HASH "Build ipp-crypto library for support hash algor
option(onnxruntime_USE_XNNPACK "Build with XNNPACK support. Provides an alternative math library on ARM, WebAssembly and x86." OFF)
option(onnxruntime_USE_WEBNN "Build with WebNN support. Enable hardware acceleration in web browsers." OFF)
option(onnxruntime_USE_WEBGPU "Build with WebGPU support. Enable WebGPU via C/C++ interface." OFF)
option(onnxruntime_USE_EXTERNAL_DAWN "Build with treating Dawn as external dependency. Will not link Dawn at build time." OFF)

# Options related to reducing the binary size produced by the build
# XNNPACK EP requires the internal NHWC contrib ops to be available, so this option must be OFF when onnxruntime_USE_XNNPACK is ON
Expand Down Expand Up @@ -948,6 +949,9 @@ if (onnxruntime_USE_WEBGPU)
list(APPEND ORT_PROVIDER_FLAGS -DUSE_WEBGPU=1)
list(APPEND ORT_PROVIDER_CMAKE_FLAGS -Donnxruntime_USE_WEBGPU=1)
list(APPEND ONNXRUNTIME_PROVIDER_NAMES webgpu)
if (onnxruntime_USE_EXTERNAL_DAWN)
list(APPEND ORT_PROVIDER_FLAGS -DUSE_EXTERNAL_DAWN=1)
endif()
endif()
if (onnxruntime_USE_CANN)
list(APPEND ORT_PROVIDER_FLAGS -DUSE_CANN=1)
Expand Down
7 changes: 6 additions & 1 deletion cmake/external/onnxruntime_external_deps.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -656,11 +656,16 @@ if (onnxruntime_USE_WEBGPU)

# Vulkan may optionally be included in a Windows build. Exclude until we have an explicit use case that requires it.
set(DAWN_ENABLE_VULKAN OFF CACHE BOOL "" FORCE)
# We are currently always using the D3D12 backend.
set(DAWN_ENABLE_D3D11 OFF CACHE BOOL "" FORCE)
endif()

onnxruntime_fetchcontent_makeavailable(dawn)

list(APPEND onnxruntime_EXTERNAL_LIBRARIES dawn::dawn_native dawn::dawn_proc)
if (NOT onnxruntime_USE_EXTERNAL_DAWN)
list(APPEND onnxruntime_EXTERNAL_LIBRARIES dawn::dawn_native)
endif()
list(APPEND onnxruntime_EXTERNAL_LIBRARIES dawn::dawn_proc)
endif()

set(onnxruntime_LINK_DIRS)
Expand Down
5 changes: 4 additions & 1 deletion cmake/onnxruntime_providers_webgpu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
onnxruntime_add_static_library(onnxruntime_providers_webgpu ${onnxruntime_providers_webgpu_cc_srcs})
onnxruntime_add_include_to_target(onnxruntime_providers_webgpu
onnxruntime_common dawn::dawncpp_headers dawn::dawn_headers onnx onnx_proto flatbuffers::flatbuffers Boost::mp11 safeint_interface)
target_link_libraries(onnxruntime_providers_webgpu dawn::dawn_native dawn::dawn_proc)
if (NOT onnxruntime_USE_EXTERNAL_DAWN)
target_link_libraries(onnxruntime_providers_webgpu dawn::dawn_native)
endif()
target_link_libraries(onnxruntime_providers_webgpu dawn::dawn_proc)

set_target_properties(onnxruntime_providers_webgpu PROPERTIES FOLDER "ONNXRuntime")
12 changes: 12 additions & 0 deletions cmake/onnxruntime_unittests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,9 @@ set (onnxruntime_global_thread_pools_test_SRC
${ONNXRUNTIME_GLOBAL_THREAD_POOLS_TEST_SRC_DIR}/test_main.cc
${ONNXRUNTIME_GLOBAL_THREAD_POOLS_TEST_SRC_DIR}/test_inference.cc)

set (onnxruntime_webgpu_external_dawn_test_SRC
${TEST_SRC_DIR}/webgpu/external_dawn/main.cc)

# tests from lowest level library up.
# the order of libraries should be maintained, with higher libraries being added first in the list

Expand Down Expand Up @@ -1884,4 +1887,13 @@ if (NOT onnxruntime_MINIMAL_BUILD AND NOT onnxruntime_EXTENDED_MINIMAL_BUILD
endif()
endif()

if (onnxruntime_USE_WEBGPU AND onnxruntime_USE_EXTERNAL_DAWN)
AddTest(TARGET onnxruntime_webgpu_external_dawn_test
SOURCES ${onnxruntime_webgpu_external_dawn_test_SRC}
LIBS dawn::dawn_native ${onnxruntime_test_providers_libs}
DEPENDS ${all_dependencies}
)
onnxruntime_add_include_to_target(onnxruntime_webgpu_external_dawn_test dawn::dawncpp_headers dawn::dawn_headers)
endif()

include(onnxruntime_fuzz_test.cmake)
45 changes: 30 additions & 15 deletions cmake/patches/dawn/dawn.patch
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,55 @@ index 9c0bd6fa4e..bf8a57aeac 100644
###############################################################################
# Do the 'complete_lib' build.
diff --git a/src/dawn/native/Surface_metal.mm b/src/dawn/native/Surface_metal.mm
index ce55acbd43..baa4835362 100644
index ce55acbd43..2cfd363479 100644
--- a/src/dawn/native/Surface_metal.mm
+++ b/src/dawn/native/Surface_metal.mm
@@ -36,7 +36,13 @@
@@ -33,10 +33,18 @@

#import <QuartzCore/CAMetalLayer.h>

+#include "dawn/common/Platform.h"
+
namespace dawn::native {

bool InheritsFromCAMetalLayer(void* obj) {
- id<NSObject> object = static_cast<id>(obj);
+ id<NSObject> object =
+#if TARGET_OS_IOS
+#if DAWN_PLATFORM_IS(IOS)
+ (__bridge id)obj;
+#else
+#else // DAWN_PLATFORM_IS(IOS)
+ static_cast<id>(obj);
+#endif
+#endif // DAWN_PLATFORM_IS(IOS)
+
return [object isKindOfClass:[CAMetalLayer class]];
}

diff --git a/src/dawn/native/metal/SharedFenceMTL.mm b/src/dawn/native/metal/SharedFenceMTL.mm
index bde8bfea07..f2f6459e91 100644
index bde8bfea07..8906185d6f 100644
--- a/src/dawn/native/metal/SharedFenceMTL.mm
+++ b/src/dawn/native/metal/SharedFenceMTL.mm
@@ -40,7 +40,13 @@ ResultOrError<Ref<SharedFence>> SharedFence::Create(
@@ -25,6 +25,8 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+#include "dawn/common/Platform.h"
+
#include "dawn/native/metal/SharedFenceMTL.h"

#include "dawn/native/ChainUtils.h"
@@ -39,8 +41,13 @@ ResultOrError<Ref<SharedFence>> SharedFence::Create(
const SharedFenceMTLSharedEventDescriptor* descriptor) {
DAWN_INVALID_IF(descriptor->sharedEvent == nullptr, "MTLSharedEvent is missing.");
if (@available(macOS 10.14, iOS 12.0, *)) {
return AcquireRef(new SharedFence(
- return AcquireRef(new SharedFence(
- device, label, static_cast<id<MTLSharedEvent>>(descriptor->sharedEvent)));
+ device, label,
+#if TARGET_OS_IOS
+ (__bridge id<MTLSharedEvent>)(descriptor->sharedEvent)
+#else
+ static_cast<id<MTLSharedEvent>>(descriptor->sharedEvent)
+#endif
+ ));
+ return AcquireRef(new SharedFence(device, label,
+#if DAWN_PLATFORM_IS(IOS)
+ (__bridge id<MTLSharedEvent>)(descriptor->sharedEvent)
+#else // DAWN_PLATFORM_IS(IOS)
+ static_cast<id<MTLSharedEvent>>(descriptor->sharedEvent)
+#endif // DAWN_PLATFORM_IS(IOS)
+ ));
} else {
return DAWN_INTERNAL_ERROR("MTLSharedEvent not supported.");
}
Expand Down
4 changes: 4 additions & 0 deletions js/node/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ include_directories(${CMAKE_SOURCE_DIR}/node_modules/node-addon-api)

# optional providers
option(USE_DML "Build with DirectML support" OFF)
option(USE_WEBGPU "Build with WebGPU support" OFF)
option(USE_CUDA "Build with CUDA support" OFF)
option(USE_TENSORRT "Build with TensorRT support" OFF)
option(USE_COREML "Build with CoreML support" OFF)
Expand All @@ -42,6 +43,9 @@ option(USE_QNN "Build with QNN support" OFF)
if(USE_DML)
add_compile_definitions(USE_DML=1)
endif()
if(USE_WEBGPU)
add_compile_definitions(USE_WEBGPU=1)
endif()
if(USE_CUDA)
add_compile_definitions(USE_CUDA=1)
endif()
Expand Down
10 changes: 7 additions & 3 deletions js/node/lib/backend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@

import { Backend, InferenceSession, InferenceSessionHandler, SessionHandler } from 'onnxruntime-common';

import { Binding, binding } from './binding';
import { Binding, binding, initOrt } from './binding';

class OnnxruntimeSessionHandler implements InferenceSessionHandler {
#inferenceSession: Binding.InferenceSession;

constructor(pathOrBuffer: string | Uint8Array, options: InferenceSession.SessionOptions) {
initOrt();

this.#inferenceSession = new binding.InferenceSession();
if (typeof pathOrBuffer === 'string') {
this.#inferenceSession.loadModel(pathOrBuffer, options);
Expand All @@ -27,10 +29,12 @@ class OnnxruntimeSessionHandler implements InferenceSessionHandler {
readonly outputNames: string[];

startProfiling(): void {
// TODO: implement profiling
// startProfiling is a no-op.
//
// if sessionOptions.enableProfiling is true, profiling will be enabled when the model is loaded.
}
endProfiling(): void {
// TODO: implement profiling
this.#inferenceSession.endProfiling();
}

async run(
Expand Down
35 changes: 34 additions & 1 deletion js/node/lib/binding.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

import { InferenceSession, OnnxValue } from 'onnxruntime-common';
import { InferenceSession, OnnxValue, Tensor, TensorConstructor, env } from 'onnxruntime-common';

type SessionOptions = InferenceSession.SessionOptions;
type FeedsType = {
Expand All @@ -28,6 +28,8 @@ export declare namespace Binding {

run(feeds: FeedsType, fetches: FetchesType, options: RunOptions): ReturnType;

endProfiling(): void;

dispose(): void;
}

Expand All @@ -48,4 +50,35 @@ export const binding =
// eslint-disable-next-line @typescript-eslint/naming-convention
InferenceSession: Binding.InferenceSessionConstructor;
listSupportedBackends: () => Binding.SupportedBackend[];
initOrtOnce: (logLevel: number, tensorConstructor: TensorConstructor) => void;
};

let ortInitialized = false;
export const initOrt = (): void => {
if (!ortInitialized) {
ortInitialized = true;
let logLevel = 2;
if (env.logLevel) {
switch (env.logLevel) {
case 'verbose':
logLevel = 0;
break;
case 'info':
logLevel = 1;
break;
case 'warning':
logLevel = 2;
break;
case 'error':
logLevel = 3;
break;
case 'fatal':
logLevel = 4;
break;
default:
throw new Error(`Unsupported log level: ${env.logLevel}`);
}
}
binding.initOrtOnce(logLevel, Tensor);
}
};
5 changes: 5 additions & 0 deletions js/node/script/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ const ONNXRUNTIME_GENERATOR = buildArgs['onnxruntime-generator'];
const REBUILD = !!buildArgs.rebuild;
// --use_dml
const USE_DML = !!buildArgs.use_dml;
// --use_webgpu
const USE_WEBGPU = !!buildArgs.use_webgpu;
// --use_cuda
const USE_CUDA = !!buildArgs.use_cuda;
// --use_tensorrt
Expand Down Expand Up @@ -65,6 +67,9 @@ if (ONNXRUNTIME_GENERATOR && typeof ONNXRUNTIME_GENERATOR === 'string') {
if (USE_DML) {
args.push('--CDUSE_DML=ON');
}
if (USE_WEBGPU) {
args.push('--CDUSE_WEBGPU=ON');
}
if (USE_CUDA) {
args.push('--CDUSE_CUDA=ON');
}
Expand Down
Loading
Loading