Машинное обучение на Rust: библиотеки и инструменты для Data Science
Rust — язык системного программирования, который завоевывает популярность в сфере Data Science и машинного обучения (ML). Благодаря высокой производительности, безопасности памяти и отсутствию сборщика мусора, Rust становится отличной альтернативой Python для продакшн-систем, где критичны скорость и надежность. В этой статье мы рассмотрим ключевые библиотеки для машинного обучения на Rust, их возможности и примеры использования.
Почему Rust для машинного обучения?
Традиционно ML-разработка ведется на Python из-за богатой экосистемы (TensorFlow, PyTorch, scikit-learn). Однако Python имеет ограничения по скорости выполнения и потреблению памяти. Rust предлагает:
- Производительность на уровне C/C++ — идеально для высоконагруженных инференсов и обучения на больших данных.
- Безопасность памяти — компилятор предотвращает утечки и гонки данных.
- Интеграция с Python — через PyO3 можно создавать быстрые Rust-расширения для Python-кода.
- Встраиваемость — подходит для IoT, веб-сервисов и edge-устройств.
Основные библиотеки ML на Rust
1. Linfa — аналог scikit-learn
Linfa — это фреймворк для классических алгоритмов машинного обучения. Он предоставляет модульную архитектуру, где каждый алгоритм реализован в отдельном крейте. Поддерживаются:
- Линейная и логистическая регрессия
- Метод опорных векторов (SVM)
- Деревья решений и случайный лес
- Кластеризация (K-Means, DBSCAN)
- Понижение размерности (PCA)
Пример: линейная регрессия
use linfa::prelude::*;
use linfa_linear::LinearRegression;
use ndarray::Array2;
fn main() {
// Обучающие данные: X (признаки), y (целевая переменная)
let x = Array2::from_shape_vec((5, 1), vec![1.0, 2.0, 3.0, 4.0, 5.0]).unwrap();
let y = Array2::from_shape_vec((5, 1), vec![2.0, 4.0, 6.0, 8.0, 10.0]).unwrap();
let dataset = Dataset::new(x, y);
let model = LinearRegression::default().fit(&dataset).unwrap();
// Предсказание
let test_x = Array2::from_shape_vec((1, 1), vec![6.0]).unwrap();
let prediction = model.predict(&test_x);
println!("Предсказанное значение: {:?}", prediction);
}
2. Burn — нейросети и глубокое обучение
Burn — современный фреймворк для глубокого обучения, написанный на Rust. Он поддерживает:
- Автоматическое дифференцирование
- Различные бэкенды: CPU (ndarray), GPU (CUDA, Vulkan)
- Сверточные и рекуррентные сети
- Оптимизаторы (Adam, SGD)
Пример: простая нейронная сеть
use burn::tensor::Tensor;
use burn::nn::{Linear, Relu};
use burn::optim::Adam;
fn main() {
// Определение модели
let model = Linear::new(10, 2);
let input = Tensor::random([1, 10], burn::tensor::Distribution::Normal);
// Прямой проход
let output = model.forward(input);
println!("Выход сети: {:?}", output);
}
3. SmartCore — полный цикл ML
SmartCore — библиотека, покрывающая весь пайплайн: от предобработки данных до оценки модели. Включает:
- Нормализацию, масштабирование признаков
- Классификацию (KNN, Naive Bayes)
- Регрессию (линейная, гребневая)
- Метрики качества (accuracy, F1-score)
4. Candle — легковесный фреймворк от Hugging Face
Candle — минималистичный ML-фреймворк с акцентом на инференс. Отлично подходит для запуска моделей на CPU и edge-устройствах. Поддерживает загрузку моделей формата PyTorch.
Инструменты для работы с данными
Для полноценного ML-пайплайна на Rust потребуются также:
- ndarray — многомерные массивы (аналог NumPy).
- polars — быстрая работа с табличными данными (