دليل التشغيل السريع لـ Docker الخاص بـ Ultralytics#
يُعد هذا الدليل مقدمة شاملة لإعداد بيئة Docker لمشاريعك في Ultralytics. Docker عبارة عن منصة لتطوير التطبيقات وشحنها وتشغيلها في حاويات. إنها مفيدة بشكل خاص لضمان تشغيل البرنامج دائماً بنفس الطريقة، بغض النظر عن مكان نشره. لمزيد من التفاصيل، تفضل بزيارة مستودع Ultralytics Docker على Docker Hub.
ما ستتعلمه#
- إعداد Docker مع دعم NVIDIA
- تثبيت صور Ultralytics Docker
- تشغيل Ultralytics داخل حاوية Docker مع دعم CPU أو GPU
- استخدام خادم عرض (display server) مع Docker لعرض نتائج اكتشاف Ultralytics
- تركيب (Mounting) المجلدات المحلية داخل الحاوية
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
المتطلبات الأساسية#
- تأكد من تثبيت Docker على نظامك. إذا لم يكن مثبتاً، يمكنك تنزيله وتثبيته من موقع Docker.
- لتسريع استخدام وحدة معالجة الرسوميات (GPU)، تأكد من أن نظامك يحتوي على NVIDIA GPU وNVIDIA drivers مثبتة. صور وحدة المعالجة المركزية (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 للتأكد من توفر أجهزة GPU CDI (تقوم خدمة 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 publishing workflow.
| الوسم (Tag) | المنصة والغرض | المصدر |
|---|---|---|
latest | Linux AMD64 مع CUDA للتدريب والاستدلال باستخدام GPU | Dockerfile |
latest-export | Linux AMD64 مع CUDA وتبعيات التصدير للتحويل واختبار الأداء | Dockerfile-export |
latest-python | صورة Linux AMD64 خفيفة لـ Python من أجل الاستدلال عبر CPU | Dockerfile-python |
latest-python-export | صورة Linux AMD64 CPU مع تبعيات التصدير | Dockerfile-python-export |
latest-cpu | صورة Linux AMD64 CPU مع استخدام Bash كأمر افتراضي | Dockerfile-cpu |
latest-jupyter | صورة Linux AMD64 CPU مع JupyterLab ودفاتر تعليمات Ultralytics | Dockerfile-jupyter |
latest-arm64 | صورة Linux ARM64 CPU لمعالجات Apple silicon، وRaspberry Pi، وأنظمة ARM64 الأخرى | Dockerfile-arm64 |
latest-nvidia-arm64 | Linux ARM64 مع دعم NVIDIA GPU لـ Jetson AGX Thor، وDGX Spark، وJetPack 7، وDGX OS | 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 | صورة Linux AMD64 CUDA لمشغل (runner) GPU ذاتي الاستضافة على GitHub Actions | Dockerfile-runner |
latest-runner-cpu | صورة Linux AMD64 لمشغل (runner) CPU ذاتي الاستضافة على GitHub Actions | Dockerfile-runner-cpu |
تتعقب الوسوم التي تبدأ بـ latest أحدث إصدار منشور في الفرع الرئيسي (main branch). تستبدل الوسوم ذات الإصدارات البادئة latest بإصدار من Ultralytics، مثل VERSION أو VERSION-cpu أو VERSION-jetson-jetpack6. استخدم وسم إصدار محدد للحصول على بيئة قابلة للتكرار.
لسحب أحدث صورة:
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latestتشغيل Ultralytics في حاوية Docker#
إليك كيفية تنفيذ حاوية Ultralytics Docker:
باستخدام CPU فقط#
# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpuباستخدام GPUs#
# 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 وإبقاء stdin مفتوحاً، مما يسمح لك بالتفاعل مع الحاوية. يتيح العلم --ipc=host مشاركة مساحة اسم IPC الخاصة بالمضيف، وهو أمر ضروري لمشاركة الذاكرة بين العمليات. يمنح العلم --device nvidia.com/gpu=... الحاوية إمكانية الوصول إلى وحدات GPU الخاصة بالمضيف من خلال CDI.
على 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). تتضمن طلبات --device الخاصة بـ CDI عقد الجهاز في إعدادات الحاوية، لذا فإن الحاويات طويلة الأمد مثل عمال التدريب (training workers) أو مشغلات CI تحافظ على الوصول إلى GPU عبر عمليات إعادة التحميل.
دعم GPU في Docker Desktop على Windows يستخدم حالياً --gpus all مع بيئة WSL 2 لأن أجهزة NVIDIA CDI غير متوفرة هناك. لا يستخدم Windows نظام systemd الخاص بـ Linux، لذا فإن فشل إعادة تحميل البرنامج الخفي (daemon-reload) المذكور أعلاه لا ينطبق هنا.
ملاحظة حول الوصول إلى الملفات#
للعمل مع الملفات الموجودة على جهازك المحلي داخل الحاوية، يمكنك استخدام وحدات تخزين Docker (volumes):
# 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 Window) و Wayland. قبل البدء، من الضروري تحديد خادم الرسومات الذي تستخدمه حالياً. قم بتشغيل هذا الأمر لمعرفة ذلك:
env | grep -E -i 'x11|xorg|wayland'إعداد وتكوين خادم عرض X11 أو Wayland يقع خارج نطاق هذا الدليل. إذا لم يُرجع الأمر أعلاه أي شيء، فستحتاج إلى البدء بجعل أحدهما يعمل لنظامك قبل المتابعة.
تشغيل حاوية Docker مع واجهة رسومية (GUI)#
استخدم GPUs
إذا كنت تستخدم GPUs، يمكنك إضافة العلم --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 مع واجهة رسومية#
الآن يمكنك عرض التطبيقات الرسومية داخل حاوية 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 GUI#
في كلتا الحالتين، لا تنسَ إلغاء الوصول من مجموعة Docker عند الانتهاء.
xhost -local:dockerهل تريد عرض نتائج الصور مباشرة في Terminal؟
راجع الدليل التالي حول عرض نتائج الصور باستخدام terminal
أنت الآن جاهز لاستخدام Ultralytics مع Docker ومستعد للاستفادة من قدراته. لاستضافة تطبيق Ultralytics على الويب ذاتياً، راجع دليل المنصة المحلية (Platform On-Premise). للحصول على طرق بديلة لتثبيت حزمة Python، راجع وثائق البدء السريع لـ Ultralytics.
الأسئلة الشائعة#
كيف أقوم بإعداد Ultralytics مع Docker؟#
لإعداد Ultralytics مع Docker، تأكد أولاً من تثبيت Docker على نظامك. إذا كان لديك GPU من نوع NVIDIA، فقم بتثبيت NVIDIA Container Toolkit لتمكين دعم GPU. ثم، اسحب أحدث صورة Docker لـ Ultralytics من Docker Hub باستخدام الأمر التالي:
sudo docker pull ultralytics/ultralytics:latestللحصول على خطوات مفصلة، راجع دليل التشغيل السريع لـ Docker.
ما هي فوائد استخدام صور Ultralytics Docker لمشاريع تعلم الآلة؟#
يضمن استخدام صور Docker الخاصة بـ Ultralytics بيئة متسقة عبر الأجهزة المختلفة، مما يكرر نفس البرامج والتبعيات. هذا مفيد بشكل خاص لـ التعاون عبر الفرق، وتشغيل النماذج على أجهزة متنوعة، والحفاظ على قابلية التكرار. استخدم latest للتدريب العام باستخدام NVIDIA GPU أو اختر الصورة المطابقة لإصدار JetPack الخاص بك لجهاز NVIDIA Jetson. راجع جدول الصور الكامل أو استكشف Docker Hub لـ Ultralytics.
كيف يمكنني تشغيل Ultralytics YOLO في حاوية Docker مع دعم GPU؟#
أولاً، تأكد من تثبيت وتكوين 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 باستخدام خادم عرض؟#
لتصور نتائج تنبؤ 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يمكن العثور على مزيد من المعلومات في قسم تشغيل تطبيقات واجهة المستخدم الرسومية (GUI) في حاوية Docker.
هل يمكنني تركيب المجلدات المحلية داخل حاوية Ultralytics 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 بالمسار المطلوب داخل الحاوية. يسمح لك هذا الإعداد بالعمل مع ملفاتك المحلية داخل الحاوية. لمزيد من المعلومات، راجع قسم ملاحظة حول الوصول إلى الملفات.