mistral.rs एकीकरण
LLM को मूल Rust इन्फेरेंस के साथ स्थानीय रूप से चलाएँ - कोई बाहरी सर्वर नहीं, कोई API कुंजी नहीं।
mistral.rs क्या है?
mistral.rs एक उच्च-प्रदर्शन वाला Rust इन्फेरेंस इंजन है जो सीधे आपके हार्डवेयर पर LLM चलाता है। adk-rust इसे adk-mistralrs crate के माध्यम से एकीकृत करता है।
मुख्य विशेषताएँ:
- 🦀 Native Rust - कोई Python नहीं, कोई बाहरी सर्वर नहीं
- 🔒 पूरी तरह से ऑफलाइन - कोई API keys या इंटरनेट की आवश्यकता नहीं
- ⚡ हार्डवेयर एक्सेलेरेशन - CUDA, Metal, CPU ऑप्टिमाइज़ेशन
- 📦 क्वांटिज़ेशन - सीमित हार्डवेयर पर बड़े model चलाएँ
- 🔧 LoRA adapters - hot-swapping के साथ फाइन-ट्यून किए गए model का समर्थन
- 👁️ Vision models - छवि समझने की क्षमताएँ
- 🎯 Multi-model - एक ही इंस्टेंस से कई model सेवाएँ दें
चरण 1: निर्भरताएँ जोड़ें
चूँकि adk-mistralrs git रिपॉजिटरी पर निर्भर करता है, इसे crates.io पर प्रकाशित नहीं किया जा सकता है। इसे git के माध्यम से जोड़ें:
[package]
name = "my-local-agent"
version = "0.1.0"
edition = "2024"
[dependencies]
adk-mistralrs = { git = "https://github.com/zavora-ai/adk-rust" }
adk-agent = { git = "https://github.com/zavora-ai/adk-rust" }
adk-rust = { git = "https://github.com/zavora-ai/adk-rust" }
tokio = { version = "1", features = ["full"] }
anyhow = "1.0"
हार्डवेयर एक्सेलेरेशन के लिए, फीचर फ्लैग जोड़ें:
# macOS with Apple Silicon
adk-mistralrs = { git = "https://github.com/zavora-ai/adk-rust", features = ["metal"] }
# NVIDIA GPU (requires CUDA toolkit)
adk-mistralrs = { git = "https://github.com/zavora-ai/adk-rust", features = ["cuda"] }
चरण 2: मूल उदाहरण
HuggingFace से एक model लोड करें और इसे स्थानीय रूप से चलाएँ:
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(())
}
क्या होता है:
- पहली बार चलने पर model HuggingFace से डाउनलोड होता है (model के आधार पर ~2-8GB)
- Model स्थानीय रूप से
~/.cache/huggingface/में कैश हो जाता है - बाद के रन तुरंत कैश से लोड होते हैं
Step 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(())
}
क्वांटाइजेशन स्तर:
| Level | मेमोरी में कमी | गुणवत्ता | सर्वोत्तम उपयोग |
|---|---|---|---|
Q4_0 | ~75% | अच्छा | सीमित RAM (8GB) |
Q4_1 | ~70% | बेहतर | संतुलित |
Q8_0 | ~50% | उच्च | गुणवत्ता-केंद्रित |
Q8_1 | ~50% | उच्चतम | सर्वोत्तम गुणवत्ता |
Step 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?;
Step 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 Hub (डिफ़ॉल्ट)
ModelSource::huggingface("microsoft/Phi-3.5-mini-instruct")
स्थानीय डायरेक्टरी
ModelSource::local("/path/to/model")
प्री-क्वांटाइज़्ड GGUF
ModelSource::gguf("/path/to/model.Q4_K_M.gguf")
अनुशंसित मॉडल
| मॉडल | आकार | आवश्यक RAM | इसके लिए सबसे अच्छा |
|---|---|---|---|
microsoft/Phi-3.5-mini-instruct | 3.8B | 8GB | तेज़, सामान्य उद्देश्य |
microsoft/Phi-3.5-vision-instruct | 4.2B | 10GB | विजन + टेक्स्ट |
Qwen/Qwen2.5-3B-Instruct | 3B | 6GB | बहुभाषी, कोडिंग |
google/gemma-2-2b-it | 2B | 4GB | हल्का |
mistralai/Mistral-7B-Instruct-v0.3 | 7B | 16GB | उच्च गुणवत्ता |
हार्डवेयर एक्सेलेरेशन
macOS (Apple Silicon)
adk-mistralrs = { git = "https://github.com/zavora-ai/adk-rust", features = ["metal"] }
M1/M2/M3 Mac पर मेटल एक्सेलेरेशन स्वचालित है।
NVIDIA GPU
adk-mistralrs = { git = "https://github.com/zavora-ai/adk-rust", features = ["cuda"] }
CUDA टूलकिट 11.8+ की आवश्यकता है।
केवल CPU
किसी फ़ीचर की आवश्यकता नहीं है - CPU डिफ़ॉल्ट है।
उदाहरण चलाएँ
# Basic usage
cargo run --bin basic
# With quantization
cargo run --bin quantized
# LoRA adapters
cargo run --bin lora
# Multi-model setup
cargo run --bin multimodel
# Vision models
cargo run --bin vision
समस्या निवारण
मेमोरी कम पड़ना
// Enable quantization
.isq(QuantizationLevel::Q4_0)
// Enable paged attention
.paged_attention(true)
धीमा पहला लोड
- पहली बार चलाने पर मॉडल डाउनलोड होता है (~2-8GB)
- बाद में चलाने पर कैशे किए गए मॉडल का उपयोग होता है
मॉडल नहीं मिला
- HuggingFace मॉडल ID सही है या नहीं जाँचें
- पहले डाउनलोड के लिए इंटरनेट कनेक्शन सुनिश्चित करें
संबंधित
- मॉडल प्रदाता - क्लाउड LLM प्रदाता
- Ollama - वैकल्पिक स्थानीय मॉडल सर्वर
- LlmAgent - एजेंटों के साथ मॉडल का उपयोग करना
पिछला: ← Ollama (स्थानीय) | अगला: Function Tools →