Crate wasi_nn_safe

source ·
Expand description

wasi-nn-safe

Introduction

This library provides some convenient and safe wrapper APIs for wasi-nn system calls, which can replace the unsafe wasi-nn APIs.

Quick Start

use wasi_nn_safe::{ExecutionTarget, GraphBuilder, GraphEncoding, TensorType};

fn test(model_path: &'static str) -> Result<(), wasi_nn_safe::Error> {
    // prepare input and output buffer.
    let input = vec![0f32; 224 * 224 * 3];
    let input_dim = vec![1, 224, 224, 3];
    // the input and output buffer can be any sized type, such as u8, f32, etc.
    let mut output_buffer = vec![0f32; 1001];

    // build a tflite graph from file.
    let graph = GraphBuilder::new(GraphEncoding::TensorflowLite, ExecutionTarget::CPU)
        .build_from_files([model_path])?;
    // init graph execution context for this graph.
    let mut ctx = graph.init_execution_context()?;
    // set input
    ctx.set_input(0, TensorType::F32, &input_dim, &input)?;
    // do inference
    ctx.compute()?;
    // copy output to buffer
    let output_bytes = ctx.get_output(0, &mut output_buffer)?;

    assert_eq!(output_bytes, output_buffer.len() * std::mem::size_of::<f32>());
    Ok(())
}

Note

This crate is experimental and will change to adapt the upstream wasi-nn specification.

Now version is based on git commit 0f77c48ec195748990ff67928a4b3eef5f16c2de

Re-exports

Structs

  • An execution graph for performing inference (i.e., a model), which can create instances of GraphExecutionContext.
  • Graph factory, which can be used in order to configure the properties of a new graph. Methods can be chained on it in order to configure it.
  • Bind a Graph to the input and output for an inference.

Enums

  • wasi-nn-safe API error enum
  • Define where the graph should be executed. Now the available devices are CPU, GPU, TPU
  • Describes the encoding of the graph. This allows the API to be implemented by various backends that encode (i.e., serialize) their graph IR with different formats. Now the available backends are Openvino, Onnx, Tensorflow, Pytorch, TensorflowLite
  • The type of the elements in a tensor.