From 5a1b808a1a202100946be34521328ad01d822039 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Wed, 11 Jun 2025 16:32:35 +0900 Subject: [PATCH 1/3] wasi-nn: fix tensor_data abi for wasi_ephemeral_nn it's "(list u8)" in the witx definition. the new definition matches both of our own host definition (struct tensor_wasm) and wasmtime. cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4352 --- core/iwasm/libraries/wasi-nn/include/wasi_nn.h | 7 +++---- core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h | 7 +++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/iwasm/libraries/wasi-nn/include/wasi_nn.h b/core/iwasm/libraries/wasi-nn/include/wasi_nn.h index 48ffe12634..2f41732447 100644 --- a/core/iwasm/libraries/wasi-nn/include/wasi_nn.h +++ b/core/iwasm/libraries/wasi-nn/include/wasi_nn.h @@ -108,14 +108,13 @@ WASI_NN_NAME(compute) WASI_NN_ERROR_TYPE WASI_NN_NAME(get_output) (WASI_NN_NAME(graph_execution_context) ctx, uint32_t index, - WASI_NN_NAME(tensor_data) output_tensor, uint32_t output_tensor_max_size, + uint8_t *output_tensor, uint32_t output_tensor_max_size, uint32_t *output_tensor_size) WASI_NN_IMPORT("get_output"); #else WASI_NN_ERROR_TYPE WASI_NN_NAME(get_output) -(graph_execution_context ctx, uint32_t index, - WASI_NN_NAME(tensor_data) output_tensor, uint32_t *output_tensor_size) - WASI_NN_IMPORT("get_output"); +(graph_execution_context ctx, uint32_t index, uint8_t *output_tensor, + uint32_t *output_tensor_size) WASI_NN_IMPORT("get_output"); #endif #endif diff --git a/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h b/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h index 7980197b73..d2e3f4caca 100644 --- a/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h +++ b/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h @@ -99,7 +99,14 @@ typedef enum { // 4-byte f32 elements would have a data array of length 16). Naturally, this // representation requires some knowledge of how to lay out data in // memory--e.g., using row-major ordering--and could perhaps be improved. +#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0 && defined(__wasm__) +typedef struct { + uint8_t *buf; + uint32_t size; +} WASI_NN_NAME(tensor_data); +#else typedef uint8_t *WASI_NN_NAME(tensor_data); +#endif // A tensor. typedef struct { From 6b2bb214f6b923d8dda6c05d6a40c805b4025d06 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Wed, 11 Jun 2025 16:40:03 +0900 Subject: [PATCH 2/3] wamr-wasi-extensions/samples/nn: adapt to the fixed tensor_data abi --- wamr-wasi-extensions/samples/nn/app.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wamr-wasi-extensions/samples/nn/app.c b/wamr-wasi-extensions/samples/nn/app.c index a3e49a6978..15f6377326 100644 --- a/wamr-wasi-extensions/samples/nn/app.c +++ b/wamr-wasi-extensions/samples/nn/app.c @@ -147,7 +147,8 @@ main(int argc, char **argv) wasi_ephemeral_nn_tensor tensor = { .dimensions = { .buf = (uint32_t[]){1, 3, 224, 224,}, .size = 4, }, .type = wasi_ephemeral_nn_type_fp32, - .data = tensordata, + .data.buf = tensordata, + .data.size = tensordatasz, }; nnret = wasi_ephemeral_nn_set_input(ctx, 0, &tensor); unmap_file(tensordata, tensordatasz); From 4f67609f4a295a8ece902eb5c2e9ec40db8929ea Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Wed, 11 Jun 2025 16:40:42 +0900 Subject: [PATCH 3/3] wamr-wasi-extensions/samples/nn-cli: adapt to the fixed tensor_data abi --- wamr-wasi-extensions/samples/nn-cli/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wamr-wasi-extensions/samples/nn-cli/main.c b/wamr-wasi-extensions/samples/nn-cli/main.c index 894ac455ef..0358158f3f 100644 --- a/wamr-wasi-extensions/samples/nn-cli/main.c +++ b/wamr-wasi-extensions/samples/nn-cli/main.c @@ -266,7 +266,8 @@ set_input(char *options) wasi_ephemeral_nn_error nnret; wasi_ephemeral_nn_graph_execution_context c = map_get(&contexts, context_id); - tensor.data = buf; + tensor.data.buf = buf; + tensor.data.size = sz; nnret = wasi_ephemeral_nn_set_input(c, idx, &tensor); unmap_file(buf, sz); if (nnret != wasi_ephemeral_nn_error_success) {