mistral.rs の統合
LLMs をネイティブのRust推論でローカルに実行します — 外部サーバーや API キーは不要です。
mistral.rs とは?
mistral.rs は、LLMs をハードウェア上で直接実行する高性能なRust推論エンジンです。ADK-Rust は、Gemma 4 をサポートする v0.8.0 に固定された adk-mistralrs クレートを介してこれを統合しています。
主な特徴:
- 🦀 ネイティブRust - Pythonや外部サーバーは不要
- 🔒 完全オフライン - API キーやインターネットは不要
- ⚡ ハードウェアアクセラレーション - CUDA、Metal (3.1 bfloat16)、CPU最適化
- 📦 量子化 - 限られたハードウェアで大規模モデルを実行するためのISQ、MXFP4、GGUF、UQFF
- 🔧 LoRA アダプター - ホットスワップによるファインチューニングモデルのサポート
- 👁️ マルチモーダル - 視覚、音声、動画の理解 (Gemma 4、Qwen 3 VL)
- 🎤 音声 - Voxtralリアルタイム音声認識
- 🎯 マルチモデル - 1つのインスタンスから複数のモデルを提供
ステップ1: 依存関係の追加
adk-mistralrs は、ワークスペースメンバーとして crates.io に公開されています。標準の依存関係として追加してください。
[package]
name = "my-local-agent"
version = "0.1.0"
edition = "2024"
[dependencies]
adk-mistralrs = "2.0.0"
adk-agent = "2.0.0"
adk-rust = "2.0.0"
tokio = { version = "1", features = ["full"] }
anyhow = "1.0"
ハードウェアアクセラレーションのために、フィーチャーフラグを追加してください。
# macOS with Apple Silicon
adk-mistralrs = { version = "2.0.0", features = ["metal"] }
# NVIDIA GPU (requires CUDA toolkit)
adk-mistralrs = { version = "2.0.0", features = ["cuda"] }
ステップ2: 基本的な例
HuggingFace からモデルをロードし、ローカルで実行します。
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(())
}
何が起こるか:
- 初回実行時に HuggingFace からモデルをダウンロードします (モデルによって約2-8GB)
- モデルは
~/.cache/huggingface/にローカルにキャッシュされます - 以降の実行ではキャッシュから即座にロードされます
ステップ3: 量子化でメモリを削減
大規模モデルは多くのRAMを必要とします。ISQ (In-Situ Quantization) を使用してメモリを削減します。
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(())
}
量子化レベル:
| レベル | メモリ削減 | 品質 | 最適な用途 |
|---|---|---|---|
Q4_0 | ~75% | 良い | 限られたRAM (8GB) |
Q4_1 | ~70% | より良い | バランスの取れた |
Q8_0 | ~50% | 高い | 品質重視 |
Q8_1 | ~50% | 最高 | 最高の品質 |
ステップ 4: LoRA アダプター (ファインチューニングされたモデル)
特殊なタスクのために、LoRA アダプターを使用してモデルをロードします:
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(())
}
実行時にアダプターをホットスワップする:
model.swap_adapter("another-adapter").await?;
ステップ 5: ビジョンモデル (画像理解)
ビジョン言語モデルで画像を処理します:
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(())
}
ステップ 6: マルチモデルサービング
単一のインスタンスから複数のモデルを提供します:
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(())
}
モデルソース
HuggingFace ハブ (デフォルト)
ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct")
ローカルディレクトリ
ModelSource::local("/path/to/model")
事前量子化された GGUF
ModelSource::gguf("/path/to/model.Q4_K_M.gguf")
推奨モデル
| モデル | サイズ | 必要なRAM | 最適な用途 |
|---|---|---|---|
google/gemma-4-4b-it | 4B | 8GB | Gemma 4 — マルチモーダル (テキスト、画像、音声、動画)、Apache 2.0 |
google/gemma-4-12b-it | 12B | 24GB | Gemma 4 — 高品質なマルチモーダル推論 |
microsoft/Phi-3.5-mini-instruct | 3.8B | 8GB | 高速、汎用 |
microsoft/Phi-3.5-vision-instruct | 4.2B | 10GB | ビジョン + テキスト |
Qwen/Qwen3-4B | 4B | 8GB | 多言語、コーディング、推論 |
Qwen/Qwen3.5-7B-Instruct | 7B | 16GB | 強力な推論を備えた最新のQwen |
google/gemma-2-2b-it | 2B | 4GB | 軽量 |
mistralai/Mistral-7B-Instruct-v0.3 | 7B | 16GB | 高品質 |
ハードウェアアクセラレーション
macOS (Apple Silicon)
adk-mistralrs = { version = "2.0.0", features = ["metal"] }
M1/M2/M3 MacではMetalアクセラレーションが自動的に有効になります。
NVIDIA GPU
adk-mistralrs = { version = "2.0.0", features = ["cuda"] }
CUDA toolkit 11.8+が必要です。
CPUのみ
機能は不要です - CPUがデフォルトです。
クレートの検証
cargo build -p adk-mistralrs
cargo build -p adk-mistralrs --features metal
トラブルシューティング
メモリ不足
// Enable quantization
.isq(QuantizationLevel::Q4_0)
// Enable paged attention
.paged_attention(true)
初回ロードが遅い
- 初回実行時にモデルをダウンロードします (~2-8GB)
- 2回目以降の実行ではキャッシュされたモデルを使用します
モデルが見つかりません
- HuggingFace model IDが正しいか確認してください
- 初回ダウンロードのためにインターネット接続を確認してください
関連
- Model Providers - クラウド LLM プロバイダー
- Ollama - 代替のローカル model server
- LlmAgent - agentsでのmodelsの使用
前へ: ← Ollama (ローカル) | 次へ: Function Tools →