دفتر ملاحظات 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
دعم NVIDIA RTX لـ Docker
لتفعيل تشغيل النماذج الكبيرة على وحدة معالجة الرسومات (GPU) بدلًا من المعالج (CPU)، قم بتثبيت nvidia-container-toolkit:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
ثم يمكنك تشغيل الحاويات باستخدام --gpus all
docker run --rm --gpus all <image> <command>
تحقق من أن الحاوية يمكنها رؤية وحدة المعالجة الرسومية:
docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi
إضافة دعم NVIDIA لـ Docker Model Runner
يحتاج Docker Model Runner إلى تكوين صريح لوحدة المعالجة الرسومية. على عكس الأوامر القياسية docker run، لا يدعم docker model run الأعلام --gpus أو -e. بدلًا من ذلك، يجب عليك:
- تكوين Docker daemon لاستخدام runtime NVIDIA بشكل افتراضي
أولًا، تحقق من مكان تثبيت nvidia-container-runtime:
which nvidia-container-runtime
سيكون هذا عادةً /usr/bin/nvidia-container-runtime. استخدم هذا المسار في التكوين أدناه.
أنشئ أو قم بتحديث /etc/docker/daemon.json:
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
ملاحظة: إذا عادت which nvidia-container-runtime إلى مسار مختلف، قم بتحديث قيمة "path" في تكوين JSON وفقًا لذلك.
أعد تشغيل Docker:
sudo systemctl restart docker
التحقق من التكوين:
docker info | grep -i runtime
يجب أن ترى Default Runtime: nvidia في الناتج.
- إعادة تثبيت Docker Model Runner مع دعم GPU
يجب أن يتم تثبيت Docker Model Runner أو إعادة تثبيته مع دعم GPU صريح:
# توقف المُشغل الحالي
docker model stop-runner
# إعادة التثبيت مع دعم CUDA
docker model reinstall-runner --gpu cuda
هذا سيقوم بسحب الإصدار الممكّن من CUDA (docker/model-runner:latest-cuda) بدلًا من الإصدار المخصص فقط للمعالج.
- التحقق من الوصول إلى GPU
تحقق من أن حاوية Docker Model Runner يمكنها الوصول إلى وحدة المعالجة الرسومية:
docker exec docker-model-runner nvidia-smi
- اختبار النموذج مع GPU
قم بتشغيل نموذج وتحقق من السجلات للتأكيد على استخدام GPU:
docker model run ai/qwen3:14B-Q6_K "من أنت؟"
تحقق من السجلات للحصول على تأكيد GPU:
docker model logs | grep -i cuda
يجب أن ترى رسائل مثل:
يتم استخدام الجهاز CUDA0 (NVIDIA GeForce RTX 4080)تم نقل 41/41 طبقات إلى GPUحجم مخزن GPU CUDA0 = 10946.13 ميغا بايت
ملاحظة: إذا قمت بتثبيت Docker Model Runner مسبقًا دون دعم GPU، فعليك إعادة تثبيته مع العلم --gpu cuda. لا يكفي فقط تكوين Docker daemon - يجب أن يكون الحاوية نفسها إصدارًا ممكّنًا من CUDA.
الخلفيات المتوفرة لـ GPU:
cuda- NVIDIA CUDA (الأكثر شيوعًا)rocm- AMD ROCmmusa- Moore Threads MUSAcann- Huawei CANNauto- الكشف التلقائي (الافتراضي)none- فقط المعالج
الأوامر الأساسية
سحب النماذج
سحب النماذج المعبأة مسبقًا من 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
بشكل عام، لا نملك خيارات كثيرة لتشغيل النماذج عبر CLI:
docker model run --help
Usage: docker model run MODEL [PROMPT]
تشغيل نموذج وتفاعل معه باستخدام طلب مُقدّم أو وضع المحادثة
الخيارات:
--color string استخدام إخراج ملون (auto|yes|no) (الافتراضي "auto")
--debug تمكين سجلات التصحيح
-d, --detach تحميل النموذج في الخلفية دون تفاعل
--ignore-runtime-memory-check لا تمنع السحب إذا تجاوزت الذاكرة المقدرة للنموذج موارد النظام.
قائمة النماذج
عرض النماذج المحمّلة والتشغيل:
# قائمة جميع النماذج المحمّلة
docker model ls
# قائمة النماذج المشغّلة
docker model ps
# قائمة مع معلومات تفصيلية
docker model ls --json
# قائمة مع معلومات تفصيلية
docker model ls --openai
# سيعيد فقط رموز هش
docker model ls -q
حذف النماذج
حذف النماذج من التخزين المحلي:
# حذف نموذج محدد
docker model rm ai/llama2
# حذف بالقوة (حتى لو كان يعمل)
docker model rm -f ai/llama2
# حذف النماذج غير المستخدمة
docker model prune
# حذف جميع النماذج
docker model rm $(docker model ls -q)
تكوين أحجام سياق النماذج
لا يمكننا استخدام CLI لتحديد حجم سياق النموذج لطلب معين.
بشكل أساسي، يمكننا التحكم في حجم سياق النموذج فقط في ثلاث طرق:
-
حزم النموذج بأنفسنا، مع تحديد حجم السياق المُحدّد مسبقًا (انظر المزيد عن هذا في القسم التالي.)
-
عند استخدام docker model runner، تكوين الأمر مع معلمة –context-size مثل:
docker model configure --context-size=10000 ai/gemma3-qat:4B
ثم يمكنك استخدام curl له، ولكن لا يمكنك فعل docker model run... - سيتجاهل هذا الأمر التكوين.
- في ملف
docker-compose.yaml، ولكن لا يمكننا استخدام صورة docker-model-runner بهذه الطريقة، لأنها تمرر إلى النموذج حجم سياق مُحدّد مسبقًا بقيمة 4096
...
models:
llm_model:
model: ai/gemma3-qat:4B
context_size: 10240
...
للحصول على تفاصيل إضافية، يرجى رؤية المنشور المخصص حول هذا الموضوع: تحديد حجم السياق في DMR
حزم النماذج المخصصة
إنشاء OCI Artifact من 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_TEMPERATURE=0.7
volumes:
- docker-model-runner-models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
docker-model-runner-models:
external: true
إعداد متعدد النماذج
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 الذي يغطي الشبكات، والوحدات، والأنماط المُنظمّة.
المتغيرات البيئية
قم بتكوين سلوك النموذج باستخدام المتغيرات البيئية:
# درجة الحرارة (0.0-1.0)
MODEL_TEMPERATURE=0.7
# تجريب p
MODEL_TOP_P=0.9
# تجريب k
MODEL_TOP_K=40
# أقصى عدد من الرموز
MODEL_MAX_TOKENS=2048
# عدد طبقات GPU
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_TEMPERATURE=0.8 \
-e MODEL_API_KEY=secret123 \
ai/llama2
تكوين GPU
الكشف التلقائي عن GPU
يكتشف DMR تلقائيًا ويستخدم GPUs المتاحة:
# استخدام جميع GPUs
docker model run --gpus all ai/llama2
# استخدام GPU محدد
docker model run --gpus 0 ai/llama2
# استخدام عدة GPUs محددة
docker model run --gpus 0,1,2 ai/llama2
# GPU مع حد مساحة الذاكرة
docker model run --gpus all --memory 16g ai/llama2
وضع المعالج فقط
إجبار الاستنتاج على المعالج عندما يكون GPU متاحًا:
docker model run --no-gpu ai/llama2
توزيع النماذج الكبيرة عبر GPUs متعددة
توزيع النماذج الكبيرة عبر GPUs:
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
# تحديد حدود الذاكرة لـ GPU
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
# تحقق من توفر GPU
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
الاستنتاج البطيء:
# تحقق من استخدام GPU
docker model stats llm
# تأكد من استخدام GPU
docker model logs llm | grep -i gpu
# زيادة طبقات 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