# Rust Burn Library for Deep Learning

# Burn

Burn представляет собой новый фреймворк глубокого обучения, полностью написанный на языке программирования Rust. Основная цель создания этого фреймворка вместо использования существующих, таких как PyTorch или TensorFlow, заключается в создании универсального инструмента, который бы идеально подходил различным пользователям, включая исследователей, инженеров по машинному обучению и инженеров программного обеспечения низкого уровня.

Основные принципы Rust Burn: **гибкость**, **производительность** и **простота использования**.

**Гибкость** обеспечивается возможностью быстрого внедрения передовых исследовательских идей и проведения экспериментов.

**Производительность** достигается за счет оптимизации, включая использование специфических для аппаратного обеспечения функций, таких как Tensor Cores на графических процессорах Nvidia.

**Простота использования** обусловлена упрощением рабочего процесса по обучению, развертыванию и запуску моделей в производственной среде.

**Основные особенности:**

* Гибкий и динамический вычислительный граф
    
* Потокобезопасные структуры данных
    
* Интуитивно понятные абстракции для упрощения процесса разработки
    
* Высокая производительность при обучении и выводе
    
* Поддержка многих реализаций для CPU и GPU
    
* Полная поддержка протоколирования, метрик и контрольных точек во время обучения
    
* Активное, хотя и небольшое, сообщество разботчиков
    

# Установка Rust

![Rust Burn Library for Deep Learning](https://www.kdnuggets.com/wp-content/uploads/awan_rust_burn_library_deep_learning_1.png align="left")

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

# Установка Burn

Чтобы использовать Rust Burn, сначала необходимо установить Rust на вашу систему. После правильной настройки Rust вы можете создать новое приложение на Rust с помощью `cargo`, менеджера пакетов Rust.

Выполните следующую команду в вашем текущем каталоге:

```bash
cargo new new_burn_app
```

Перейдите в этот новый каталог:

```bash
cd new_burn_app
```

Далее добавьте Burn как зависимость, а также функцию бэкенда WGPU, которая позволяет выполнять операции на GPU:

```bash
cargo add burn --features wgpu
```

В конце скомпилируйте проект для установки Burn:

```bash
cargo build
```

Это установит фреймворк Burn вместе с бэкендом WGPU. WGPU позволяет Burn выполнять низкоуровневые операции на GPU.

# Примеры кода

**Поэлементное Сложение**

Чтобы запустить следующий код, откройте и замените содержимое в src/main.rs:

```rust
use burn::tensor::Tensor;
use burn::backend::WgpuBackend;

// Псевдоним для используемого бэкенда.
type Backend = WgpuBackend;

fn main() {
    // Создание двух тензоров, первый с явными значениями и второй с единицами, имеющими такую же форму, как у первого
    let tensor_1 = Tensor::from_data([[2., 3.], [4., 5.]]);
    let tensor_2 = Tensor::ones_like(&tensor_1);

    // Выводим результат поэлементного сложения (с использованием бэкенда WGPU) двух тензоров.
    println!("{}", tensor_1 + tensor_2);
}
```

В основной функции мы создали два тензора с бэкендом WGPU и произвели их сложение.

Чтобы выполнить код, введите `cargo run` в терминале.

**Вывод:**

Теперь вы должны увидеть результат сложения.

```plaintext
Tensor {
  data: [[3.0, 4.0], [5.0, 6.0]],
  shape: [2, 2],
  device: BestAvailable,
  backend: "wgpu",
  kind: "Float",
  dtype: "f32",
}
```

*Примечание: данный код является примером из* Burn Book: [Getting started](https://burn-rs.github.io/book/getting-started.html)*.*

**Поэлементный Модуль Прямого Прохода**

Вот пример простого использования фреймворка. Мы объявляем поэлементный модуль прямого прохода и его реализацию в этом фрагменте кода.

```rust
use burn::nn;
use burn::module::Module;
use burn::tensor::backend::Backend;

#[derive(Module, Debug)]
pub struct PositionWiseFeedForward<B: Backend> {
    linear_inner: Linear<B>,
    linear_outer: Linear<B>,
    dropout: Dropout,
    gelu: GELU,
}

impl PositionWiseFeedForward<B> {
    pub fn forward(&self, input: Tensor<B, D>) -> Tensor<B, D> {
        let x = self.linear_inner.forward(input);
        let x = self.gelu.forward(x);
        let x = self.dropout.forward(x);

        self.linear_outer.forward(x)
    }
}
```

Вышеуказанный код взят из репозитория GitHub.

# Примеры Проектов

Чтобы узнать больше о примерах и запустить их, скачайте репозиторий [https://github.com/burn-rs/burn](https://github.com/burn-rs/burn) и выполните указанные проекты:

* MNIST: Обучите модель на CPU или GPU с использованием различных бэкендов.
    
* MNIST Inference Web: Вывод модели в браузере.
    
* Text Classification: Обучите кодировщик трансформера с нуля на GPU.
    
* Text Generation: Создайте и обучите авторегрессивный трансформер с нуля на GPU.
    

# Предварительно Обученные Модели

Для создания вашего AI-приложения вы можете использовать следующие предварительно обученные модели и дополнительно настроить их на своем наборе данных:

* SqueezeNet: squeezenet-burn Llama 2: Gadersd/llama2-burn Whisper:
    
* Gadersd/whisper-burn Stable Diffusion v1.4: Gadersd/stable-diffusion-burn
    

# Итог

Rust Burn — новый и перспективный фреймворк глубокого обучения, который позволяет разработчикам на Rust максимально использовать преимущества языка. Обеспечивая гибкость, производительность и удобство, Burn может стать альтернативой устоявшимся решениям в области глубокого обучения. Несмотря на начальную стадию развития, фреймворк обещает большие возможности для специалистов и исследователей.

# Ссылки

[Оригинал этой статьи](https://www.kdnuggets.com/rust-burn-library-for-deep-learning)

[Книга Burn Book](https://burn-rs.github.io/book/overview.html)

[Github репозиторий](https://github.com/burn-rs/burn)

[Сайт Burn](https://burn-rs.github.io/)
