burn/burn-tensor/README.md

66 lines
2.1 KiB
Markdown
Raw Normal View History

2022-07-28 03:44:41 +08:00
# Burn Tensor
2022-09-05 02:22:56 +08:00
> [Burn](https://github.com/burn-rs/burn) Tensor Library
[![Current Crates.io Version](https://img.shields.io/crates/v/burn-tensor.svg)](https://crates.io/crates/burn-tensor)
[![license](https://shields.io/badge/license-MIT%2FApache--2.0-blue)](https://github.com/burn-rs/burn-tensor/blob/master/README.md)
2022-07-28 03:44:41 +08:00
This library provides multiple tensor implementations hidden behind an easy to use API that supports reverse mode automatic differentiation.
## Features
* Flexible ✨
* CPU + GPU 🙏
* Multi-Threads 🚀
* Intuitive Usage 😌
* No Global State 🚫
* Multiple Backends 🦾
* Reverse Mode Autodiff 🔥
### Backends
2022-09-05 02:22:56 +08:00
For now, only two backends are implementated, but adding new ones should not be that hard.
2022-07-28 03:44:41 +08:00
* [X] Pytorch using [tch-rs](https://github.com/LaurentMazare/tch-rs)
* [X] 100% Rust backend using [ndarray](https://github.com/rust-ndarray/ndarray)
* [ ] Tensorflow using [tensorflow-rust](https://github.com/tensorflow/rust)
2022-09-05 02:22:56 +08:00
* [ ] CuDNN using RustCUDA[tensorflow-rust](https://github.com/Rust-GPU/Rust-CUDA)
2022-07-28 03:44:41 +08:00
* [ ] ...
### Autodiff
Automatic differentiation is implemented as just another tensor backend without any global state.
It's possible since we keep track of the order in which each operation as been executed and the tape is only created when calculating the gradients.
To do so, each operation creates a new node which has a reference to its parent nodes.
Therefore, creating the tape only requires a simple and efficent graph traversal algorithm.
```rust
let x = ADTensor::from_tensor(x_ndarray);
let y = ADTensor::from_tensor(y_ndarray);
let z = x.matmul(&y);
let grads = z.backward();
2022-09-05 02:22:56 +08:00
let x_grad = x.grad(&grads);
let y_grad = y.grad(&grads);
2022-07-28 03:44:41 +08:00
```
2022-08-01 00:06:25 +08:00
## Cuda
To run with CUDA set `TORCH_CUDA_VERSION=cu113`.
2022-12-27 05:30:25 +08:00
## Notes
2022-07-28 03:44:41 +08:00
This crate can be use alone without the entire burn stack and with only selected backends for smaller binaries.
## Feature Flags
This crate can be used without the standard library (`#![no_std]`) with `alloc` by disabling
the default `std` feature.
* `std` - enables the standard library.
* `burn-tensor-testgen` - enables test macros for genarating tensor tests.