#machine-learning #deep-learning #tensor

rai-core

ML framework with Ergonomic APIs in Rust

10 breaking releases

new 0.11.0 May 14, 2024
0.10.0 Mar 26, 2024
0.9.0 Feb 24, 2024
0.2.0 Dec 28, 2023

#859 in Machine learning

Download history 18/week @ 2024-01-23 237/week @ 2024-02-20 104/week @ 2024-02-27 7/week @ 2024-03-05 6/week @ 2024-03-12 157/week @ 2024-03-26 13/week @ 2024-04-02

890 downloads per month
Used in 5 crates (3 directly)

MIT/Apache

295KB
9K SLoC

RAI

Rust Docs Status Latest Version Discord

ML framework with ergonomic APIs in Rust. Lazy computation and composable transformations like JAX.

Installation

cargo add rai

Code snippets

Function transformations (jvp, vjp, grad, value_and_grad)

use rai::{grad, Cpu, Tensor, F32};

fn f(x: &Tensor) -> Tensor {
    x.sin()
}

fn main() {
    let grad_fn = grad(grad(f));
    let x = &Tensor::ones([1], F32, &Cpu);
    let grad = grad_fn(x);
    println!("{}", grad.dot_graph());
    println!("{}", grad);
}

NN Modules, Optimizer and loss functions

fn loss_fn<M: TrainableModule<Input = Tensor, Output = Tensor>>(
    model: &M,
    input: &Tensor,
    labels: &Tensor,
) -> (Tensor, Aux<Tensor>) {
    let logits = model.forward(input);
    let loss = softmax_cross_entropy(&logits, labels).mean(..);
    (loss, Aux(logits))
}

fn train_step<M: TrainableModule<Input = Tensor, Output = Tensor>, O: Optimizer>(
    optimizer: &mut O,
    model: &M,
    input: &Tensor,
    labels: &Tensor,
) {
    let vg_fn = value_and_grad(loss_fn);
    let ((_loss, Aux(_logits)), (grads, ..)) = vg_fn((model, input, labels));
    let mut params = optimizer.step(&grads);
    eval(&params);
    model.update_params(&mut params);
}

Examples

  • linear_regression
    • cargo run --bin linear_regression --release
  • mnist
    • cargo run --bin mnist --release
    • cargo run --bin mnist --release --features=cuda
  • mnist-cnn
    • cargo run --bin mnist-cnn --release
    • cargo run --bin mnist-cnn --release --features=cuda
  • phi2
    • cargo run --bin phi2 --release
    • cargo run --bin phi2 --release --features=cuda
  • phi3
    • cargo run --bin phi3 --release
    • cargo run --bin phi3 --release --features=cuda
  • qwen2
    • cargo run --bin qwen2 --release
    • cargo run --bin qwen2 --release --features=cuda
  • gemma
    • accept license agreement in https://huggingface.co/google/gemma-2b
    • pip install huggingface_hub
    • login to hf huggingface-cli login
    • cargo run --bin gemma --release
    • cargo run --bin gemma --release --features=cuda
  • vit
    • cargo run --bin vit --release
    • cargo run --bin vit --release --features=cuda

LICENSE

This project is licensed under either of

at your option.

Dependencies

~2–14MB
~193K SLoC