Maschinelles Lernen mit Rust: Moderne Bibliotheken und Werkzeuge
Das Ökosystem des maschinellen Lernens war lange Zeit ausschließlich mit Python verbunden. Rust hingegen wird aufgrund seiner Leistungsfähigkeit, Speichersicherheit und Nullkostenabstraktionen zunehmend in ML-Werkzeugen eingesetzt. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für maschinelles Lernen in der Sprache Rust, mit denen sich Modelle mit einer Effizienz erstellen, trainieren und bereitstellen lassen, die für interpretierte Sprachen unerreichbar ist.
Warum Rust für maschinelles Lernen?
Rust bietet drei Hauptvorteile für ML:
- Leistung — die Ausführungsgeschwindigkeit des Codes ist mit C/C++ vergleichbar.
- Sicherheit — das Ownership-System schließt ganze Klassen von Speicherfehlern aus.
- Parallelität — ein integriertes Thread-Modell ohne Datenkonflikte.
Rust versucht jedoch nicht, Python im Forschungsbereich zu ersetzen. Seine Nische ist die Produktionsumgebung, eingebettete Systeme, hochbelastete Dienste und Edge Computing.
1. Linfa — Vollständiger Satz von Algorithmen des klassischen ML
Das Projekt linfa (Analogon zu scikit-learn für Rust) bietet eine modulare Struktur für überwachte und unüberwachte Lernaufgaben. Die Bibliothek wird aktiv mit Unterstützung der Rust-ML-Community weiterentwickelt.
Hauptkomponenten von Linfa
linfa-clustering— K-Means, DBSCAN, Gaussian Mixturelinfa-linear— Lineare und logistische Regressionlinfa-svm— Support Vector Machineslinfa-trees— Entscheidungsbäume und Random Forestlinfa-nn— Nächste-Nachbarn-Verfahren
Beispiel: Lineare Regression mit Linfa
use linfa::prelude::*;use linfa_linear::LinearRegression;use ndarray::array;
fn main() { // Trainingsdaten: (x, y) let x = array![[1.0], [2.0], [3.0], [4.0]]; let y = array![2.0, 4.0, 6.0, 8.0];
// Datensatz erstellen let dataset = Dataset::new(x, y);
// Modell trainieren let model = LinearRegression::default().fit(&dataset).unwrap();
// Vorhersage für x=5 let pred = model.predict(&array![[5.0]]); println!("Vorhersage: {}", pred);}2. Burn — Deep-Learning-Framework mit GPU-Unterstützung
Burn ist ein modernes Framework für neuronale Netze, geschrieben in Rust. Es unterstützt automatische Differentiation, Arbeit auf der GPU über WGPU und Vulkan sowie den Export nach ONNX.
Wichtige Funktionen von Burn
- Dynamische und statische Berechnungsgraphen
- Backends: Torch, WGPU, Ndarray, Fusion
- Integrierte Optimierer (Adam, SGD, AdamW)
- Unterstützung für 1D-, 2D-, 3D-Faltungen
Beispiel: Einfaches Perzeptron mit 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 — Minimalistisches Framework von Hugging Face
Entwickelt vom Hugging Face Team, ist Candle auf Einfachheit und Geschwindigkeit ausgelegt. Es verwendet kein CUDA (nur CPU und Metal), was es ideal für Inferenz auf Mac- und Edge-Geräten macht.
Besonderheiten von Candle
- Binärgröße unter 10 MB
- Fertige Unterstützung für Modelle: LLaMA, Whisper, BERT