إضافة دعم وحدات معالجة الرسومات من نيفيديا إلى Docker Model Runner

تفعيل تسريع وحدة معالجة الرسومات (GPU) لتشغيل نماذج Docker مع دعم NVIDIA CUDA

Docker Model Runner هو الأداة الرسمية لـ Docker لتشغيل النماذج الذكية الاصطناعية محليًا، ولكن تمكين تسريع GPU من NVidia في Docker Model Runner يتطلب تكوينًا خاصًا.

على عكس الأوامر القياسية لـ docker run، لا يدعم docker model run الأعلام --gpus أو -e، لذا يجب تكوين دعم GPU على مستوى محرك Docker أثناء تثبيت المُشغل.

إذا كنت تبحث عن حل بديل لاستضافة نماذج LLM مع تكوين GPU أسهل، ففكر في Ollama، الذي يحتوي على دعم GPU مدمج وتركيب أسهل. ومع ذلك، يوفر Docker Model Runner دمجًا أفضل مع نظام Docker ونشر OCI.

Docker Model Runner مع دعم GPU من NVIDIA هذا الصورة الجميلة تُولَّد بواسطة نموذج AI Flux 1 dev.

المتطلبات الأساسية

قبل تكوين دعم GPU، تأكد من أن لديك:

تحقق من توفر GPU:

nvidia-smi

اختبار الوصول إلى GPU من Docker:

docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi

للحصول على المزيد من أوامر Docker وخيارات التكوين، راجع دفتر ملاحظات Docker.

الخطوة 1: تكوين محرك Docker لتشغيل NVIDIA

يحتاج Docker Model Runner إلى تعيين runtime من NVIDIA كـ runtime الافتراضي في تكوين محرك Docker.

ابحث عن مسار runtime لـ NVIDIA Container

أولًا، حدد موقع تثبيت nvidia-container-runtime:

which nvidia-container-runtime

هذا يُخرج عادة /usr/bin/nvidia-container-runtime. احفظ هذا المسار للاستخدام في الخطوة التالية.

تكوين محرك Docker

أنشئ أو قم بتحديث /etc/docker/daemon.json لتعيين NVIDIA كـ runtime الافتراضي:

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

قم بتطبيق التكوين بإعادة تشغيل Docker:

sudo systemctl restart docker

التحقق من التكوين

تأكد من أن runtime من NVIDIA تم تكوينه:

docker info | grep -i runtime

يجب أن ترى Default Runtime: nvidia في الناتج.

الخطوة 2: تثبيت Docker Model Runner مع دعم GPU

يجب تثبيت Docker Model Runner أو إعادة تثبيته مع دعم GPU صريح. يحتاج المُشغل نفسه إلى أن يكون نسخة CUDA-مُفعَّلة.

توقف المُشغل الحالي (إذا كان يعمل)

إذا كان Docker Model Runner مثبتًا بالفعل، توقفه أولاً:

docker model stop-runner

تثبيت / إعادة تثبيت مع دعم CUDA

تثبيت أو إعادة تثبيت Docker Model Runner مع دعم GPU من CUDA:

docker model reinstall-runner --gpu cuda

هذا الأمر:

  • يسحب النسخة المُفعَّلة لـ CUDA (docker/model-runner:latest-cuda) بدلًا من النسخة فقط لـ CPU
  • يكوِّن المُشغل لتستخدم runtime من NVIDIA
  • يفعِّل تسريع GPU لكل النماذج

ملاحظة: إذا كنت قد قمت بتثبيت Docker Model Runner دون دعم GPU، فعليك إعادة تثبيته مع العلمة --gpu cuda. لا يكفي فقط تكوين محرك Docker - يحتاج المُشغل نفسه إلى أن يكون نسخة CUDA-مُفعَّلة.

واجهات GPU المتاحة

يدعم Docker Model Runner عدة واجهات GPU:

  • cuda - NVIDIA CUDA (الأكثر شيوعًا لـ GPUs من NVIDIA)
  • rocm - AMD ROCm (لـ GPUs من AMD)
  • musa - Moore Threads MUSA
  • cann - Huawei CANN
  • auto - الكشف التلقائي (الافتراضي، قد لا يعمل بشكل صحيح)
  • none - فقط CPU

لـ GPUs من NVIDIA، استخدم دائمًا --gpu cuda صراحة.

الخطوة 3: التحقق من الوصول إلى GPU

بعد التثبيت، تأكد من أن Docker Model Runner يمكنه الوصول إلى GPU.

التحقق من الوصول إلى GPU من داخل مُشغل Docker Model Runner

اختبار الوصول إلى GPU من داخل حاوية Docker Model Runner:

docker exec docker-model-runner nvidia-smi

هذا يجب أن يعرض معلومات GPU، مما يؤكد أن الحاوية لديها الوصول إلى GPU.

التحقق من حالة المُشغل

تأكد من أن Docker Model Runner يعمل:

docker model status

يجب أن ترى أن المُشغل نشط مع دعم llama.cpp.

الخطوة 4: اختبار النموذج مع GPU

قم بتشغيل نموذج وتأكد من أنه يستخدم GPU.

تشغيل نموذج

ابدأ استنتاج النموذج:

docker model run ai/qwen3:14B-Q6_K "من أنت؟"

التحقق من استخدام GPU في السجلات

تحقق من سجلات Docker Model Runner للتأكيد على استخدام GPU:

docker model logs | grep -i cuda

يجب أن ترى رسائل تشير إلى استخدام GPU:

  • using device CUDA0 (NVIDIA GeForce RTX 4080) - تم اكتشاف جهاز GPU
  • offloaded 41/41 layers to GPU - تم تحميل طبقات النموذج على GPU
  • CUDA0 model buffer size = 10946.13 MiB - تخصيص الذاكرة على GPU
  • CUDA0 KV buffer size = 640.00 MiB - مخزن المفاتيح والقيم على GPU
  • CUDA0 compute buffer size = 306.75 MiB - مخزن الحساب على GPU

مراقبة استخدام GPU

في نافذة أخرى، مراقبة استخدام GPU في الوقت الفعلي:

nvidia-smi -l 1

يجب أن ترى زيادة في استخدام الذاكرة وتشغيل GPU عند تشغيل النموذج.

للحصول على خيارات مراقبة GPU متقدمة وأدوات إضافية، راجع دليلنا حول تطبيقات مراقبة GPU في Linux / Ubuntu.

حل المشكلات

النموذج لا يزال يستخدم CPU

إذا استمر النموذج في استخدام CPU:

  1. تحقق من تكوين محرك Docker:

    docker info | grep -i runtime
    

    يجب أن تظهر Default Runtime: nvidia

  2. تحقق من runtime للحاوية المُشغلة:

    docker inspect docker-model-runner | grep -A 2 '"Runtime"'
    

    يجب أن تظهر "Runtime": "nvidia"

  3. إعادة تثبيت المُشغل مع دعم GPU:

    docker model reinstall-runner --gpu cuda
    
  4. تحقق من السجلات للحصول على أخطاء:

    docker model logs | tail -50
    

لم يتم اكتشاف GPU

إذا لم يتم اكتشاف GPU:

  1. تحقق من تثبيت NVIDIA Container Toolkit:

    dpkg -l | grep nvidia-container-toolkit
    
  2. اختبار الوصول إلى GPU باستخدام Docker القياسي:

    docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi
    

    للحصول على مساعدة في حل مشكلات Docker، راجع دليلنا حول دفتر ملاحظات Docker.

  3. تحقق من قواعد تشغيل NVIDIA:

    nvidia-smi
    

مشكلات في الأداء

إذا كان أداء GPU ضعيفًا:

  1. تحقق من استخدام GPU:

    nvidia-smi
    

    ابحث عن نسبة استخدام GPU المرتفعة

  2. تحقق من تحميل طبقات النموذج على GPU:

    docker model logs | grep "offloaded.*layers to GPU"
    

    يجب أن يتم تحميل جميع الطبقات على GPU

  3. تحقق من مشكلات الذاكرة:

    nvidia-smi
    

    تأكد من أن الذاكرة على GPU لم تُنفد

أفضل الممارسات

  1. حدد واجهة GPU صراحة: استخدم --gpu cuda بدلًا من --gpu auto لـ GPUs من NVIDIA لضمان التكوين الصحيح.

  2. تحقق من التكوين بعد التغييرات: تحقق دائمًا من docker info | grep -i runtime بعد تعديل إعدادات محرك Docker.

  3. مراقبة استخدام GPU: استخدم nvidia-smi لمراقبة استخدام الذاكرة وتشغيل GPU أثناء استنتاج النموذج. للحصول على أدوات مراقبة متقدمة، راجع دليلنا حول تطبيقات مراقبة GPU في Linux / Ubuntu.

  4. راجع السجلات بانتظام: تحقق من docker model logs للتأكد من أن النماذج تستخدم تسريع GPU.

  5. استخدم أحجام النماذج المناسبة: تأكد من أن GPU لديك لديه ذاكرة كافية للنموذج. استخدم النماذج المُكمَّرة (Q4، Q5، Q6، Q8) للحصول على كفاءة أفضل في استخدام ذاكرة GPU. للحصول على مساعدة في اختيار GPU المناسب لمهامك في الذكاء الاصطناعي، راجع دليلنا حول مقارنة مواصفات GPU من NVIDIA مناسبة للذكاء الاصطناعي.

روابط مفيدة