Краткое руководство по Docker для Ultralytics
Это руководство представляет собой подробное введение в настройку среды Docker для ваших проектов Ultralytics. Docker — это платформа для разработки, поставки и запуска приложений в контейнерах. Она особенно полезна для обеспечения стабильной работы программного обеспечения независимо от места его развертывания. Более подробную информацию можно найти в репозитории Ultralytics Docker на Docker Hub.
Что вы узнаете
- Настройка Docker с поддержкой NVIDIA
- Установка Docker-образов Ultralytics
- Запуск Ultralytics в Docker-контейнере с поддержкой CPU или GPU
- Использование сервера отображения с Docker для показа результатов обнаружения Ultralytics
- Монтирование локальных каталогов в контейнер
Смотреть: Как начать работу с Docker | Использование пакета Ultralytics python внутри Docker в режиме реального времени 🎉
Предварительные требования
- Убедитесь, что Docker установлен в вашей системе. Если нет, вы можете скачать и установить его с веб-сайта Docker.
- Убедитесь, что в вашей системе установлены GPU NVIDIA и драйверы NVIDIA.
Настройка Docker с поддержкой NVIDIA
Сначала убедитесь, что драйверы NVIDIA установлены правильно, выполнив следующую команду:
nvidia-smi
Установка NVIDIA Docker Runtime
Теперь давайте установим NVIDIA Docker runtime, чтобы включить поддержку GPU в Docker-контейнерах:
# Add NVIDIA package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(lsb_release -cs)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# Install NVIDIA Docker runtime
sudo apt-get update
sudo apt-get install -y nvidia-docker2
# Restart Docker service to apply changes
sudo systemctl restart docker
Проверка NVIDIA Runtime с помощью Docker
Запустите docker info | grep -i runtime
чтобы убедиться, что nvidia
отображается в списке runtimes:
docker info | grep -i runtime
Установка образов Ultralytics Docker
Ultralytics предлагает несколько Docker-образов, оптимизированных для различных платформ и вариантов использования:
- Dockerfile: GPU-образ, идеально подходит для обучения.
- Dockerfile-arm64: Для архитектуры ARM64, подходит для таких устройств, как Raspberry Pi.
- Dockerfile-cpu: CPU-only версия для inference и сред без GPU.
- Dockerfile-jetson-jetpack4: Оптимизирован для устройств NVIDIA Jetson под управлением NVIDIA JetPack 4.
- Dockerfile-jetson-jetpack5: Оптимизирован для устройств NVIDIA Jetson под управлением NVIDIA JetPack 5.
- Dockerfile-jetson-jetpack6: Оптимизирован для устройств NVIDIA Jetson под управлением NVIDIA JetPack 6.
- Dockerfile-jupyter: Для интерактивной разработки с использованием JupyterLab в браузере.
- Dockerfile-python: Минимальная среда python для легких приложений.
- Dockerfile-conda: Включает Miniconda3 и пакет Ultralytics, установленный через Conda.
Чтобы получить последний образ:
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t
Запуск Ultralytics в Docker-контейнере
Вот как выполнить Ultralytics Docker-контейнер:
Использование только CPU
# Run without GPU
sudo docker run -it --ipc=host $t
Использование GPU
# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t
Параметр -it
флаг назначает псевдо-TTY и оставляет stdin открытым, позволяя вам взаимодействовать с контейнером. --ipc=host
флаг включает совместное использование IPC namespace хоста, что необходимо для совместного использования памяти между процессами. --gpus
флаг позволяет контейнеру получать доступ к GPU хоста.
Примечание о доступности файлов
Чтобы работать с файлами на локальной машине внутри контейнера, можно использовать тома Docker:
# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t
Замените /path/on/host
на путь к каталогу на вашей локальной машине, а /path/in/container
на желаемый путь внутри Docker-контейнера.
Запуск приложений с графическим интерфейсом (GUI) в Docker-контейнере
В высшей степени экспериментально — пользователь принимает на себя все риски
Следующие инструкции являются экспериментальными. Предоставление общего доступа к сокету X11 с Docker-контейнером создает потенциальные риски безопасности. Поэтому рекомендуется тестировать это решение только в контролируемой среде. Для получения дополнительной информации обратитесь к этим ресурсам о том, как использовать xhost
(1)(2).
Docker в основном используется для контейнеризации фоновых приложений и программ CLI, но он также может запускать графические программы. В мире Linux два основных графических сервера обрабатывают графическое отображение: X11 (также известная как X Window System) и Wayland. Перед началом важно определить, какой графический сервер вы используете в данный момент. Выполните эту команду, чтобы узнать:
env | grep -E -i 'x11|xorg|wayland'
Настройка и конфигурация сервера отображения X11 или Wayland выходит за рамки данного руководства. Если приведенная выше команда ничего не возвращает, вам нужно начать с того, чтобы заставить работать либо то, либо другое для вашей системы, прежде чем продолжить.
Запуск Docker-контейнера с графическим интерфейсом
Пример
Использовать GPU
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.
Если вы используете 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 $t
Эта команда устанавливает DISPLAY
переменную среды в дисплей хоста, монтирует сокет X11 и сопоставляет .Xauthority
файл с контейнером. Команда xhost +local:docker
позволяет Docker-контейнеру получить доступ к серверу X11.
Для Wayland используйте следующую команду:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t
Эта команда устанавливает DISPLAY
переменную среды в дисплей хоста, монтирует сокет Wayland и позволяет Docker-контейнеру получить доступ к серверу Wayland.
Использование Docker с графическим интерфейсом
Теперь вы можете отображать графические приложения внутри вашего Docker-контейнера. Например, вы можете выполнить следующую команду CLI, чтобы визуализировать прогнозы из модели YOLO11:
yolo predict model=yolo11n.pt show=True
Тестирование
Простой способ проверить, имеет ли группа Docker доступ к серверу X11, — это запустить контейнер с программой GUI, такой как xclock
или xeyes
. В качестве альтернативы, вы также можете установить эти программы в Docker-контейнер Ultralytics, чтобы проверить доступ к серверу X11 вашего сервера отображения GNU-Linux. Если у вас возникнут какие-либо проблемы, рассмотрите возможность установки переменной среды -e QT_DEBUG_PLUGINS=1
. Установка этой переменной среды включает вывод отладочной информации, помогая в процессе устранения неполадок.
После завершения работы с Docker GUI
Отозвать доступ
В обоих случаях не забудьте отозвать доступ у группы Docker, когда закончите.
xhost -local:docker
Хотите просматривать результаты обработки изображений прямо в терминале?
Обратитесь к следующему руководству по просмотру результатов обработки изображений с помощью терминала.
Поздравляем! Теперь у вас все настроено для использования Ultralytics с Docker и вы готовы воспользоваться всеми его мощными возможностями. Для альтернативных методов установки ознакомьтесь с документацией по быстрому старту Ultralytics.
Часто задаваемые вопросы
Как настроить Ultralytics с помощью Docker?
Чтобы настроить Ultralytics с помощью Docker, сначала убедитесь, что Docker установлен в вашей системе. Если у вас есть NVIDIA GPU, установите NVIDIA Docker runtime, чтобы включить поддержку GPU. Затем извлеките последний образ Ultralytics Docker из Docker Hub, используя следующую команду:
sudo docker pull ultralytics/ultralytics:latest
Подробные инструкции можно найти в нашем руководстве по быстрому старту Docker.
Каковы преимущества использования образов Ultralytics Docker для проектов машинного обучения?
Использование Docker-образов Ultralytics обеспечивает согласованную среду на разных машинах, воспроизводя одно и то же программное обеспечение и зависимости. Это особенно полезно для совместная работа в командах, запуск моделей на различном оборудовании и поддержание воспроизводимости. Для обучения с использованием GPU, Ultralytics предоставляет оптимизированные Docker-образы, такие как Dockerfile
для общего использования GPU и Dockerfile-jetson
для устройств NVIDIA Jetson. Изучите Ultralytics Docker Hub для получения более подробной информации.
Как я могу запустить Ultralytics YOLO в Docker-контейнере с поддержкой GPU?
Сначала убедитесь, что NVIDIA Docker runtime установлен и настроен. Затем используйте следующую команду для запуска Ultralytics YOLO с поддержкой GPU:
sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest
Эта команда настраивает 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 --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest
Замените /path/on/host
с каталогом на вашей локальной машине и /path/in/container
с желаемым путем внутри контейнера. Эта настройка позволяет вам работать с локальными файлами внутри контейнера. Для получения дополнительной информации обратитесь к Примечание о доступности файлов раздел.