基于Rust的机器学习:现代库与工具
Rust语言以其高性能和内存安全性著称,正积极进入机器学习(ML)领域。尽管Rust的ML生态系统比Python年轻,但它已经提供了用于构建、训练和部署模型的成熟解决方案。在本文中,我们将介绍解决Rust机器学习任务的关键库,并提供实际示例。
为什么选择Rust进行机器学习?
Rust提供了独特的优势:
- 性能: Rust编译后的代码速度与C/C++相当,这对于训练大型模型至关重要。
- 安全性: 所有权(ownership)和借用(borrowing)系统消除了整类错误(数据竞争、空指针)。
- 跨平台性: 易于编译为WebAssembly、移动设备和嵌入式系统。
- 与Python集成: 可以用Rust编写高性能模块,并通过PyO3从Python调用它们。
Rust的主要ML库
1. Linfa — ML的瑞士军刀
Linfa 是Rust版的scikit-learn。它为标准算法提供了统一接口。支持:
- 线性回归和逻辑回归
- 支持向量机(SVM)
- 聚类(K-Means、DBSCAN)
- 降维方法(PCA)
- 决策树和随机森林
使用Linfa进行线性回归的示例:
use linfa::prelude::*;use linfa_linear::LinearRegression;use ndarray::Array2;
fn main() -> Result<(), Box<dyn std::error::Error>> { // 创建合成数据:100个点,3个特征 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; // 添加噪声
let dataset = Dataset::new(x, y); // 训练模型 let model = LinearRegression::default().fit(&dataset)?; // 模型系数 println!("权重: {:?}", model.params()); // 预测 let predicted = model.predict(&dataset); println!("MSE: {:?}", predicted.mean_squared_error(&dataset)?); Ok(())}2. Burn — 现代深度学习框架
Burn 是一个完全用Rust编写的灵活神经网络框架。其特点包括:
- 支持GPU(CUDA、Vulkan、Metal、WebGPU)
- 自动微分(autograd)
- 灵活的后端系统(torch、ndarray、wgpu)
- 动态计算图
- 导出为ONNX
使用Burn构建简单神经网络的示例:
use burn::tensor::{Tensor, backend::Backend};use burn::nn::{Linear, Relu, Sequential};
// 定义网络架构struct 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() { // 使用CPU后端(ndarray) type MyBackend = burn::backend::NdArray; let device = Default::default(); let model = MyModel::<MyBackend>::new(&device); let input = Tensor::<MyBackend, 2>::ra