3 releases (breaking)
new 0.2.0 | Nov 22, 2024 |
---|---|
0.1.0 | Nov 19, 2024 |
0.0.0 | Nov 19, 2024 |
#351 in WebAssembly
361 downloads per month
Used in floretta-cli
34KB
815 lines
Reverse-mode automatic differentiation for WebAssembly.
The typical workflow is to create an empty config via Autodiff::new
, use
Autodiff::export
to specify one or more functions to export the backward pass, and then use
Autodiff::transform
to process a Wasm module.
For example, if you have wat
and Wasmtime installed:
use wasmtime::{Engine, Instance, Module, Store};
let input = wat::parse_str(r#"
(module
(func (export "square") (param f64) (result f64)
(f64.mul (local.get 0) (local.get 0))))
"#).unwrap();
let mut ad = floretta::Autodiff::new();
ad.export("square", "backprop");
let output = ad.transform(&input).unwrap();
let engine = Engine::default();
let mut store = Store::new(&engine, ());
let module = Module::new(&engine, &output).unwrap();
let instance = Instance::new(&mut store, &module, &[]).unwrap();
let square = instance.get_typed_func::<f64, f64>(&mut store, "square").unwrap();
let backprop = instance.get_typed_func::<f64, f64>(&mut store, "backprop").unwrap();
assert_eq!(square.call(&mut store, 3.).unwrap(), 9.);
assert_eq!(backprop.call(&mut store, 1.).unwrap(), 6.);
Dependencies
~3.5MB
~75K SLoC