Aprendizado de Máquina em Rust: bibliotecas e ferramentas modernas
O ecossistema de aprendizado de máquina foi associado exclusivamente ao Python por muito tempo. No entanto, Rust, graças ao seu desempenho, segurança de memória e custos zero de abstração, está cada vez mais sendo integrado ao ferramental de ML. Neste artigo, vamos analisar as principais bibliotecas para aprendizado de máquina na linguagem Rust, que permitem construir, treinar e implantar modelos com uma eficiência inatingível para linguagens interpretadas.
Por que Rust para aprendizado de máquina?
Rust oferece três principais vantagens para ML:
- Desempenho — a velocidade de execução do código é comparável a C/C++.
- Segurança — o sistema de ownership elimina classes inteiras de erros de memória.
- Paralelismo — modelo de threads integrado sem condições de corrida de dados.
No entanto, Rust não tenta substituir o Python na parte de pesquisa. Seu nicho é o ambiente de produção, sistemas embarcados, serviços de alta carga e computação de borda (edge computing).
1. Linfa — conjunto completo de algoritmos de ML clássico
O projeto linfa (análogo ao scikit-learn para Rust) fornece uma estrutura modular para tarefas de aprendizado supervisionado e não supervisionado. A biblioteca está em desenvolvimento ativo com o apoio da comunidade Rust-ML.
Componentes principais do Linfa
linfa-clustering— K-Means, DBSCAN, Gaussian Mixturelinfa-linear— regressão linear e logísticalinfa-svm— máquina de vetores de suportelinfa-trees— árvores de decisão e floresta aleatórialinfa-nn— métodos de vizinhos mais próximos
Exemplo: regressão linear com Linfa
use linfa::prelude::*;use linfa_linear::LinearRegression;use ndarray::array;
fn main() { // Dados de treinamento: (x, y) let x = array![[1.0], [2.0], [3.0], [4.0]]; let y = array![2.0, 4.0, 6.0, 8.0];
// Criando o dataset let dataset = Dataset::new(x, y);
// Treinando o modelo let model = LinearRegression::default().fit(&dataset).unwrap();
// Previsão para x=5 let pred = model.predict(&array![[5.0]]); println!("Previsão: {}", pred);}2. Burn — framework de aprendizado profundo com suporte a GPU
Burn é um framework moderno para redes neurais, escrito em Rust. Ele suporta diferenciação automática, execução em GPU via WGPU e Vulkan, além de exportação para ONNX.
Principais recursos do Burn
- Grafos computacionais dinâmicos e estáticos
- Backends: Torch, WGPU, Ndarray, Fusion
- Otimizadores integrados (Adam, SGD, AdamW)
- Suporte a convoluções 1D, 2D, 3D
Exemplo: perceptron simples em 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 — framework minimalista do Hugging Face
Desenvolvido pela equipe do Hugging Face, o Candle é focado em simplicidade e velocidade. Ele não usa CUDA (apenas CPU e Metal), o que o torna ideal para inferência em Mac e dispositivos de borda.
Características do Candle
- Tamanho do binário inferior a 10 MB
- Suporte pronto para modelos: LLaMA, Whisper, BERT
Também na biblioteca
ts-functional-pipe para TypeScript: guia completo com exemplos
Registro para JavaScript (Node.js): melhores soluções
Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch
Trabalho com S3 e armazenamentos em nuvem em C# (.NET): biblioteca AWS SDK
Internacionalização (i18n) em Go (Golang): Guia Completo