Ollama: إدارة النماذج
النماذج هي الأصول الأساسية للذكاء الاصطناعي المحلي — اختيار النموذج المناسب وإدارة إصداراته بنجاح بأهمية اختيار الشيف للمكونات.
💡 نصيحة: تعليمة FROM في Modelfile تدعم آلية الوراثة — يمكنك إنشاء نماذج مخصصة بناءً على نماذج موجودة. النموذج الجديد يشارك ملفات أوزان النموذج الأساسي ولا يضيف سوى إعدادات موجه النظام والمعلمات والقوالب، دون استهلاك مساحة إضافية. هذا يسمح بإنشاء نماذج متعددة حسب الدور (مثلاً، متخصص الاسترداد، خبير اللوجستيات) بتكلفة شبه صفرية.
📋 المتطلبات المسبقة: يجب أن تتقن ما يلي أولًا
- الدرس 3: التفاعل الأساسي عبر سطر الأوامر
1. ماذا ستتعلم
- دليل كامل لأوامر ollama list / pull / rm / show
- نظام وسوم النماذج واختيار المتنوعات
- تصفح مكتبة Ollama ودليل الاختيار
- تخزين ملفات النماذج وإدارة القرص
- ترحيل ملفات GGUF بدون اتصال
2. قصة حقيقية من مؤسس SaaS
(1) المشكلة: اختيار النموذج الخاطئ يهدر الموارد
أسست أليس منصة التجارة الإلكترونية GlobalShop وسحبت مبدئيًا نموذج llama3.1:70b لنظام خدمة العملاء SupportBot. النموذج بحجم 40 غيغابايت+ ملأ قرص الخادم وكان الاستنتاج بطيئًا. اكتشفت لاحقًا أن نموذجًا صغيرًا بـ 3 مليارات معلمة يمكنه التعامل مع 80% من الأسئلة الشائعة؛ الـ 70B كانت ضرورية فقط للطلبات المعقدة.
(2) الحل: نشر مدرج حسب الحاجة
بفهم وسوم النماذج ومستويات المعلمات، أقامت أليس استراتيجية مدرجة: 3B للأسئلة الشائعة (سريع)، 8B للتعقيد المتوسط، و70B فقط للطلبات عالية الصعوبة.
BASH
# سحب أحجام مختلفة لمهام مختلفة
ollama pull llama3.2:3b # سريع، للاستعلامات البسيطة
ollama pull llama3.1:8b # متوازن
ollama pull llama3.1:70b # قوي، للحالات المعقدة
3. دليل أوامر إدارة النماذج الكامل
(1) جدول مرجع الأوامر
| الأمر | الغرض | مثال |
|---|---|---|
| ollama list | عرض النماذج المحلية | ollama list |
| ollama pull | سحب نموذج | ollama pull llama3.2 |
| ollama rm | حذف نموذج | ollama rm llama3.2:3b |
| ollama show | عرض تفاصيل النموذج | ollama show llama3.2 |
| ollama cp | نسخ وسْم نموذج | ollama cp llama3.2 my-llama |
| ollama run | تشغيل نموذج | ollama run llama3.2 |
(2) دورة حياة النموذج
stateDiagram-v2
[*] --> Pulled: ollama pull
Pulled --> Running: ollama run
Running --> Idle: Keep alive timeout
Idle --> Running: ollama run (reload)
Idle --> Unloaded: Memory pressure
Unloaded --> Running: ollama run (reload)
Pulled --> Copied: ollama cp
Copied --> Running: ollama run copy
Pulled --> Deleted: ollama rm
Deleted --> [*]
▶ مثال 1: عمليات الإدارة الأساسية
BASH
# عرض جميع النماذج المحلية
ollama list
# NAME ID SIZE MODIFIED
# llama3.2:latest a80c4feeb02f 2.0 GB 2 hours ago
# mistral:latest 2b3e5c5f1e3d 4.1 GB 1 day ago
# سحب نموذج محدد
ollama pull llama3.2
# pulling manifest... done
# success
# عرض تفاصيل النموذج
ollama show llama3.2
# Model
# architecture: llama
# parameters: 3.2B
# quantization: Q4_K_M
# context length: 131072
# حذف نموذج لتحرير المساحة
ollama rm llama3.2:3b
# deleted 'llama3.2:3b'
⚠️ ملاحظة:
ollama rm لا يمكن التراجع عنه — تُحذف ملفات النموذج نهائيًا من القرص. إذا كان النموذج مسحوبًا من مكتبة Ollama، يمكن إعادة تنزيله عبر ollama pull، لكن تنزيل النماذج الكبيرة قد يستغرق وقتًا طويلًا (10-30 دقيقة لأكثر من 40 غيغابايت). تأكد أنك لن تحتاج النموذج قبل الحذف.
الإخراج:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
4. نظام وسوم النماذج
⚠️ تحذير: سحب نموذج بـ 70 مليار معلمة يتطلب أكثر من 40 غيغابايت VRAM (متعدد GPU) وأكثر من 40 غيغابايت مساحة قرص. إذا كان hardware لا يدعم ذلك، لا تنفذ
ollama pull llama3.1:70b بشكل أعمى — بعد تنزيل 40 غيغابايت، لن تتمكن من تشغيله، ويهدر مساحة القرص. تأكد من hardware قبل السحب.
(1) قواعد تسمية الوسوم
تحدد الوسوم متغيرًا محددًا من النموذج، بالصيغة <name>:<tag>:
| صيغة الوسْم | المعنى | مثال |
|---|---|---|
| name:latest | أحدث إصدار افتراضي | llama3.2:latest |
| name / عدد المعلمات / التقدير الكمي | مستوى المعلمات | llama3.1:8b / llama3.1:70b |
| name:q4_K_M | مستوى التقدير الكمي | llama3.2:q4_K_M |
| name:v1.0 | رقم الإصدار | llama3.2:v1.0 |
| name (بدون وسْم) | يكافئ latest | llama3.2 |
(2) مقارنة وسوم التقدير الكمي
| الوسْم | مستوى التقدير الكمي | حجم نموذج 8B | تقييم الجودة | حالة الاستخدام |
|---|---|---|---|---|
| q2_K | 2 بت | ~3 غيغابايت | تدهور ملحوظ | hardware شديد التقييد |
| q3_K_M | 3 بت | ~3.8 غيغابايت | تدهور طفيف | 4 غيغابايت VRAM |
| q4_K_M | 4 بت | ~5 غيغابايت | قريب من الأصل | 8 غيغابايت VRAM (موصى به) |
| q5_K_M | 5 بت | ~5.7 غيغابايت | شبه بدون فقدان | 8 غيغابايت VRAM |
| q8_0 | 8 بت | ~8 غيغابايت | بدون فقدان | 12 غيغابايت+ VRAM |
| f16 | 16 بت | ~16 غيغابايت | دقة كاملة | 24 غيغابايت+ VRAM |
💡 نصيحة: عند عدم تحديد وسْم تقدير كمي، يختار Ollama التقدير الكمي الأمثل تلقائيًا (عادةً Q4_K_M). حدده صراحةً للتحكم الدقيق.
▶ مثال 2: سحب متغيرات تقدير كمي مختلفة
BASH
# افتراضي: اختيار التقدير الكمي تلقائيًا (عادةً Q4_K_M)
ollama pull llama3.2
# صريح: سحب تقدير كمي محدد
ollama pull llama3.2:q4_K_M # متوازن (موصى به)
ollama pull llama3.2:q8_0 # جودة أعلى، ملف أكبر
# السحب حسب عدد المعلمات
ollama pull llama3.1:8b # 8 مليارات معلمة
ollama pull llama3.1:70b # 70 مليار معلمة (يحتاج أكثر من 40 غيغابايت VRAM)
# عرض جميع المتغيرات المتاحة
ollama show llama3.2 --modelfile
الإخراج:
TEXT
pulling manifest...
success
5. مكتبة Ollama واختيار النماذج
(1) دليل اختيار النماذج الشائعة
| النموذج | المعلمات | الحجم | نقاط القوة | الترخيص |
|---|---|---|---|---|
| llama3.2 | 3B / 1B | 2 غيغابايت | محادثة عامة، نشر خفيف | Llama Community |
| llama3.1 | 8B / 70B | 5 / 40 غيغابايت | متعدد الأغراض، متعدد اللغات | Llama Community |
| mistral | 7B | 4.1 غيغابايت | اتباع التعليمات، كود | Apache 2.0 |
| qwen2.5 | 7B / 72B | 4.7 / 42 غيغابايت | مُحسّن للصينية، كود | Apache 2.0 |
| codellama | 7B / 34B | 3.8 / 19 غيغابايت | توليد وإكمال الكود | Llama Community |
| phi-3-mini | 3.8B | 2.3 غيغابايت | استنتاج، خفيف | MIT |
| nomic-embed-text | 274M | 274 ميغابايت | تضمين النص (لـ RAG) | Apache 2.0 |
(2) قرار اختيار النموذج حسب السيناريو
graph TD
A[What do you need?] --> B{Primary use case?}
B -->|Chat / General| C{Hardware?}
B -->|Code| D[codellama / qwen2.5-coder]
B -->|Chinese| E[qwen2.5]
B -->|Embedding / RAG| F[nomic-embed-text / mxbai-embed-large]
C -->|8GB RAM| G[llama3.2:3b / phi-3-mini]
C -->|16GB+ RAM or 8GB VRAM| H[llama3.1:8b / mistral]
C -->|40GB+ VRAM| I[llama3.1:70b]
▶ مثال 3: اختيار النموذج حسب السيناريو
BASH
# SupportBot لأليس: خدمة عملاء متعددة اللغات
ollama pull qwen2.5:7b # الأفضل للصينية + متعدد اللغات
ollama pull nomic-embed-text # لقاعدة معرفة RAG
# GlobalShop لأليس: توليد SQL
ollama pull codellama:7b # نموذج متخصص في الكود
# SaaS لأليس: تحليل المقاييس
ollama pull llama3.1:8b # استنتاج عام
# فحص إجمالي استخدام القرص
ollama list | awk '{sum+=$3} END {print "Total: " sum/1024/1024/1024 " GB"}'
الإخراج:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
6. إدارة مساحة القرص والترحيل بدون اتصال
ℹ️ معلومة: يستخدم Ollama تخزينًا قائمًا على المحتوى (CAS). تُخزن ملفات النماذج ككائنات blob في
~/.ollama/models/blobs/. مشاركة نماذج متعددة لطبقات الأساس نفسها يعني أن إجمالي أحجام ollama list قد يتجاوز استخدام القرص الفعلي.
(1) مواقع التخزين واستراتيجية التنظيف
| المنصة | المسار الافتراضي | ملاحظات |
|---|---|---|
| macOS | ~/.ollama/models | يتبع دليل المستخدم |
| Linux | /usr/share/ollama/.ollama/models | مستخدم خدمة systemd |
| Windows | C:\Users\<user>\.ollama\models |
دليل المستخدم |
(2) خطوات ترحيل النماذج في بيئة بدون اتصال
| الخطوة | الإجراء | الأمر |
|---|---|---|
| 1 | سحب النموذج على جهاز متصل | ollama pull llama3.2 |
| 2 | تحديد موقع ملفات النموذج | ls ~/.ollama/models/blobs/ |
| 3 | حزم دليل blobs | tar czf ollama-models.tar.gz blobs/ |
| 4 | النقل إلى الجهاز بدون اتصال | scp ollama-models.tar.gz user@offline:~ |
| 5 | الاستخراج إلى المسار المستهدف | tar xzf ollama-models.tar.gz -C /usr/share/ollama/.ollama/models/ |
| 6 | التحقق من التوفر | ollama list |
▶ مثال 4: إدارة مساحة القرص
BASH
# فحص استخدام القرص لكل نموذج
ollama list
# إزالة النماذج غير المستخدمة لتحرير المساحة
ollama rm llama3.1:70b # تحرير ~40 غيغابايت
ollama rm mistral:latest # تحرير ~4 غيغابايت
# تغيير مسار تخزين النماذج (إذا امتلأ القرص)
export OLLAMA_MODELS=/data/ollama/models
ollama serve
# التحقق من المسار الجديد
ls $OLLAMA_MODELS/blobs/
الإخراج:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
▶ مثال 5: استيراد نموذج مخصص من ملف GGUF
BASH
# تنزيل ملف GGUF من HuggingFace
wget https://huggingface.co/.../model-q4_K_M.gguf
# إنشاء Modelfile يشير إلى GGUF
cat > Modelfile <<EOF
FROM ./model-q4_K_M.gguf
EOF
# البناء والتسجيل مع Ollama
ollama create my-custom-model -f Modelfile
# تشغيله كأي نموذج آخر
ollama run my-custom-model "Hello"
الإخراج:
TEXT
I'm a helpful AI assistant running locally on your machine...
7. مثال شامل: سكربت إدارة النماذج لأليس
BASH
#!/bin/bash
# ============================================
# شامل: لوحة إدارة النماذج
# سحب، فحص، تنظيف، وإعداد تقرير عن النماذج
# ============================================
MODEL_STORE="$HOME/.ollama/models"
# دالة: عرض تقرير جرد النماذج
show_inventory() {
echo "=== Ollama Model Inventory ==="
echo ""
ollama list | while read -r name id size modified; do
if [ "$name" != "NAME" ]; then
echo "Model: $name"
echo " ID: $id"
echo " Size: $size"
echo " Modified: $modified"
echo ""
fi
done
echo "Total disk: $(du -sh $MODEL_STORE 2>/dev/null | cut -f1)"
}
# دالة: سحب حزمة نماذج SupportBot
pull_support_stack() {
echo "=== Pulling SupportBot Model Stack ==="
local models=(
"qwen2.5:7b" # Main chat model
"nomic-embed-text" # Embedding for RAG
"llama3.2:3b" # Fast classifier
)
for model in "${models[@]}"; do
echo "Pulling $model..."
ollama pull "$model"
done
echo "=== Stack Ready ==="
}
# دالة: تنظيف النماذج القديمة/غير المستخدمة
clean_unused() {
echo "=== Models Available for Cleanup ==="
ollama list
echo ""
read -p "Enter model name to remove (or 'cancel'): " model
if [ "$model" != "cancel" ] && [ -n "$model" ]; then
ollama rm "$model"
echo "Removed: $model"
fi
}
# القائمة الرئيسية
echo "1. Show inventory"
echo "2. Pull SupportBot stack"
echo "3. Clean unused models"
read -p "Choose: " choice
case $choice in
1) show_inventory ;;
2) pull_support_stack ;;
3) clean_unused ;;
esac
❓ أسئلة شائعة
س تنزيل ollama pull بطيء جدًا، ماذا أفعل؟
ج النماذج مستضافة على ollama.com، وقد يكون بطيئًا في بعض المناطق. يمكنك ضبط
OLLAMA_MODELS على مسار مخصص وتنزيل ملفات GGUF من موقع مرآة للاستيراد اليدوي. انظر الدرس 8 Modelfile للتفاصيل.س لم تُحرر مساحة القرص بعد حذف نموذج؟
ج يستخدم Ollama تخزينًا قائمًا على المحتوى (CAS)؛ قد تكون ملفات blob مشتركة مع نماذج أخرى.
ollama rm يزيل المراجع فقط. أعد تشغيل الخدمة لتفعيل التنظيف، أو احذف ملفات blob غير المُشار إليها يدويًا.س كيف أفحص أقصى طول سياق لنموذج؟
ج شغّل
ollama show <model> وابحث عن حقل context length. llama3.2 يدعم 131K رمز، وmistral يدعم 32K رمز.س هل يمكن تشغيل عدة نماذج في وقت واحد؟
ج نعم، لكن محدود بـ VRAM. اضبط
OLLAMA_MAX_LOADED_MODELS=2 للسماح بتحميل نموذجين معًا. نموذج صغير (3B) + نموذج تضمين يمكنهما مشاركة 8 غيغابايت VRAM.س هل يتحدث وسم latest تلقائيًا؟
ج لا.
ollama pull يجلب أحدث إصدار فقط عند التنفيذ يدويًا. النماذج المُنزَّلة لا تتحدث تلقائيًا.س كيف أحصل على النماذج في بيئة بدون اتصال؟
ج اسحب النماذج على جهاز متصل، ثم حزم دليل
~/.ollama/models/blobs/، وانقل إلى الجهاز بدون اتصال، واستخرجه في نفس المسار. يمكنك أيضًا تنزيل ملفات GGUF من HuggingFace واستيرادها عبر Modelfile.📖 ملخص
ollama list/pull/rm/showهي أوامر إدارة النماذج الأربعة الأساسية- نظام الوسوم (
الاسم/عدد المعلمات/التقدير الكمي) يحدد متغيرات النموذج بدقة - التقدير الكمي Q4_K_M هو الخيار الأفضل من حيث القيمة — تخفيض الحجم بنسبة 70% بجودة شبه بدون فقدان
- الاختيار حسب السيناريو: qwen2.5 للصينية، codellama للكود، nomic-embed-text للتضمين
- مسار تخزين النماذج قابل للتخصيص عبر المتغير البيئي OLLAMA_MODELS
- الترحيل بدون اتصال يحتاج فقط حزم دليل blobs أو الاستيراد من ملفات GGUF
📝 تمارين
- أساسي (صعوبة ⭐): اسحب 3 نماذج بأعداد معلمات مختلفة (3B/8B/تضمين)، ثم اعرض التفاصيل عبر
ollama listوollama show. - متوسط (صعوبة ⭐⭐): بناءً على إعداد hardware لديك، اختر مجموعة نماذج مناسبة لسيناريو SupportBot (محادثة رئيسية + تضمين) واشرح أسباب اختيارك.
- متقدم (صعوبة ⭐⭐⭐): نفّذ سير عمل ترحيل بدون اتصال — اسحب نماذج على جهاز، حزمها وانقلها إلى جهاز آخر بدون اتصال، وتحقق من الوظائف.