دفتر ملاحظات Docker Model Runner: الأوامر وال أمثلة

مُرجِعٌ سريعٌ للأوامر الخاصة بتشغيل نموذج Docker

Docker Model Runner (DMR) هو الحل الرسمي من Docker لتشغيل نماذج الذكاء الاصطناعي محليًا، وقد تم تقديمه في أبريل 2025. يوفر هذا الدليل مرجعاً سريعاً لجميع الأوامر الأساسية، والتكوينات، والممارسات المثلى.

قائمة النماذج المتاحة في Docker Model Runner

التثبيت

Docker Desktop

تفعيل Docker Model Runner عبر الواجهة الرسومية:

  1. افتح Docker Desktop
  2. انتقل إلى الإعدادات → علامة التبويب AI
  3. اضغط على تفعيل Docker Model Runner
  4. أعد تشغيل Docker Desktop

/home/rg/prj/hugo-pers/content/post/2025/10/docker-model-runner-cheatsheet/docker-model-runner_w678.jpg نافذة Docker Model Runner

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);

الروابط المفيدة

الوثائق الرسمية

الدليلات المفيدة

مقالات المقارنة