Машинное обучение на Rust: обзор библиотек для Data Science

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Машинное обучение на Rust: современные библиотеки и инструменты

Экосистема машинного обучения долгое время ассоциировалась исключительно с Python. Однако Rust, благодаря своей производительности, безопасности памяти и нулевым накладным расходам, всё активнее внедряется в ML-инструментарий. В этой статье мы разберём ключевые библиотеки для машинного обучения на языке Rust, которые позволяют строить, обучать и развёртывать модели с эффективностью, недостижимой для интерпретируемых языков.

Почему Rust для машинного обучения?

Rust предлагает три главных преимущества для ML:

  • Производительность — скорость выполнения кода сопоставима с C/C++.
  • Безопасность — система владения (ownership) исключает целые классы ошибок памяти.
  • Параллелизм — встроенная модель потоков без гонок данных.

Однако Rust не пытается заменить Python в исследовательской части. Его ниша — production-среда, встраиваемые системы, высоконагруженные сервисы и пограничные вычисления (edge computing).

1. Linfa — полный набор алгоритмов классического ML

Проект linfa (аналог scikit-learn для Rust) предоставляет модульную структуру для задач обучения с учителем и без. Библиотека активно развивается при поддержке сообщества Rust-ML.

Основные компоненты Linfa

  • linfa-clustering — K-Means, DBSCAN, Gaussian Mixture
  • linfa-linear — линейная и логистическая регрессия
  • linfa-svm — метод опорных векторов
  • linfa-trees — деревья решений и случайный лес
  • linfa-nn — методы ближайших соседей

Пример: линейная регрессия с Linfa

use linfa::prelude::*;
use linfa_linear::LinearRegression;
use ndarray::array;

fn main() {
    // Обучающие данные: (x, y)
    let x = array![[1.0], [2.0], [3.0], [4.0]];
    let y = array![2.0, 4.0, 6.0, 8.0];

    // Создаём датасет
    let dataset = Dataset::new(x, y);

    // Обучаем модель
    let model = LinearRegression::default().fit(&dataset).unwrap();

    // Предсказание для x=5
    let pred = model.predict(&array![[5.0]]);
    println!("Предсказание: {}", pred);
}

2. Burn — фреймворк глубокого обучения с поддержкой GPU

Burn — это современный фреймворк для нейронных сетей, написанный на Rust. Он поддерживает автоматическое дифференцирование, работу на GPU через WGPU и Vulkan, а также экспорт в ONNX.

Ключевые возможности Burn

  • Динамические и статические вычислительные графы
  • Бэкенды: Torch, WGPU, Ndarray, Fusion
  • Встроенные оптимизаторы (Adam, SGD, AdamW)
  • Поддержка 1D, 2D, 3D свёрток

Пример: простой перцептрон на Burn

use burn::tensor::{Tensor, backend::Backend};
use burn::nn::{Linear, LinearConfig};
use burn::module::Module;

#[derive(Module)]
struct MLP<B: Backend> {
    layer1: Linear<B>,
    layer2: Linear<B>,
}

impl<B: Backend> MLP<B> {
    fn new(device: &B::Device) -> Self {
        Self {
            layer1: LinearConfig::new(2, 16).init(device),
            layer2: LinearConfig::new(16, 1).init(device),
        }
    }

    fn forward(&self, input: Tensor<B, 2>) -> Tensor<B, 2> {
        let x = self.layer1.forward(input).relu();
        self.layer2.forward(x)
    }
}

3. Candle — минималистичный фреймворк от Hugging Face

Разработанный командой Hugging Face, Candle ориентирован на простоту и скорость. Он не использует CUDA (только CPU и Metal), что делает его идеальным для инференса на Mac и edge-устройствах.

Особенности Candle

  • Размер бинарника менее 10 МБ
  • Готовая поддержка моделей: LLaMA, Whisper, BERT
  • Квантование (4-bit, 8-bit) для ускорения
  • Работа без зависимостей Python

Загрузка и инференс модели BERT

                    

Рекомендаций