Библиотека Rust Burn для глубокого обучения

Библиотека Rust Burn для углубленного обучения

 

Что такое Rust Burn?

 

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

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

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

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

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

Основные функции:

  • Гибкий и динамический вычислительный граф
  • Потокобезопасные структуры данных
  • Интуитивные абстракции для упрощения процесса разработки
  • Молниеносная производительность во время обучения и вывода
  • Поддержка множества вариантов реализации как для ЦП, так и для графических процессоров
  • Полная поддержка ведения журнала, метрик и создания контрольных точек во время обучения
  • Маленькое, но активное сообщество разработчиков

 

Начало работы

 

Установка Rust

 

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

Чтобы установить его, воспользуйтесь официальным руководством. Вы также можете ознакомиться с руководством GeeksforGeeks по установке Rust на Windows и Linux с скриншотами.

 

 

Установка Burn

 

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

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

cargo new new_burn_app

 

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

cd new_burn_app

 

Затем добавьте Burn в качестве зависимости, а также функцию wgpu для работы с графическими процессорами:

cargo add burn --features wgpu

 

В конце соберите проект, чтобы установить Burn:

cargo build

 

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

 

Пример кода

 

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

 

Чтобы выполнить следующий код, откройте и замените содержимое 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: Начало работы.

Модуль Позиционно-Зависимого Прямого Прохода

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

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 repository.

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

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

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

Предобученные модели

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

Заключение

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

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

 

Ресурсы

 

  

****[Abid Ali Awan](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) – сертифицированный профессионал в области науки о данных, который любит создавать модели машинного обучения. В настоящее время он сосредоточен на создании контента и написании технических блогов о технологиях машинного обучения и науки о данных. Абид имеет степень магистра по управлению технологиями и степень бакалавра по телекоммуникационной инженерии. Его цель – создать продукт искусственного интеллекта с использованием графовых нейронных сетей для студентов, страдающих от психических расстройств.