دليل التشغيل السريع لـ Docker الخاص بـ Ultralytics#
يقدم هذا الدليل مقدمة شاملة لإعداد بيئة Docker لمشاريع Ultralytics الخاصة بك. Docker هي منصة لتطوير التطبيقات وشحنها وتشغيلها داخل الحاويات. وهي مفيدة بشكل خاص لضمان تشغيل البرامج بنفس الطريقة دائمًا، بغض النظر عن مكان نشرها. لمزيد من التفاصيل، تفضل بزيارة مستودع Docker الخاص بـ Ultralytics على 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 وتثبيت برامج تشغيل 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 لوحدة معالجة الرسومات (تقوم خدمة 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.
| الوسم (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 | صورة وحدة المعالجة المركزية (CPU) لنظام Linux ARM64 لأجهزة 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 تتبع أحدث إصدار تم نشره للفرع الرئيسي. تحل العلامات التي تحمل إصدارات محل بادئة 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باستخدام 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=... الحاوية إمكانية الوصول إلى وحدات معالجة الرسومات (GPUs) الخاصة بالمضيف من خلال CDI.
على نظام Linux، تتطلب طلبات أجهزة CDI إصدار Docker >= 28.2.0 (حيث يتم تمكين CDI افتراضيًا) وإصدار nvidia-container-toolkit >= 1.18 (الإنشاء التلقائي لمواصفات CDI). قم بترقية مضيفات Linux الأقدم قبل تشغيل حاويات وحدة معالجة الرسومات (GPU). قد تفقد علامة --gpus all القديمة إمكانية الوصول إلى وحدة معالجة الرسومات (Failed to initialize NVML: Unknown Error) عندما يقوم المضيف بإعادة تحميل systemd أثناء تحديثات الحزم الروتينية (nvidia-container-toolkit#48). تتضمن طلبات CDI --device عقد الأجهزة في تكوين الحاوية، لذا فإن الحاويات طويلة الأجل مثل عمال التدريب أو مسؤولي تشغيل CI يحتفظون بالوصول إلى وحدة معالجة الرسومات عبر عمليات إعادة التحميل.
يستخدم دعم وحدة معالجة الرسومات (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 في تشغيل حاوية ببرنامج واجهة مستسومية (GUI) مثل 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، تأكد أولاً من تثبيت Docker على نظامك. إذا كان لديك وحدة معالجة رسومات NVIDIA، فقم بتثبيت NVIDIA Container Toolkit لتمكين دعم وحدة معالجة الرسومات. بعد ذلك، قم بسحب أحدث صورة لـ Ultralytics Docker من Docker Hub باستخدام الأمر التالي:
sudo docker pull ultralytics/ultralytics:latestللحصول على خطوات مفصلة، راجع دليل التشغيل السريع لـ Docker.
يضمن استخدام صور Ultralytics Docker بيئة متسقة عبر الأجهزة المختلفة، مما يكرر نفس البرامج والتبعيات. هذا مفيد بشكل خاص لـ التعاون عبر الفرق، وتشغيل النماذج على أجهزة مختلفة، والحفاظ على إمكانية إعادة الإنتاج. استخدم
latestلتدريب وحدة معالجة رسومات NVIDIA العامة أو حدد الصورة المطابقة لإصدار JetPack لجهاز NVIDIA Jetson. راجع جدول الصور الكامل أو استكشف Ultralytics Docker Hub.أولاً، تأكد من تثبيت وتكوين 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يمكن العثور على مزيد من المعلومات في قسم تشغيل تطبيقات واجهة المستخدم الرسومية (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بالمسار المطلوب داخل الحاوية. يتيح لك هذا الإعداد العمل مع ملفاتك المحلية داخل الحاوية. لمزيد من المعلومات، راجع قسم ملاحظة حول إمكانية الوصول إلى الملفات.