تكامل mistral.rs
شغّل LLMs محليًا باستخدام الاستدلال الأصلي في Rust - دون خوادم خارجية أو مفاتيح API.
ما هو mistral.rs؟
mistral.rs هو محرّك استدلال عالي الأداء بلغة Rust، يشغّل LLMs مباشرةً على أجهزتك. يدمجه ADK-Rust عبر حزمة adk-mistralrs، المثبّتة على v0.8.0 مع دعم Gemma 4.
أبرز الميزات:
- 🦀 Rust أصلي - دون Python أو خوادم خارجية
- 🔒 يعمل بالكامل دون اتصال - لا حاجة إلى مفاتيح API أو الإنترنت
- ⚡ تسريع العتاد - CUDA وMetal (3.1 bfloat16) وتحسينات وحدة المعالجة المركزية
- 📦 التكميم - ISQ وMXFP4 وGGUF وUQFF لتشغيل النماذج الكبيرة على عتاد محدود
- 🔧 محوّلات LoRA - دعم النماذج المضبوطة دقيقًا مع التبديل الفوري
- 👁️ متعدد الوسائط - فهم الصور والصوت والفيديو (Gemma 4 وQwen 3 VL)
- 🎤 الكلام - التعرّف الفوري على الكلام باستخدام Voxtral
- 🎯 نماذج متعددة - تقديم نماذج متعددة من مثيل واحد
الخطوة 1: إضافة التبعيات
يُنشر adk-mistralrs في crates.io باعتباره عضوًا في مساحة العمل. أضِفه كتَبعية عادية:
[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"
لتفعيل تسريع العتاد، أضِف أعلام الميزات:
# 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"] }
الخطوة 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-8 جيجابايت، حسب النموذج)
- يُخزَّن النموذج مؤقتًا محليًا في
~/.cache/huggingface/ - في عمليات التشغيل اللاحقة، يُحمَّل النموذج فورًا من ذاكرة التخزين المؤقت
الخطوة 3: تقليل الذاكرة باستخدام التكميم
تحتاج النماذج الكبيرة إلى قدر كبير من ذاكرة RAM. استخدم ISQ (التكميم أثناء التشغيل) لتقليل استهلاك الذاكرة:
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.1.0", features = ["metal"] }
يكون تسريع Metal تلقائيًا على أجهزة Mac المزودة بمعالجات M1/M2/M3.
NVIDIA GPU
adk-mistralrs = { version = "2.1.0", features = ["cuda"] }
يتطلب مجموعة أدوات CUDA بإصدار 11.8 أو أحدث.
وحدة المعالجة المركزية فقط
لا حاجة إلى ميزات - وحدة المعالجة المركزية هي الإعداد الافتراضي.
التحقق من Crate
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)
- تستخدم عمليات التشغيل اللاحقة النموذج المخزن مؤقتًا
لم يتم العثور على النموذج
- تحقق من أن معرّف النموذج HuggingFace صحيح
- تأكد من توفر اتصال بالإنترنت لإجراء التنزيل الأول
ذات صلة
- موفرو النماذج - موفرو النماذج السحابية LLM
- Ollama - خادم نماذج محلي بديل
- LlmAgent - استخدام النماذج مع الوكلاء
السابق: ← Ollama (محلي) | التالي: أدوات الدوال →