دفتر ملاحظات Docker Model Runner: الأوامر وال أمثلة
مُرجِعٌ سريعٌ للأوامر الخاصة بتشغيل نموذج Docker
Docker Model Runner (DMR) هو الحل الرسمي من Docker لتشغيل نماذج الذكاء الاصطناعي محليًا، وقد تم تقديمه في أبريل 2025. يوفر هذا الدليل مرجعاً سريعاً لجميع الأوامر الأساسية، والتكوينات، والممارسات المثلى.
التثبيت
Docker Desktop
تفعيل Docker Model Runner عبر الواجهة الرسومية:
- افتح Docker Desktop
- انتقل إلى الإعدادات → علامة التبويب AI
- اضغط على تفعيل Docker Model Runner
- أعد تشغيل Docker Desktop
/home/rg/prj/hugo-pers/content/post/2025/10/docker-model-runner-cheatsheet/docker-model-runner_w678.jpg
Docker Engine (Linux)
تثبيت حزمة المكون:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-model-plugin
# Fedora/RHEL
sudo dnf install docker-model-plugin
# Arch Linux
sudo pacman -S docker-model-plugin
التحقق من التثبيت:
docker model --help
الأوامر الأساسية
سحب النماذج
سحب النماذج المعبأة مسبقًا من Docker Hub:
# سحب أساسي
docker model pull ai/llama2
# سحب إصدار محدد
docker model pull ai/llama2:7b-q4
# سحب من سجل مخصص
docker model pull myregistry.com/models/mistral:latest
# قائمة النماذج المتاحة في مساحة اسم
docker search ai/
تشغيل النماذج
تشغيل نموذج مع خدمة API تلقائية:
# تشغيل أساسي (تفاعلي)
docker model run ai/llama2 "ما هو Docker?"
# تشغيل كخدمة (خلفية)
docker model run -d --name my-llm ai/llama2
# تشغيل مع منفذ مخصص
docker model run -p 8080:8080 ai/llama2
# تشغيل مع تحديد وحدة معالجة الرسومات
docker model run --gpus 0,1 ai/llama2
# تشغيل مع حد لذاكرة
docker model run --memory 8g ai/llama2
# تشغيل مع متغيرات بيئة
docker model run -e MODEL_CONTEXT=4096 ai/llama2
# تشغيل مع تثبيت حجم لتخزين البيانات المستمرة
docker model run -v model-data:/data ai/llama2
قائمة النماذج
عرض النماذج التي تم تنزيلها وتشغيلها:
# قائمة جميع النماذج التي تم تنزيلها
docker model ls
# قائمة النماذج التي تعمل
docker model ps
# قائمة مع معلومات تفصيلية
docker model ls --all --format json
# تصفية حسب الاسم
docker model ls --filter "name=llama"
إيقاف النماذج
إيقاف نماذج التشغيل:
# إيقاف نموذج محدد
docker model stop my-llm
# إيقاف جميع النماذج التي تعمل
docker model stop $(docker model ps -q)
# إيقاف مع وقت انتظار
docker model stop --time 30 my-llm
حذف النماذج
حذف النماذج من التخزين المحلي:
# حذف نموذج محدد
docker model rm ai/llama2
# حذف بقوة (حتى لو كان يعمل)
docker model rm -f ai/llama2
# حذف النماذج غير المستخدمة
docker model prune
# حذف جميع النماذج
docker model rm $(docker model ls -q)
تعبئة النماذج المخصصة
إنشاء مكون OCI من GGUF
تعبئة نماذج GGUF الخاصة بك:
# تعبئة أساسية
docker model package --gguf /path/to/model.gguf myorg/mymodel:latest
# تعبئة مع بيانات ميتا
docker model package \
--gguf /path/to/model.gguf \
--label "description=نموذج Llama المخصص" \
--label "version=1.0" \
myorg/mymodel:v1.0
# تعبئة ودفع في أوامر واحدة
docker model package --gguf /path/to/model.gguf --push myorg/mymodel:latest
# تعبئة مع حجم سياق مخصص
docker model package \
--gguf /path/to/model.gguf \
--context 8192 \
myorg/mymodel:latest
نشر النماذج
دفع النماذج إلى السجلات:
# تسجيل الدخول إلى Docker Hub
docker login
# دفع إلى Docker Hub
docker model push myorg/mymodel:latest
# دفع إلى سجل خاص
docker login myregistry.com
docker model push myregistry.com/models/mymodel:latest
# تسمية ودفع
docker model tag mymodel:latest myorg/mymodel:v1.0
docker model push myorg/mymodel:v1.0
استخدام API
نقاط النهاية المتوافقة مع OpenAI
يعرض Docker Model Runner تلقائيًا نقاط النهاية المتوافقة مع OpenAI:
# بدء نموذج مع API
docker model run -d -p 8080:8080 --name llm ai/llama2
# إكمال المحادثة
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "مرحبا!"}]
}'
# إنشاء نص
curl http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"prompt": "في يوم ما",
"max_tokens": 100
}'
# استجابة متسلسلة
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "أخبرني قصة"}],
"stream": true
}'
# قائمة النماذج المتاحة عبر API
curl http://localhost:8080/v1/models
# معلومات النموذج
curl http://localhost:8080/v1/models/llama2
تكوين Docker Compose
ملف Compose الأساسي
version: '3.8'
services:
llm:
image: docker-model-runner
model: ai/llama2:7b-q4
ports:
- "8080:8080"
environment:
- MODEL_CONTEXT=4096
- MODEL_TEMPERATURE=0.7
volumes:
- model-data:/root/.cache
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
model-data:
إعداد متعدد النماذج
version: '3.8'
services:
llama:
image: docker-model-runner
model: ai/llama2
ports:
- "8080:8080"
mistral:
image: docker-model-runner
model: ai/mistral
ports:
- "8081:8080"
embedding:
image: docker-model-runner
model: ai/nomic-embed-text
ports:
- "8082:8080"
للحصول على تكوينات Docker Compose المتقدمة وأوامر إضافية، راجع دليل Docker Compose الذي يغطي الشبكات، والوحدات، والأنماط المُنظمَّة.
المتغيرات البيئية
تكوين سلوك النموذج باستخدام المتغيرات البيئية:
# حجم نافذة السياق
MODEL_CONTEXT=4096
# درجة الحرارة (0.0-1.0)
MODEL_TEMPERATURE=0.7
# عينة Top-p
MODEL_TOP_P=0.9
# عينة Top-k
MODEL_TOP_K=40
# عدد الرموز القصوى
MODEL_MAX_TOKENS=2048
# عدد طبقات وحدة معالجة الرسومات
MODEL_GPU_LAYERS=35
# حجم الدفعة
MODEL_BATCH_SIZE=512
# عدد الخيوط (المعالج)
MODEL_THREADS=8
# تفعيل سجلات مفصلة
MODEL_VERBOSE=true
# مفتاح API للتوثيق
MODEL_API_KEY=your-secret-key
تشغيل مع المتغيرات البيئية:
docker model run \
-e MODEL_CONTEXT=8192 \
-e MODEL_TEMPERATURE=0.8 \
-e MODEL_API_KEY=secret123 \
ai/llama2
تكوين وحدة معالجة الرسومات
الكشف التلقائي عن وحدات معالجة الرسومات
يكتشف DMR ويستخدم وحدات معالجة الرسومات المتاحة تلقائيًا:
# استخدام جميع وحدات معالجة الرسومات
docker model run --gpus all ai/llama2
# استخدام وحدة معالجة الرسومات المحددة
docker model run --gpus 0 ai/llama2
# استخدام عدة وحدات معالجة الرسومات المحددة
docker model run --gpus 0,1,2 ai/llama2
# وحدة معالجة الرسومات مع حد لذاكرة
docker model run --gpus all --memory 16g ai/llama2
وضع المعالجة فقط باستخدام المعالج
إجبار الاستنتاج باستخدام المعالج عندما تكون وحدة معالجة الرسومات متاحة:
docker model run --no-gpu ai/llama2
توزيع النماذج الكبيرة عبر وحدات معالجة الرسومات متعددة
توزيع النماذج الكبيرة عبر وحدات معالجة الرسومات متعددة:
docker model run \
--gpus all \
--tensor-parallel 2 \
ai/llama2-70b
الفحص والتصحيح
عرض تفاصيل النموذج
# فحص تكوين النموذج
docker model inspect ai/llama2
# عرض طبقات النموذج
docker model history ai/llama2
# التحقق من حجم النموذج ومعلوماته
docker model inspect --format='{{.Size}}' ai/llama2
السجلات والمراقبة
# عرض سجلات النموذج
docker model logs llm
# متابعة السجلات في الوقت الفعلي
docker model logs -f llm
# عرض 100 سطر الأخيرة
docker model logs --tail 100 llm
# عرض السجلات مع توقيت
docker model logs -t llm
الإحصائيات الأداء
# استخدام الموارد
docker model stats
# إحصائيات نموذج محدد
docker model stats llm
# إحصائيات في تنسيق JSON
docker model stats --format json
الشبكات
إظهار APIs
# المنفذ الافتراضي (8080)
docker model run -p 8080:8080 ai/llama2
# منفذ مخصص
docker model run -p 3000:8080 ai/llama2
# ربط إلى واجهة محددة
docker model run -p 127.0.0.1:8080:8080 ai/llama2
# عدة منافذ
docker model run -p 8080:8080 -p 9090:9090 ai/llama2
تكوين الشبكة
# إنشاء شبكة مخصصة
docker network create llm-network
# تشغيل نموذج على شبكة مخصصة
docker model run --network llm-network --name llm ai/llama2
# الاتصال بشبكة موجودة
docker model run --network host ai/llama2
الأمان
التحكم في الوصول
# تشغيل مع مصادقة مفتاح API
docker model run \
-e MODEL_API_KEY=my-secret-key \
ai/llama2
# استخدام مع مصادقة
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer my-secret-key" \
-H "Content-Type: application/json" \
-d '{"model": "llama2", "messages": [...]}'
مصادقة السجل
# تسجيل الدخول إلى سجل خاص
docker login myregistry.com -u username -p password
# سحب من سجل خاص
docker model pull myregistry.com/private/model:latest
# استخدام مساعد المصادقة
docker login --password-stdin < token.txt
الممارسات المثلى
اختيار النموذج
# استخدام النماذج المُكمَّسة لتحسين الاستنتاج
docker model pull ai/llama2:7b-q4 # كمَّسة 4 بت
docker model pull ai/llama2:7b-q5 # كمَّسة 5 بت
docker model pull ai/llama2:7b-q8 # كمَّسة 8 بت
# التحقق من إصدارات النموذج
docker search ai/llama2
إدارة الموارد
# تحديد حدود الذاكرة
docker model run --memory 8g --memory-swap 16g ai/llama2
# تحديد حدود المعالج
docker model run --cpus 4 ai/llama2
# تحديد حدود الذاكرة لوحدة معالجة الرسومات
docker model run --gpus all --gpu-memory 8g ai/llama2
الفحص الصحي
# تشغيل مع فحص صحي
docker model run \
--health-cmd "curl -f http://localhost:8080/health || exit 1" \
--health-interval 30s \
--health-timeout 10s \
--health-retries 3 \
ai/llama2
تنظيم الإنتاج
للمشاريع الإنتاجية مع Kubernetes، يمكن تنظيم حاويات Docker Model Runner باستخدام مانيفستات Kubernetes القياسية. حدد التوزيعات مع حدود الموارد، والتوسع التلقائي، والتوازن في الحمل. للحصول على مرجع شامل لأوامر Kubernetes والأنماط الخاصة بالنشر، راجع دليل Kubernetes.
# مثال: نشر في تجميع Kubernetes
kubectl apply -f llm-deployment.yaml
# توسيع التوزيع
kubectl scale deployment llm --replicas=3
# إظهار كخدمة
kubectl expose deployment llm --type=LoadBalancer --port=8080
التصحيح
المشكلات الشائعة
لن يبدأ النموذج:
# التحقق من مساحة القرص المتاحة
df -h
# عرض سجلات الخطأ التفصيلية
docker model logs --tail 50 llm
# التحقق من توفر وحدة معالجة الرسومات
nvidia-smi # لوحدات معالجة الرسومات NVIDIA
أخطاء نقص الذاكرة:
# استخدام نموذج مُكمَّسة أصغر
docker model pull ai/llama2:7b-q4
# تقليل حجم السياق
docker model run -e MODEL_CONTEXT=2048 ai/llama2
# تقليل حجم الدفعة
docker model run -e MODEL_BATCH_SIZE=256 ai/llama2
بطء الاستنتاج:
# التحقق من استخدام وحدة معالجة الرسومات
docker model stats llm
# التأكد من استخدام وحدة معالجة الرسومات
docker model logs llm | grep -i gpu
# زيادة طبقات وحدة معالجة الرسومات
docker model run -e MODEL_GPU_LAYERS=40 ai/llama2
الأوامر التشخيصية
# معلومات النظام
docker model system info
# استخدام القرص
docker model system df
# تنظيف الموارد غير المستخدمة
docker model system prune
# تنظيف كامل (حذف جميع النماذج)
docker model system prune -a
أمثلة التكامل
التكامل مع Python
import openai
# تكوين العميل لـ Docker Model Runner
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed" # لا يتطلب DMR مفتاحًا بشكل افتراضي
)
# إكمال المحادثة
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "user", "content": "مرحبا!"}
]
)
print(response.choices[0].message.content)
# التدفق
stream = client.chat.completions.create(
model="llama2",
messages=[{"role": "user", "content": "أخبرني قصة"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
نسخة Bash
#!/bin/bash
# بدء النموذج إذا لم يكن يعمل
if ! docker model ps | grep -q "llm"; then
docker model run -d --name llm -p 8080:8080 ai/llama2
echo "الانتظار حتى يبدأ النموذج..."
sleep 10
fi
# إجراء مكالمة API
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "'"$1"'"}]
}' | jq -r '.choices[0].message.content'
تكامل Node.js
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:8080/v1',
apiKey: 'not-needed'
});
async function chat(message) {
const completion = await client.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: message }]
});
return completion.choices[0].message.content;
}
// الاستخدام
const response = await chat('ما هو Docker Model Runner؟');
console.log(response);
الروابط المفيدة
الوثائق الرسمية
- صفحة Docker Model Runner الرسمية
- وثائق Docker Model Runner
- دليل بدء استخدام Docker Model Runner
- مدونة إعلان Docker Model Runner