Skip to main content

Command Palette

Search for a command to run...

Rust Burn Library for Deep Learning

Новый фреймворк глубокого обучения(ML) на Rust, который стремится достичь баланса между гибкостью, производительностью и простой использования

Updated
3 min read
Rust Burn Library for Deep Learning
S

Professional pentester, technical writer, telegram channel owner

Burn

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

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

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

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

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

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

  • Гибкий и динамический вычислительный граф

  • Потокобезопасные структуры данных

  • Интуитивно понятные абстракции для упрощения процесса разработки

  • Высокая производительность при обучении и выводе

  • Поддержка многих реализаций для CPU и GPU

  • Полная поддержка протоколирования, метрик и контрольных точек во время обучения

  • Активное, хотя и небольшое, сообщество разботчиков

Установка Rust

Rust Burn Library for Deep Learning

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

Установка Burn

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

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

cargo new new_burn_app

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

cd new_burn_app

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

cargo add burn --features wgpu

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

cargo build

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

Примеры кода

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

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

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 в терминале.

Вывод:

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

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.

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

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

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 и выполните указанные проекты:

  • 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 может стать альтернативой устоявшимся решениям в области глубокого обучения. Несмотря на начальную стадию развития, фреймворк обещает большие возможности для специалистов и исследователей.

Ссылки

Оригинал этой статьи

Книга Burn Book

Github репозиторий

Сайт Burn

More from this blog