Руководство по быстрому запуску Docker для Ultralytics
Это руководство представляет собой исчерпывающее введение в настройку среды Docker для твоих проектов Ultralytics. Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Она особенно полезна тем, что гарантирует одинаковую работу программного обеспечения независимо от того, где оно развернуто. Для получения более подробной информации посети репозиторий Ultralytics Docker на Docker Hub.
Чему ты научишься
- Настройка Docker с поддержкой NVIDIA
- Установка Docker-образов Ultralytics
- Запуск Ultralytics в контейнере Docker с поддержкой CPU или GPU
- Использование дисплейного сервера с Docker для отображения результатов детектирования Ultralytics
- Монтирование локальных директорий в контейнер
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
Предварительные требования
- Убедись, что Docker установлен в твоей системе. Если нет, ты можешь скачать и установить его с сайта Docker.
- Убедись, что в твоей системе есть GPU NVIDIA и установлены драйверы 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 updateУстанови последнюю версию nvidia-container-toolkit:
sudo apt-get install -y nvidia-container-toolkit \
nvidia-container-toolkit-base libnvidia-container-tools \
libnvidia-container1Опционально: Установка конкретной версии nvidia-container-toolkit
Ты можешь установить конкретную версию nvidia-container-toolkit, задав переменную окружения NVIDIA_CONTAINER_TOOLKIT_VERSION:
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerПроверка среды выполнения NVIDIA с Docker
Выполни docker info | grep -i runtime, чтобы убедиться, что nvidia присутствует в списке сред выполнения:
docker info | grep -i runtimeУстановка Docker-образов Ultralytics
Ultralytics предлагает несколько Docker-образов, оптимизированных для различных платформ и вариантов использования:
- Dockerfile: GPU-образ, идеально подходит для обучения.
- Dockerfile-arm64: Для архитектуры ARM64, подходит для таких устройств, как Raspberry Pi.
- Dockerfile-cpu: Версия только с поддержкой CPU для инференса и сред без 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-nvidia-arm64: Для устройств NVIDIA ARM64, таких как Jetson AGX Thor и DGX Spark, поддерживающих JetPack 7.0 и DGX OS.
- Dockerfile-python: Минималистичная среда Python для легковесных приложений.
- Dockerfile-python-export: Минимальный образ Python, расширенный полным набором возможностей экспорта для конвертации моделей YOLO.
- Dockerfile-conda: Включает Miniconda3 и пакет Ultralytics, установленный через Conda.
- Dockerfile-export: GPU-образ с заранее установленными зависимостями всех форматов экспорта для конвертации моделей и бенчмаркинга.
Чтобы скачать последний образ:
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $tЗапуск Ultralytics в контейнере Docker
Вот как запустить контейнер Docker с Ultralytics:
Использование только CPU
# Run without GPU
sudo docker run -it --ipc=host $tИспользование GPU
# Run with all GPUs
sudo docker run -it --ipc=host --runtime=nvidia --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --runtime=nvidia --gpus '"device=2,3"' $tФлаг -it назначает псевдо-TTY и оставляет stdin открытым, позволяя взаимодействовать с контейнером. Флаг --ipc=host включает совместное использование пространства имен IPC хоста, что необходимо для обмена памятью между процессами. Флаг --gpus позволяет контейнеру получать доступ к GPU хоста.
Примечание о доступе к файлам
Для работы с файлами на твоем локальном компьютере внутри контейнера ты можешь использовать тома Docker:
# Mount a local directory into the container
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container $tЗамени /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
Следующие инструкции являются экспериментальными. Общий доступ к сокету X11 из контейнера Docker создает потенциальные угрозы безопасности. Поэтому рекомендуется тестировать это решение только в контролируемой среде. Для получения дополнительной информации обратись к этим ресурсам о том, как использовать xhost(1)(2).
Docker в первую очередь используется для контейнеризации фоновых приложений и программ CLI, но он также может запускать графические программы. В мире Linux двумя основными графическими серверами, отвечающими за отображение графики, являются X11 (также известный как X Window System) и Wayland. Прежде чем начать, важно определить, какой графический сервер ты используешь в данный момент. Запусти эту команду, чтобы узнать:
env | grep -E -i 'x11|xorg|wayland'Настройка и конфигурация дисплейного сервера X11 или Wayland выходят за рамки этого руководства. Если приведенная выше команда ничего не возвращает, тебе нужно сначала добиться работоспособности одного из них для твоей системы перед продолжением.
Запуск контейнера Docker с GUI
Использование GPU
Если ты используешь GPU, ты можешь добавить флаг --gpus all к команде.
Флаг среды выполнения Docker
Если твоя установка Docker не использует среду выполнения nvidia по умолчанию, ты можешь добавить флаг --runtime=nvidia к команде.
Если ты используешь 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.
Использование Docker с GUI
Теперь ты можешь отображать графические приложения внутри своего контейнера Docker. Например, ты можешь запустить следующую CLI команду для визуализации предсказаний модели YOLO26:
yolo predict model=yolo26n.pt show=TrueТестирование
Простой способ проверить, есть ли у группы Docker доступ к серверу X11 — запустить контейнер с графической программой, такой как xclock или xeyes. Кроме того, ты можешь установить эти программы в контейнер Docker с Ultralytics, чтобы проверить доступ к серверу X11 твоего дисплейного сервера GNU-Linux. Если возникнут проблемы, попробуй установить переменную окружения -e QT_DEBUG_PLUGINS=1. Установка этой переменной включает вывод отладочной информации, что поможет в процессе устранения неполадок.
После завершения работы с Docker GUI
В обоих случаях не забудь отозвать доступ у группы Docker, когда закончишь.
xhost -local:dockerХочешь просматривать результаты изображений прямо в терминале?
Ознакомься со следующим руководством по просмотру результатов изображений с помощью терминала
Теперь ты настроил Ultralytics для работы с Docker и готов использовать его возможности. Для получения информации о других способах установки см. документацию по началу работы с Ultralytics.
Часто задаваемые вопросы (FAQ)
Как настроить Ultralytics с Docker?
Чтобы настроить Ultralytics с Docker, сначала убедись, что Docker установлен в твоей системе. Если у тебя есть GPU NVIDIA, установи NVIDIA Container Toolkit для включения поддержки GPU. Затем скачай последний Docker-образ Ultralytics из Docker Hub, используя следующую команду:
sudo docker pull ultralytics/ultralytics:latestДля получения подробных шагов обратись к нашему Руководству по быстрому запуску Docker.
Каковы преимущества использования Docker-образов Ultralytics для проектов машинного обучения?
Использование Docker-образов Ultralytics обеспечивает согласованную среду на разных машинах, воспроизводя одинаковое программное обеспечение и зависимости. Это особенно полезно для совместной работы команд, запуска моделей на различном оборудовании и обеспечения воспроизводимости. Для обучения на GPU Ultralytics предоставляет оптимизированные Docker-образы, такие как Dockerfile для общего использования GPU и Dockerfile-jetson для устройств NVIDIA Jetson. Исследуй Ultralytics Docker Hub для получения более подробной информации.
Как запустить Ultralytics YOLO в контейнере Docker с поддержкой GPU?
Сначала убедись, что NVIDIA Container Toolkit установлен и настроен. Затем используй следующую команду для запуска Ultralytics YOLO с поддержкой GPU:
sudo docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics/ultralytics:latest # all GPUsЭта команда создает контейнер Docker с доступом к GPU. Для получения дополнительных сведений см. Руководство по быстрому запуску Docker.
Как визуализировать результаты предсказания YOLO в контейнере Docker с дисплейным сервером?
Чтобы визуализировать результаты предсказания YOLO с помощью GUI в контейнере 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.
Могу ли я монтировать локальные директории в контейнер Docker с Ultralytics?
Да, ты можешь монтировать локальные директории в контейнер Docker с Ultralytics, используя флаг -v:
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestЗамени /path/on/host на директорию на твоем локальном компьютере, а /path/in/container — на желаемый путь внутри контейнера. Эта настройка позволяет тебе работать с локальными файлами внутри контейнера. Для получения дополнительной информации обратись к разделу Примечание о доступе к файлам.