mistral.rs-Integration
Führe LLMs lokal mit nativer Rust-Inferenz aus – ohne externe Server und ohne API-Schlüssel.
Was ist mistral.rs?
mistral.rs ist eine hochleistungsfähige Rust-Inferenz-Engine, die LLMs direkt auf deiner Hardware ausführt. ADK-Rust integriert sie über das adk-mistralrs-Crate, festgelegt auf v0.8.0 mit Unterstützung für Gemma 4.
Wichtige Highlights:
- 🦀 Native Rust-Ausführung – Kein Python, keine externen Server
- 🔒 Vollständig offline – Keine API-Schlüssel und kein Internet erforderlich
- ⚡ Hardwarebeschleunigung – CUDA, Metal (3.1 bfloat16), CPU-Optimierungen
- 📦 Quantisierung – ISQ, MXFP4, GGUF, UQFF zum Ausführen großer Modelle auf begrenzter Hardware
- 🔧 LoRA-Adapter – Unterstützung für feinabgestimmte Modelle mit Hot-Swapping
- 👁️ Multimodal – Verständnis von Bildern, Audio und Video (Gemma 4, Qwen 3 VL)
- 🎤 Sprachverarbeitung – Echtzeit-Spracherkennung mit Voxtral
- 🎯 Mehrere Modelle – Mehrere Modelle aus einer Instanz bereitstellen
Schritt 1: Abhängigkeiten hinzufügen
adk-mistralrs wird auf crates.io als Workspace-Mitglied veröffentlicht. Füge es als standardmäßige Abhängigkeit hinzu:
[package]
name = "my-local-agent"
version = "0.1.0"
edition = "2024"
[dependencies]
adk-mistralrs = "2.1.0"
adk-agent = "2.1.0"
adk-rust = "2.1.0"
tokio = { version = "1", features = ["full"] }
anyhow = "1.0"
Für Hardwarebeschleunigung fügst du Feature-Flags hinzu:
# macOS with Apple Silicon
adk-mistralrs = { version = "2.1.0", features = ["metal"] }
# NVIDIA GPU (requires CUDA toolkit)
adk-mistralrs = { version = "2.1.0", features = ["cuda"] }
Schritt 2: Einfaches Beispiel
Lade ein Modell von HuggingFace und führe es lokal aus:
use adk_agent::LlmAgentBuilder;
use adk_mistralrs::{Llm, MistralRsConfig, MistralRsModel, ModelSource};
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Load model from HuggingFace (downloads on first run)
let config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct"))
.build();
println!("Loading model (this may take a while on first run)...");
let model = MistralRsModel::new(config).await?;
println!("Model loaded: {}", model.name());
// Create agent
let agent = LlmAgentBuilder::new("local_assistant")
.description("Local AI assistant powered by mistral.rs")
.instruction("You are a helpful assistant running locally. Be concise.")
.model(Arc::new(model))
.build()?;
// Run interactive chat
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}
Was passiert:
- Beim ersten Start wird das Modell von HuggingFace heruntergeladen (~2–8 GB je nach Modell)
- Das Modell wird lokal in
~/.cache/huggingface/zwischengespeichert - Nachfolgende Starts laden das Modell sofort aus dem Cache
Schritt 3: Speicherbedarf mit Quantisierung reduzieren
Große Modelle benötigen viel RAM. Verwende ISQ (In-Situ-Quantisierung), um den Speicherbedarf zu reduzieren:
use adk_agent::LlmAgentBuilder;
use adk_mistralrs::{Llm, MistralRsConfig, MistralRsModel, ModelSource, QuantizationLevel};
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Load model with 4-bit quantization for reduced memory
let config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct"))
.isq(QuantizationLevel::Q4_0) // 4-bit quantization
.paged_attention(true) // Memory-efficient attention
.build();
println!("Loading quantized model...");
let model = MistralRsModel::new(config).await?;
println!("Model loaded: {}", model.name());
let agent = LlmAgentBuilder::new("quantized_assistant")
.instruction("You are a helpful assistant. Be concise.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}
Quantisierungsstufen:
| Stufe | Speicherreduzierung | Qualität | Am besten geeignet für |
|---|---|---|---|
Q4_0 | ~75% | Gut | Begrenzter RAM (8GB) |
Q4_1 | ~70% | Besser | Ausgewogen |
Q8_0 | ~50% | Hoch | Qualitätsorientiert |
Q8_1 | ~50% | Höchste | Beste Qualität |
Schritt 4: LoRA-Adapter (Feinabgestimmte Modelle)
Laden Sie Modelle mit LoRA-Adaptern für spezialisierte Aufgaben:
use adk_agent::LlmAgentBuilder;
use adk_mistralrs::{AdapterConfig, Llm, MistralRsAdapterModel, MistralRsConfig, ModelSource};
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Load base model with LoRA adapter
let config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("meta-llama/Llama-3.2-3B-Instruct"))
.adapter(AdapterConfig::lora("username/my-lora-adapter"))
.build();
println!("Loading model with LoRA adapter...");
let model = MistralRsAdapterModel::new(config).await?;
println!("Model loaded: {}", model.name());
println!("Available adapters: {:?}", model.available_adapters());
let agent = LlmAgentBuilder::new("lora_assistant")
.instruction("You are a helpful assistant with specialized knowledge.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}
Adapter zur Laufzeit austauschen:
model.swap_adapter("another-adapter").await?;
Schritt 5: Visionsmodelle (Bildverständnis)
Verarbeiten Sie Bilder mit Vision-Language-Modellen:
use adk_mistralrs::{Llm, MistralRsConfig, MistralRsVisionModel, ModelSource};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("microsoft/Phi-3.5-vision-instruct"))
.build();
println!("Loading vision model...");
let model = MistralRsVisionModel::new(config).await?;
println!("Model loaded: {}", model.name());
// Analyze an image
let image = image::open("photo.jpg")?;
let response = model.generate_with_image("Describe this image.", vec![image]).await?;
Ok(())
}
Schritt 6: Bereitstellung mehrerer Modelle
Stellen Sie mehrere Modelle aus einer einzigen Instanz bereit:
use adk_mistralrs::{MistralRsConfig, MistralRsMultiModel, ModelSource};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let multi = MistralRsMultiModel::new();
// Add models
let phi_config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct"))
.build();
multi.add_model("phi", phi_config).await?;
let gemma_config = MistralRsConfig::builder()
.model_source(ModelSource::huggingface("google/gemma-2-2b-it"))
.build();
multi.add_model("gemma", gemma_config).await?;
// Set default and route requests
multi.set_default("phi").await?;
println!("Available models: {:?}", multi.model_names().await);
// Route to specific model
// multi.generate_with_model(Some("gemma"), request, false).await?;
Ok(())
}
Modellquellen
HuggingFace Hub (Standard)
ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct")
Lokales Verzeichnis
ModelSource::local("/path/to/model")
Vorquantisiertes GGUF
ModelSource::gguf("/path/to/model.Q4_K_M.gguf")
Empfohlene Modelle
| Modell | Größe | Benötigter RAM | Am besten geeignet für |
|---|---|---|---|
google/gemma-4-4b-it | 4B | 8GB | Gemma 4 — multimodal (Text, Bild, Audio, Video), Apache 2.0 |
google/gemma-4-12b-it | 12B | 24GB | Gemma 4 — hochwertiges multimodales Schlussfolgern |
microsoft/Phi-3.5-mini-instruct | 3.8B | 8GB | Schnell, vielseitig einsetzbar |
microsoft/Phi-3.5-vision-instruct | 4.2B | 10GB | Bildverarbeitung + Text |
Qwen/Qwen3-4B | 4B | 8GB | Mehrsprachig, Programmierung, logisches Schlussfolgern |
Qwen/Qwen3.5-7B-Instruct | 7B | 16GB | Neuestes Qwen-Modell mit starkem logischem Schlussfolgern |
google/gemma-2-2b-it | 2B | 4GB | Leichtgewichtig |
mistralai/Mistral-7B-Instruct-v0.3 | 7B | 16GB | Hohe Qualität |
Hardwarebeschleunigung
macOS (Apple Silicon)
adk-mistralrs = { version = "2.1.0", features = ["metal"] }
Die Metal-Beschleunigung erfolgt auf M1/M2/M3-Macs automatisch.
NVIDIA-GPU
adk-mistralrs = { version = "2.1.0", features = ["cuda"] }
Erfordert das CUDA-Toolkit 11.8+.
Nur CPU
Keine Funktionen erforderlich – die CPU ist die Standardeinstellung.
Den Crate validieren
cargo build -p adk-mistralrs
cargo build -p adk-mistralrs --features metal
Fehlerbehebung
Nicht genügend Speicher
// Enable quantization
.isq(QuantizationLevel::Q4_0)
// Enable paged attention
.paged_attention(true)
Langsames erstes Laden
- Beim ersten Ausführen wird das Modell heruntergeladen (~2–8 GB)
- Nachfolgende Ausführungen verwenden das zwischengespeicherte Modell
Modell nicht gefunden
- Überprüfen, ob die Modell-ID HuggingFace korrekt ist
- Für den ersten Download eine Internetverbindung sicherstellen
Verwandte Themen
- Modellanbieter – Cloud-LLM-Anbieter
- Ollama – Alternativer lokaler Modellserver
- LlmAgent – Modelle mit Agenten verwenden
Zurück: ← Ollama (lokal) | Weiter: Funktionswerkzeuge →