إضافة دعم وحدات معالجة الرسومات من نيفيديا إلى 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.
هذا الصورة الجميلة تُولَّد بواسطة نموذج AI Flux 1 dev.
المتطلبات الأساسية
قبل تكوين دعم GPU، تأكد من أن لديك:
- GPU من NVIDIA مع قواعد تشغيل متوافقة. للحصول على مساعدة في اختيار GPU المناسب للعملات الثقيلة الذكية الاصطناعية، راجع دليلنا حول مقارنة مواصفات GPU من NVIDIA مناسبة للذكاء الاصطناعي.
- NVIDIA Container Toolkit مثبت (راجع قسم دعم NVIDIA RTX)
- Docker Model Runner مثبت (يمكن إعادة تثبيته مع دعم 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 MUSAcann- Huawei CANNauto- الكشف التلقائي (الافتراضي، قد لا يعمل بشكل صحيح)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)- تم اكتشاف جهاز GPUoffloaded 41/41 layers to GPU- تم تحميل طبقات النموذج على GPUCUDA0 model buffer size = 10946.13 MiB- تخصيص الذاكرة على GPUCUDA0 KV buffer size = 640.00 MiB- مخزن المفاتيح والقيم على GPUCUDA0 compute buffer size = 306.75 MiB- مخزن الحساب على GPU
مراقبة استخدام GPU
في نافذة أخرى، مراقبة استخدام GPU في الوقت الفعلي:
nvidia-smi -l 1
يجب أن ترى زيادة في استخدام الذاكرة وتشغيل GPU عند تشغيل النموذج.
للحصول على خيارات مراقبة GPU متقدمة وأدوات إضافية، راجع دليلنا حول تطبيقات مراقبة GPU في Linux / Ubuntu.
حل المشكلات
النموذج لا يزال يستخدم CPU
إذا استمر النموذج في استخدام CPU:
-
تحقق من تكوين محرك Docker:
docker info | grep -i runtimeيجب أن تظهر
Default Runtime: nvidia -
تحقق من runtime للحاوية المُشغلة:
docker inspect docker-model-runner | grep -A 2 '"Runtime"'يجب أن تظهر
"Runtime": "nvidia" -
إعادة تثبيت المُشغل مع دعم GPU:
docker model reinstall-runner --gpu cuda -
تحقق من السجلات للحصول على أخطاء:
docker model logs | tail -50
لم يتم اكتشاف GPU
إذا لم يتم اكتشاف GPU:
-
تحقق من تثبيت NVIDIA Container Toolkit:
dpkg -l | grep nvidia-container-toolkit -
اختبار الوصول إلى GPU باستخدام Docker القياسي:
docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smiللحصول على مساعدة في حل مشكلات Docker، راجع دليلنا حول دفتر ملاحظات Docker.
-
تحقق من قواعد تشغيل NVIDIA:
nvidia-smi
مشكلات في الأداء
إذا كان أداء GPU ضعيفًا:
-
تحقق من استخدام GPU:
nvidia-smiابحث عن نسبة استخدام GPU المرتفعة
-
تحقق من تحميل طبقات النموذج على GPU:
docker model logs | grep "offloaded.*layers to GPU"يجب أن يتم تحميل جميع الطبقات على GPU
-
تحقق من مشكلات الذاكرة:
nvidia-smiتأكد من أن الذاكرة على GPU لم تُنفد
أفضل الممارسات
-
حدد واجهة GPU صراحة: استخدم
--gpu cudaبدلًا من--gpu autoلـ GPUs من NVIDIA لضمان التكوين الصحيح. -
تحقق من التكوين بعد التغييرات: تحقق دائمًا من
docker info | grep -i runtimeبعد تعديل إعدادات محرك Docker. -
مراقبة استخدام GPU: استخدم
nvidia-smiلمراقبة استخدام الذاكرة وتشغيل GPU أثناء استنتاج النموذج. للحصول على أدوات مراقبة متقدمة، راجع دليلنا حول تطبيقات مراقبة GPU في Linux / Ubuntu. -
راجع السجلات بانتظام: تحقق من
docker model logsللتأكد من أن النماذج تستخدم تسريع GPU. -
استخدم أحجام النماذج المناسبة: تأكد من أن GPU لديك لديه ذاكرة كافية للنموذج. استخدم النماذج المُكمَّرة (Q4، Q5، Q6، Q8) للحصول على كفاءة أفضل في استخدام ذاكرة GPU. للحصول على مساعدة في اختيار GPU المناسب لمهامك في الذكاء الاصطناعي، راجع دليلنا حول مقارنة مواصفات GPU من NVIDIA مناسبة للذكاء الاصطناعي.
روابط مفيدة
- دفتر ملاحظات Docker Model Runner
- مستندات Docker Model Runner الرسمية
- دليل تثبيت NVIDIA Container Toolkit
- مقارنة Docker Model Runner و Ollama
- دفتر ملاحظات Ollama - حل بديل لاستضافة نماذج LLM مع دعم GPU مدمج
- دفتر ملاحظات Docker - مرجع كامل لأوامر Docker وتكوينها
- تطبيقات مراقبة GPU في Linux / Ubuntu - قائمة ومقارنة لتطبيقات مراقبة GPU من NVIDIA
- مقارنة مواصفات GPU من NVIDIA مناسبة للذكاء الاصطناعي - دليل لاختيار GPU المناسب لمهام الذكاء الاصطناعي