Apprentissage automatique en Rust : bibliothèques et outils modernes
Le langage Rust, connu pour ses performances et sa sécurité mémoire, fait activement son entrée dans le domaine de l'apprentissage automatique (ML). Bien que l'écosystème ML en Rust soit plus jeune qu'en Python, il propose déjà des solutions matures pour construire, entraîner et déployer des modèles. Dans cet article, nous examinerons les bibliothèques clés qui permettent de résoudre des problèmes d'apprentissage automatique en Rust, et nous fournirons des exemples pratiques.
Pourquoi Rust pour l'apprentissage automatique ?
Rust offre des avantages uniques :
- Performances : Le code compilé en Rust est comparable en vitesse au C/C++, ce qui est crucial pour l'entraînement de grands modèles.
- Sécurité : Le système de possession (ownership) et d'emprunt (borrowing) élimine des classes entières d'erreurs (data races, pointeurs nuls).
- Multiplateforme : Se compile facilement pour WebAssembly, les appareils mobiles et les systèmes embarqués.
- Intégration avec Python : Vous pouvez écrire des modules hautes performances en Rust et les appeler depuis Python via PyO3.
Bibliothèques principales pour le ML en Rust
1. Linfa — le couteau suisse du ML
Linfa est l'équivalent de scikit-learn pour Rust. Elle fournit une interface unifiée pour les algorithmes standards. Elle prend en charge :
- La régression linéaire et logistique
- Les machines à vecteurs de support (SVM)
- Le clustering (K-Means, DBSCAN)
- Les méthodes de réduction de dimensionnalité (PCA)
- Les arbres de décision et la forêt aléatoire
Exemple de régression linéaire avec Linfa :
use linfa::prelude::*;use linfa_linear::LinearRegression;use ndarray::Array2;
fn main() -> Result<(), Box<dyn std::error::Error>> { // Créons des données synthétiques : 100 points, 3 caractéristiques let x = Array2::random((100, 3), rand::distributions::Uniform::new(-1.0, 1.0)); let true_weights = arr2(&[[2.0], [-1.0], [0.5]]); let y = x.dot(&true_weights) + 0.1; // ajout de bruit
let dataset = Dataset::new(x, y); // Entraînement du modèle let model = LinearRegression::default().fit(&dataset)?; // Coefficients du modèle println!("Poids : {:?}", model.params()); // Prédiction let predicted = model.predict(&dataset); println!("MSE : {:?}", predicted.mean_squared_error(&dataset)?); Ok(())}2. Burn — un framework moderne pour l'apprentissage profond
Burn est un framework flexible pour les réseaux de neurones, entièrement écrit en Rust. Ses caractéristiques :
- Prise en charge du GPU (CUDA, Vulkan, Metal, WebGPU)
- Différenciation automatique (autograd)
- Système de backend flexible (torch, ndarray, wgpu)
- Graphes de calcul dynamiques
- Export vers ONNX
Exemple d'un réseau de neurones simple avec Burn :
use burn::tensor::{Tensor, backend::Backend};use burn::nn::{Linear, Relu, Sequential};
// Définition de l'architecture du réseaustruct MyModel<B: Backend> { linear1: Linear<B>, linear2: Linear<B>, activation: Relu,}
impl<B: Backend> MyModel<B> { fn new(device: &B::Device) -> Self { Self { linear1: Linear::new(784, 256, device), linear2: Linear::new(256, 10, device), activation: Relu::new(), } } fn forward(&self, input: Tensor<B, 2>) -> Tensor<B, 2> { let x = self.linear1.forward(input); let x = self.activation.forward(x); self.linear2.forward(x) }}
fn main() { // Utilisation du backend CPU (ndarray) type MyBackend = burn::backend::NdArray; let device = Default::default(); let model = MyModel::<MyBackend>::new(&device); let input = Tensor::<MyBackend, 2>::ra Aussi dans la bibliothèque
Axios pour JavaScript (Node.js) : guide complet avec exemples
Génération de rapports PDF en Swift pour iOS et macOS avec PDFKit et Core Graphics
Génération de rapports PDF en TypeScript : bibliothèques et outils
Tower Rust : guide complet avec exemples concrets
Parsing HTML en Node.js : TOP bibliothèques et exemples de code