candle für Rust: minimalistisches ML-Framework von Hugging Face
candle ist ein modernes Framework für maschinelles Lernen, das in Rust geschrieben und vom Hugging Face-Team entwickelt wurde. Im Gegensatz zu schwergewichtigen Lösungen wie PyTorch oder TensorFlow setzt candle auf Leistung, Speichersicherheit und minimale Ressourcennutzung. Es ermöglicht das Ausführen neuronaler Netze auf CPU und GPU (über CUDA und Vulkan), ohne riesige Laufzeitumgebungen installieren zu müssen.
Warum candle? Erstens ist es ideal für eingebettete Systeme, WebAssembly (WASM) und Edge-Geräte, wo die Größe der Binärdatei und die Ladegeschwindigkeit entscheidend sind. Zweitens garantiert Rust Threadsicherheit und das Fehlen eines Garbage Collectors – das sorgt für vorhersagbare Leistung beim Inferenzbetrieb. Drittens unterstützt candle das Laden von Modellen aus PyTorch-Formaten (safetensors, bin) und dem Hugging Face Hub, was es zu einer hervorragenden Wahl für den Produktionseinsatz macht.
Zum Zeitpunkt der Erstellung dieses Artikels wird candle aktiv weiterentwickelt: Es unterstützt Transformer (BERT, GPT, LLaMA, Whisper), Convolutional Networks (ResNet, ViT) und sogar generative Modelle (Stable Diffusion). In diesem Tutorial behandeln wir die Installation, die wichtigsten Methoden und erstellen ein vollständiges Beispiel zur Textklassifikation.
Installation
candle ist eine Rust-Bibliothek, daher erfolgt die Installation über Cargo. Füge die Abhängigkeit in deiner Cargo.toml hinzu:
[dependencies]
candle-core = "0.7"
candle-nn = "0.7"
candle-transformers = "0.7"
tokenizers = "0.21" # für die Arbeit mit Tokenizern
anyhow = "1.0" # für die Fehlerbehandlung
Wenn du CUDA-Unterstützung benötigst, verwende das Flag --features cuda:
cargo add candle-core --features cuda
cargo add candle-nn --features cuda
cargo add candle-transformers --features cuda
Für die Arbeit mit WebAssembly (WASM) füge --features wasm hinzu.
Schnellstart: Minimales funktionierendes Beispiel
Erstellen wir einen Tensor und führen eine einfache Operation aus – die Matrixmultiplikation:
use candle_core::{Device, Tensor};
fn main() -> Result<(), Box> {
// Tensoren auf der CPU erstellen
let a = Tensor::new(&[[1.0f32, 2.0], [3.0, 4.0]], &Device::Cpu)?;
let b = Tensor::new(&[[5.0f32, 6.0], [7.0, 8.0]], &Device::Cpu)?;
// Matrixmultiplikation
let c = a.matmul(&b)?;
println!("Ergebnis: {:?}", c.to_vec2::()?);
Ok(())
}
Dieser Code gibt Folgendes aus:
Ergebnis: [[19.0, 22.0], [43.0, 50.0]]
Beachte: Alle Operationen geben ein Result zurück, daher verwenden wir ? zur Fehlerbehandlung.
Wichtige Methoden und Funktionen
Hier sind 10 Schlüsselmethoden von candle-core und candle-nn, die du in 90% deiner Projekte benötigen wirst.
1. Tensor::new – Tensor erstellen
Signatur: pub fn new
Beschreibung: Erstellt einen Tensor aus einem flachen Vektor von Gleitkommazahlen. Die Form wird über Shape angegeben (z. B. Shape::from((2, 3))).
use candle_core::{Device, Tensor, Shape};
fn main() -> anyhow::Result<()> {
// Erstelle einen 2x3 Tensor aus einem Vektor
let t = Tensor::new(&[1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &Device::Cpu)?;
// Form ändern
let t_reshaped = t.reshape(&Shape::from((2, 3)))?;
println!("{:?}", t_reshaped.to_vec2::()?);
Ok(())
}
2. Tensor::matmul – Matrixmultiplikation
Signatur: pub fn matmul(&self, other: &Tensor) -> Result<Tensor>
Beschreibung: Führt die Matrixmultiplikation zweier Tensoren durch. Unterstützt Broadcasting für Batches.
use candle_core::{D