دليل البدء السريع لـ Docker من Ultralytics#
يقدم هذا الدليل مقدمة شاملة لإعداد بيئة Docker لمشاريع Ultralytics. Docker منصة لتطوير التطبيقات وشحنها وتشغيلها في حاويات. وتفيد المنصة خصوصًا في ضمان عمل البرنامج بالطريقة نفسها دائمًا، بصرف النظر عن مكان نشره. لمزيد من التفاصيل، تفضل بزيارة مستودع Ultralytics على Docker Hub.
ما ستتعلمه#
- إعداد Docker مع دعم NVIDIA
- تثبيت صور Ultralytics لـ Docker
- تشغيل Ultralytics في حاوية Docker مع دعم CPU أو GPU
- استخدام خادم عرض مع Docker لإظهار نتائج الكشف من Ultralytics
- تركيب الدلائل المحلية داخل الحاوية
شاهد: كيفية البدء باستخدام Docker | عرض توضيحي مباشر لاستخدام حزمة Ultralytics Python داخل Docker 🎉
المتطلبات الأساسية#
- تأكد من تثبيت Docker على نظامك. وإن لم يكن مثبتًا، يمكنك تنزيله وتثبيته من موقع Docker.
- لتسريع GPU، تأكد من أن نظامك يحتوي على GPU من NVIDIA وأن برامج تشغيل NVIDIA مثبتة. لا تتطلب صور CPU أجهزة NVIDIA.
- إذا كنت تستخدم أجهزة NVIDIA Jetson، فتأكد من تثبيت إصدار JetPack المناسب. راجع دليل NVIDIA Jetson لمزيد من التفاصيل.
إعداد Docker مع دعم NVIDIA (اختياري)#
أولًا، تحقق من تثبيت برامج تشغيل NVIDIA على النحو الصحيح بتشغيل:
nvidia-smiتثبيت NVIDIA Container Toolkit#
والآن، لنثبّت NVIDIA Container Toolkit لتمكين دعم GPU في حاويات Docker:
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حدّث قوائم الحزم وثبّت NVIDIA Container Toolkit:
sudo apt-get updatesudo apt-get install -y nvidia-container-toolkitالتحقق من أجهزة CDI باستخدام Docker#
شغّل nvidia-ctk cdi list للتأكد من توفر أجهزة CDI الخاصة بـ GPU (تُنشئ خدمة nvidia-cdi-refresh التابعة لمجموعة الأدوات المواصفة وتحافظ عليها تلقائيًا في إصدارات مجموعة الأدوات >= 1.18):
nvidia-ctk cdi listينبغي أن تظهر إدخالات مثل nvidia.com/gpu=0 وnvidia.com/gpu=all. كما تظهر أجهزة CDI المكتشفة في docker info.
تثبيت صور Ultralytics لـ Docker#
تنشر Ultralytics الصور التالية على Docker Hub. وتُبنى كل صورة من ملف Dockerfile المرتبط بها بواسطة سير عمل النشر إلى Docker.
| الوسم | المنصة والغرض | المصدر |
|---|---|---|
latest | Linux AMD64 مع CUDA لتدريب GPU والاستدلال | Dockerfile |
latest-export | Linux AMD64 مع CUDA وتبعيات التصدير للتحويل وقياس الأداء | Dockerfile-export |
latest-amd | Linux AMD64 مع ROCm وMIGraphX لتدريب GPU من AMD والاستدلال | Dockerfile-amd |
latest-python | صورة Linux خفيفة لـ AMD64 وPython 3.14 للاستدلال على CPU | Dockerfile-python |
latest-python-export | صورة Linux لـ AMD64 وPython 3.13 وCPU، تتضمن تبعيات التصدير | Dockerfile-python-export |
latest-cpu | صورة CPU لـ Linux AMD64 مع Bash بوصفه الأمر الافتراضي | Dockerfile-cpu |
latest-jupyter | صورة CPU لـ Linux AMD64 تتضمن JupyterLab ودفاتر دروس Ultralytics | Dockerfile-jupyter |
latest-arm64 | صورة Linux لـ ARM64 وPython 3.13 وCPU، مخصصة لأجهزة Apple silicon وRaspberry Pi وأنظمة ARM64 الأخرى | Dockerfile-arm64 |
latest-nvidia-arm64 | Linux ARM64 لـ DGX Spark (DGX OS) وPyTorch على Thor (JetPack 7.1)؛ لا يدعم JetPack إصدار TensorRT المضمّن | Dockerfile-nvidia-arm64 |
latest-jetson-jetpack6 | Linux ARM64 لأجهزة NVIDIA Jetson التي تعمل بـ JetPack 6 | Dockerfile-jetson-jetpack6 |
latest-jetson-jetpack5 | Linux ARM64 لأجهزة NVIDIA Jetson التي تعمل بـ JetPack 5 | Dockerfile-jetson-jetpack5 |
latest-jetson-jetpack4 | Linux ARM64 لأجهزة NVIDIA Jetson التي تعمل بـ JetPack 4 | Dockerfile-jetson-jetpack4 |
latest-runner | صورة CUDA لـ Linux AMD64 لمُشغّل GPU مستضاف ذاتيًا لـ GitHub Actions | Dockerfile-runner |
latest-runner-cpu | صورة Linux AMD64 لمُشغّل CPU مستضاف ذاتيًا لـ GitHub Actions | Dockerfile-runner-cpu |
تستخدم صور AMD64 لـ GPU (latest وlatest-export وlatest-runner) PyTorch 2.14 وCUDA 13.2. تحقّق من دعم برنامج التشغيل المضيف لـ CUDA باستخدام nvidia-smi قبل تشغيل هذه الصور؛ فتثبيت حاوية أحدث لا يحدّث برنامج التشغيل المضيف. أزال CUDA 13 دعم وحدات GPU من أجيال Maxwell وPascal وVolta، بما فيها Tesla P100 وV100. راجع ملاحظات إصدار CUDA من NVIDIA ومتطلبات توافق برامج التشغيل.
تستخدم صورة NVIDIA ARM64 إصدار NVIDIA PyTorch 26.08 مع CUDA 13.4 وTensorRT 11.2. ولا يمتد دعم PyTorch لـ Thor إلى TensorRT: إذ لا تدعم NVIDIA إصدار TensorRT 11.2 على JetPack. ولعمليات تصدير TensorRT على Jetson، استخدم بيئة تشغيل TensorRT 10.x المدعومة لإصدار JetPack لديك. اتبع متطلبات المنصة في دليل Jetson أو دليل DGX Spark. وتحتفظ صور JetPack 4 و5 و6 بحزمها البرمجية المنفصلة الخاصة بكل جهاز.
يتوفر ملف Dockerfile الخاص بـ Conda لإجراء عمليات البناء المحلية؛ وقد عُطّل النشر الآلي لـ latest-conda، لذا لا يتضمن وسم السجل هذا التحديثات.
استخدم latest-python-export لعمليات التصدير إلى LiteRT. تحتفظ صورة GPU latest-export بـ PyTorch 2.14 ولا تتضمن LiteRT، لأن تبعيتها الحالية تتطلب إصدارًا أقدم من PyTorch 2.14.
تستخدم صور Python وCPU وJupyter ومشغّل CPU الإصدار Python 3.14. وتستخدم صورة تصدير Python الأساس latest-python-3.13، المبني من Dockerfile-python نفسه باستخدام --build-arg PYTHON_VERSION=3.13، لأن TensorFlow وCoreML وPaddlePaddle لا تدعم Python 3.14 بعد.
تتبّع الوسوم التي تبدأ بـ latest أحدث إصدار منشور من بناء الفرع الرئيسي. وتستبدل الوسوم ذات الإصدارات البادئة latest بإصدار من Ultralytics، مثل VERSION أو VERSION-cpu أو VERSION-jetson-jetpack6. استخدم وسمًا ذا إصدار للحصول على بيئة قابلة لإعادة الإنتاج.
لسحب أحدث صورة:
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latestلبناء صورة بنفسك بدلًا من ذلك، استنسخ المستودع ومرّر ملف Dockerfile المطابق من الجدول أعلاه، مع استخدام جذر المستودع كسياق للبناء:
# Build the CPU image locally from docker/Dockerfile-cpu
sudo docker build -t ultralytics/ultralytics:latest-cpu -f docker/Dockerfile-cpu .تشغيل Ultralytics في حاوية Docker#
إليك طريقة تشغيل حاوية Ultralytics لـ Docker:
استخدام CPU فقط#
# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpuاستخدام وحدات GPU#
# Run with all GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 ultralytics/ultralytics:latestيخصص الخيار -it طرفية زائفة (pseudo-TTY) ويبقي الإدخال القياسي مفتوحًا، ما يتيح لك التفاعل مع الحاوية. ويتيح الخيار --ipc=host مشاركة مساحة أسماء IPC الخاصة بالمضيف، وهو أمر أساسي لمشاركة الذاكرة بين العمليات. أما لوحدات GPU من NVIDIA، فيمنح الخيار --device nvidia.com/gpu=... إمكانية الوصول عبر CDI. ولوحدات GPU من AMD، تتيح الخيارات --device الوصول إلى برنامج تشغيل نواة GPU (/dev/kfd) وعُقد العرض (/dev/dri).
على Linux، تتطلب طلبات أجهزة CDI إصدار Docker >= 28.2.0 (يكون CDI مفعّلًا افتراضيًا) وإصدار nvidia-container-toolkit >= 1.18 (إنشاء مواصفة CDI تلقائيًا). حدّث مضيفات Linux الأقدم قبل تشغيل حاويات GPU. وقد يؤدي الخيار القديم --gpus all إلى فقدان إمكانية الوصول إلى GPU (Failed to initialize NVML: Unknown Error) عند إعادة تحميل المضيف لـ systemd أثناء تحديثات الحزم الاعتيادية (nvidia-container-toolkit#48). تتضمن طلبات CDI --device عُقد الأجهزة في تهيئة الحاوية، لذا تحتفظ الحاويات طويلة التشغيل، مثل عمال التدريب أو مشغّلات CI، بإمكانية الوصول إلى GPU عبر عمليات إعادة التحميل.
يستخدم دعم GPU في Docker Desktop على Windows حاليًا --gpus all مع الواجهة الخلفية WSL 2، لأن أجهزة NVIDIA CDI غير متاحة هناك. ولا يستخدم Windows نظام systemd الخاص بـ Linux، لذا لا ينطبق عليه إخفاق إعادة تحميل البرنامج الخفي المذكور أعلاه.
ملاحظة بشأن إمكانية الوصول إلى الملفات#
للعمل على الملفات الموجودة على جهازك المحلي من داخل الحاوية، يمكنك استخدام وحدات تخزين Docker:
# Mount a local directory into the container
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestاستبدل /path/on/host بمسار الدليل على جهازك المحلي، و/path/in/container بالمسار المطلوب داخل حاوية Docker.
الاحتفاظ بمخرجات التدريب#
تُحفظ مخرجات التدريب افتراضيًا في /ultralytics/runs/<task>/<name>/ داخل الحاوية. وإذا لم تركّب دليلًا من المضيف، فستُفقد المخرجات عند إزالة الحاوية.
للاحتفاظ بمخرجات التدريب:
# Recommended: mount workspace and specify project path
sudo docker run --rm -it -v "$(pwd)":/w -w /w ultralytics/ultralytics:latest \
yolo train model=yolo26n.pt data=coco8.yaml project=/w/runsيحفظ هذا جميع مخرجات التدريب في ./runs على جهازك المضيف.
تشغيل تطبيقات واجهة المستخدم الرسومية (GUI) في حاوية Docker#
يُستخدم Docker أساسًا لوضع التطبيقات التي تعمل في الخلفية وبرامج CLI داخل حاويات، لكنه يستطيع أيضًا تشغيل البرامج الرسومية. في عالم Linux، يتولى خادما عرض رسوميّان رئيسيان التعامل مع العرض الرسومي: X11 (المعروف أيضًا باسم نظام نوافذ X) وWayland. قبل البدء، من الضروري تحديد خادم الرسوميات الذي تستخدمه حاليًا. نفّذ هذا الأمر لمعرفة ذلك:
env | grep -E -i 'x11|xorg|wayland'لا يشمل هذا الدليل إعداد خادم عرض X11 أو Wayland وتهيئته. إذا لم يُرجع الأمر أعلاه أي نتيجة، فستحتاج إلى البدء بتشغيل أحدهما على نظامك قبل المتابعة.
تشغيل حاوية Docker بواجهة رسومية#
استخدام وحدات GPU
إذا كنت تستخدم وحدات GPU، فيمكنك إضافة العلامة --device nvidia.com/gpu=all إلى الأمر.
إذا كنت تستخدم X11، فيمكنك تشغيل الأمر التالي للسماح لحاوية Docker بالوصول إلى مقبس X11:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latestيضبط هذا الأمر متغير البيئة DISPLAY على شاشة المضيف، ويضمّن مقبس X11، ويربط الملف .Xauthority بالحاوية. ويسمح الأمر xhost +local:docker لحاوية Docker بالوصول إلى خادم X11.
استخدام Docker بواجهة رسومية#
تتضمن صور Ultralytics إصدار OpenCV بلا واجهة رسومية، لذا ثبّت أولاً إصدار OpenCV ذي الواجهة الرسومية ومكتبات النظام الخاصة به داخل الحاوية:
apt-get update && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 libsm6
pip uninstall -y opencv-python-headless && pip install opencv-pythonيمكنك الآن عرض التطبيقات الرسومية داخل حاوية Docker. على سبيل المثال، يمكنك تشغيل أمر CLI التالي لعرض التنبؤات الصادرة عن نموذج YOLO26:
yolo predict model=yolo26n.pt show=Trueالاختبار
من الطرق البسيطة للتحقق من أن مجموعة Docker لديها إمكانية الوصول إلى خادم X11 تشغيل حاوية ببرنامج ذي واجهة رسومية مثل xclock أو xeyes. وبدلًا من ذلك، يمكنك تثبيت هذه البرامج في حاوية Ultralytics Docker لاختبار الوصول إلى خادم X11 الخاص بخادم العرض GNU-Linux لديك. إذا واجهت أي مشكلات، ففكّر في تعيين متغير البيئة -e QT_DEBUG_PLUGINS=1. يؤدي تعيين متغير البيئة هذا إلى تفعيل إخراج معلومات تصحيح الأخطاء، مما يساعد في استكشاف المشكلات وإصلاحها.
بعد الانتهاء من استخدام واجهة Docker الرسومية#
في كلتا الحالتين، لا تنسَ إلغاء إمكانية الوصول لمجموعة Docker عند الانتهاء.
xhost -local:dockerهل تريد عرض نتائج الصور مباشرةً في Terminal؟
راجع الدليل التالي حول عرض نتائج الصور باستخدام طرفية
أصبحت الآن جاهزًا لاستخدام Ultralytics مع Docker والاستفادة من إمكاناته. لاستضافة تطبيق الويب Ultralytics ذاتيًا، راجع دليل النشر المحلي. ولمعرفة طرق بديلة لتثبيت حزمة Python، راجع وثائق البدء السريع لـ Ultralytics.
الأسئلة الشائعة#
لإعداد Ultralytics باستخدام Docker، تأكد أولًا من تثبيت Docker على نظامك. إذا كانت لديك وحدة GPU من NVIDIA، فثبّت NVIDIA Container Toolkit لتمكين دعم GPU. ثم اسحب أحدث صورة Docker من Ultralytics من Docker Hub باستخدام الأمر التالي:
sudo docker pull ultralytics/ultralytics:latestللاطلاع على الخطوات التفصيلية، راجع دليل البدء السريع لـ Docker.
يضمن استخدام صور Ultralytics Docker اتساق البيئة عبر الأجهزة المختلفة، من خلال تكرار البرامج والتبعيات نفسها. ويفيد ذلك خصوصًا في التعاون بين الفرق، وتشغيل النماذج على أجهزة متنوعة، والحفاظ على إمكانية إعادة إنتاج النتائج. استخدم
latestللتدريب العام على وحدات GPU من NVIDIA، أو اختر الصورة المطابقة لإصدار JetPack الخاص بجهاز NVIDIA Jetson. راجع جدول الصور الكامل أو استكشف Docker Hub الخاص بـ Ultralytics.تأكد أولًا من تثبيت NVIDIA Container Toolkit وتهيئته. ثم استخدم الأمر التالي لتشغيل Ultralytics YOLO مع دعم GPU:
sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest # all GPUsيُعدّ هذا الأمر حاوية Docker مع إمكانية الوصول إلى GPU. لمزيد من التفاصيل، راجع دليل البدء السريع لـ Docker.
لعرض نتائج تنبؤ YOLO بواجهة رسومية في حاوية Docker، عليك السماح لـ Docker بالوصول إلى خادم العرض. بالنسبة إلى الأنظمة التي تعمل بـ X11، يكون الأمر كما يلي:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v ~/.Xauthority:/root/.Xauthority \ -it --ipc=host ultralytics/ultralytics:latestبالنسبة إلى الأنظمة التي تعمل بـ Wayland، استخدم:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \ -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \ --net=host -it --ipc=host ultralytics/ultralytics:latestثبّت إصدار OpenCV ذي الواجهة الرسومية داخل الحاوية قبل استخدام
show=True، كما هو موضح في قسم تشغيل تطبيقات واجهة المستخدم الرسومية (GUI) في حاوية Docker.نعم، يمكنك تركيب أدلة محلية داخل حاوية Ultralytics Docker باستخدام العلامة
-v:sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestاستبدل
/path/on/hostبالدليل الموجود على جهازك المحلي، و/path/in/containerبالمسار المطلوب داخل الحاوية. يتيح لك هذا الإعداد العمل على ملفاتك المحلية من داخل الحاوية. لمزيد من المعلومات، راجع قسم ملاحظة حول إمكانية الوصول إلى الملفات.