提到机器学习领域,大部分人第一时间想到了Python
,相对于它成熟的生态和丰富的库,当然不可否认,它确实还是领域主导语言。
但是Rust
因其安全性、性能和并发特性而在机器学习 (ML
) 和人工智能 (AI
) 领域受到关注。马斯克也在推特公开承认,Rust
才是AGI
语言。虽然Rust
还在积极的发展中,5月的编程排行榜也不过还是18
名,但他的生态正在逐步发展,作为一个Rust
爱好者,我始终相信他就是未来。
本文的重点在于讨论Rust
中两个比较流行的机器学习框架,而不是歌颂Rust
,也没有任何语言歧视,自然也不会试图无脑的劝各位入坑Rust
。
?Candle
一个简单且高性能的深度学习框架。
这是一个以简单和高性能为主打而设计的速度学习框架。它提供了一个用于定义个训练神经网络的简约API
,利用基于强大的内核的并行计算功能。
实现上,Candle
底层基于cuTENSOR
和cuDNNv8
库,这些库可以在NVIDIA
的CPU
上高效执行。下面是基于Candle
定义和训练MLP
的简单代码示例:
use candle::prelude::*;fn main() { let mut model = MlpBuilder::new(vec![784, 128, 64, 10]) .with_activation(Activation::Relu) .build(); let dataset = mnist::load_dataset(); let optimizer = AdamOptimizer::new(0.001); for epoch in 0..10 { let mut loss = 0.0; for (inputs, targets) in dataset.train_iter().batched(128) { let outputs = model.forward(&inputs); loss += model.loss(&outputs, &targets); model.backward(&outputs, &targets); optimizer.update(&mut model); } println!("Epoch {}: Loss = {}", epoch, loss); }}
Candle
的简单性源于其专注于深度学习模型的方法,牺牲了一些灵活性来提高性能。这使得它非常适合哪些优先以性能为优先考量的应用程序。
?Burn
一个相对全面的机器学习技术栈。
相比之下,Burn
的目标是用 Rust
构建一个成熟的机器学习栈。它包含各种组件,包括数据加载、模型定义、训练、超参数优化等。同时采用自定义内核代码进行计算,提供对底层操作的更好控制。
以下是使用 Burn
训练逻辑回归模型的示例
use burn::prelude::*;fn main() { let dataset = Dataset::from_csv("data.csv")?; let model = LogisticRegression::new(dataset.num_features()); let optimizer = GradientDescent::new(0.01); let mut history = optimizer.fit(&dataset, &model, 100)?; println!("Training loss: {}", history.losses().last().unwrap());}
Burn
的综合性使开发人员能够在 Rust
生态系统中利用各种机器学习技术。然而,与 Candle
等更专业的框架相比,这种更广泛的范围可能会降低性能。这并不难理解,他们的定位不同,一个追求特定领域的专注,另一个则是主导全面的学习栈。
?简单对比
虽然 Candle 和 Burn 都是用 Rust 编写的,但它们的设计目标和方法有所不同。
Candle
主要专注于深度学习模型,而 Burn
则提供更全面的 ML
技术栈。Candle
利用现有的高性能库,能为深度学习任务提供更好的计算效率。Burn
允许更大的灵活性和对 ML
的控制,但可能会牺牲一些性能。Burn
的目标是在 Rust
中提供更完整的机器学习生态系统,而 Candle
的范围定义相对较小。 尽管存在差异,但这两个框架都具有 Rust
的安全性、性能和并发功能的优点,这使得它们对于具有严格要求的 ML 应用程序来说是非常不错的选择。
?选择建议
如果您的主要关注点是高性能深度学习模型和部署,那么 Candle
的专业方法可能更合适。但是,如果您需要具有更大灵活性的全面 ML 堆栈,Burn
可能是更好的选择。
如果优先考虑计算效率或自定义和扩展 ML 的能力。 Burn
是个不错的选择。
与 Burn
更广泛的功能集相比,Candle
的简约 API
的学习曲线更加平缓,特别是如果您不熟悉 Rust
或 ML
的情况下。
如果你的项目涉及与现有 Rust
代码库集成或利用其他 Rust
库,Burn
的综合性可能会更有优势。
当然,如果你足够熟悉,也可以综合对两个框架进行组合使用。
?总结
Candle
和 Burn
代表了 Rust
生态系统在机器学习和人工智能方面令人兴奋的发展。 Candle
为深度学习任务提供了简单性和高性能,而 Burn
则提供了更全面的 ML
堆栈和更大的灵活性。
Candle
Burn