摘要:在当今人工智能的浪潮中,各种机器学习框架如雨后春笋般涌现。从 Python 主导的 TensorFlow、PyTorch,到 Java 领域的 Deeplearning4j,每个框架都有其独特的优势和适用场景。
在当今人工智能的浪潮中,各种机器学习框架如雨后春笋般涌现。从 Python 主导的 TensorFlow、PyTorch,到 Java 领域的 Deeplearning4j,每个框架都有其独特的优势和适用场景。
而 Candle,作为一个专注于性能和易用性的 Rust 机器学习框架,为开发者们带来了新的选择。其不仅支持 GPU 加速,还能让开发者在 Rust 的高效性能和安全特性下进行机器学习开发。
Candle 是一个由 Hugging Face 推出的极简主义机器学习框架,专为 Rust 语言设计,其代码仓库位于 https://github.com/huggingface/candle。Candle 注重于性能和易用性,并提供了对 GPU 的支持。
Candle 语法简洁,看起来和使用起来都与 PyTorch 相似,支持模型训练,支持嵌入用户自定义的操作或内核。Candle 提供了优化的 CPU 和 GPU CUDA 支持,可以通过 NCCL 实现多 GPU 分布式计算,还提供了 WASM 支持,可以在浏览器中运行模型。
Candle 高度聚焦于性能,在处理大规模数据和复杂模型时能够高效运行。同时,Candle 还强调易用性,为开发者提供了简洁明了的 API,降低了机器学习开发的门槛。此外,Candle 还具有良好的兼容性,能够与 Hugging Face 的模型库以及其他流行的机器学习工具集成,方便开发者快速上手和使用。
Candle 是一个 Rust 项目,安装前需要保证环境中安装好了 Rust。首先使用 cargo 创建一个新项目:
cargo new myappcd myapp对于支持 CUDA 的环境,安装支持 CUDA 的 candle-core:
cargo add --git https://github.com/huggingface/candle.git candle-core --features "cuda"然后运行以下命令进行构建:
cargo build作为入门例子,构建一个针对经典的 MNIST 手写数字图片数据集进行识别的机器学习模型。在 src/main.rs 中编写代码,首先引入 candle_core:
use candle_core::{Device, Result, Tensor};然后定义一个简单的两层模型,分别使用两个 Tensor,前向传递的过程使用矩阵乘法,中间插入 ReLU 函数作为激活函数:
struct Model { first: Tensor, second: Tensor,}impl Model { fn forward(&self, image: &Tensor) -> Result { let x = image.matmul(&self.first)?; let x = x.relu?; x.matmul(&self.second) }}定义完成后,在 main 函数提供简单的初始参数后,开始前向传递过程:
fn main -> Result { // Use Device::new_cuda(0)?; to use the GPU. let device = Device::Cpu; let first = Tensor::randn(0f32, 1.0, (784, 100), &device)?; let second = Tensor::randn(0f32, 1.0, (100, 10), &device)?; let model = Model { first, second }; let dummy_image = Tensor::randn(0f32, 1.0, (1, 784), &device)?; let digit = model.forward(&dummy_image)?; println!("Digit {digit:?} digit"); Ok()}然后运行以下命令就可以开始运行了:
cargo run --release简答地扩展一下,还可以定义一个线性层,通过提供权重和偏移实现效果更好的模型:
struct Linear{ weight: Tensor, bias: Tensor,}impl Linear{ fn forward(&self, x: &Tensor) -> Result { let x = x.matmul(&self.weight)?; x.broadcast_add(&self.bias) }}struct Model { first: Linear, second: Linear,}impl Model { fn forward(&self, image: &Tensor) -> Result { let x = self.first.forward(image)?; let x = x.relu?; self.second.forward(&x) }}Candle 作为一个专注于性能和易用性的 Rust 机器学习框架,具有很大的潜力。它的出现为 Rust 开发者提供了一个强大的工具,使得他们能够在 Rust 的生态系统中进行机器学习开发,充分利用 Rust 的高性能和安全性。
Candle 可以广泛应用于各种机器学习任务,如自然语言处理、计算机视觉、语音识别等,可以作为主流 Python 框架的一个不错的替代。例如,在自然语言处理中,可以使用 Candle 完成文本生成、机器翻译等任务;在计算机视觉中,可以进行对象检测、图像分割等。
来源:每日开源代码