Files
wasmtime/crates/wasi-nn/examples/wasi-nn-rust-bindings
Andrew Brown a61f068c64 Add an initial wasi-nn implementation for Wasmtime (#2208)
* Add an initial wasi-nn implementation for Wasmtime

This change adds a crate, `wasmtime-wasi-nn`, that uses `wiggle` to expose the current state of the wasi-nn API and `openvino` to implement the exposed functions. It includes an end-to-end test demonstrating how to do classification using wasi-nn:
 - `crates/wasi-nn/tests/classification-example` contains Rust code that is compiled to the `wasm32-wasi` target and run with a Wasmtime embedding that exposes the wasi-nn calls
 - the example uses Rust bindings for wasi-nn contained in `crates/wasi-nn/tests/wasi-nn-rust-bindings`; this crate contains code generated by `witx-bindgen` and eventually should be its own standalone crate

* Test wasi-nn as a CI step

This change adds:
 - a GitHub action for installing OpenVINO
 - a script, `ci/run-wasi-nn-example.sh`, to run the classification example
2020-11-16 12:54:00 -06:00
..

wasi-nn Rust Bindings

This crate contains API bindings for wasi-nn system calls in Rust. It is similar in purpose to the wasi bindings but this crate provides access to the optional neural network functionality from WebAssembly.

Note

: These bindings are experimental (use at your own risk) and subject to upstream changes in the wasi-nn specification.

Note

: In the future this crate may be (should be) moved to its own repository, like the wasi bindings.

Use

Depend on this crate in your Cargo.toml:

[dependencies]
wasi-nn = "0.1.0"

Use the wasi-nn APIs in your application:

use wasi_nn;

unsafe {
    wasi_nn::load(
        &[&xml.into_bytes(), &weights],
        wasi_nn::GRAPH_ENCODING_OPENVINO,
        wasi_nn::EXECUTION_TARGET_CPU,
    )
    .unwrap()
}

Compile the application to WebAssembly:

cargo build --target=wasm32-wasi

Run the generated Wasm in a runtime supporting wasi-nn. Currently Wasmtime has experimental support using the Wasmtime APIs; see main.rs for an example of how this is accomplished.

Generation

This crate contains code (src/generated.rs) generated by witx-bindgen. To regenerate this code, run witx-bindgen against the wasi-nn WITX file:

.../crates/witx-bindgen$ cargo run .../wasi-nn/phases/ephemeral/witx/wasi_ephemeral_nn.witx

License

This project is licensed under the Apache 2.0 license. See LICENSE for more details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.