Краткое руководство по Docker для Ultralytics#
Это руководство представляет собой подробное введение в настройку среды Docker для твоих проектов Ultralytics. Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Она особенно полезна для обеспечения одинаковой работы программного обеспечения независимо от места его развертывания. Подробнее см. в репозитории Ultralytics Docker на Docker Hub.
Чему ты научишься#
- Настройка Docker с поддержкой NVIDIA
- Установка образов Ultralytics Docker
- Запуск 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 убедись, что в твоей системе установлен 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, чтобы убедиться в доступности устройств GPU CDI (служба nvidia-cdi-refresh из набора инструментов автоматически создает спецификацию и поддерживает ее в актуальном состоянии в toolkit >= 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-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 для DGX Spark (DGX OS) и PyTorch на Thor (JetPack 7.1); встроенный TensorRT не поддерживает JetPack | 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 для собственного GPU-раннера GitHub Actions | Dockerfile-runner |
latest-runner-cpu | Образ Linux AMD64 для собственного CPU-раннера GitHub Actions | Dockerfile-runner-cpu |
Образы GPU AMD64 (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. Для экспорта Jetson TensorRT используй поддерживаемую среду выполнения 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.
Теги, начинающиеся с 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 выделяет псевдотерминал и оставляет 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). Запросы CDI --device включают узлы устройств в конфигурацию контейнера, поэтому долгоживущие контейнеры, например рабочие процессы обучения или CI-раннеры, сохраняют доступ к GPU после перезагрузки.
Поддержка GPU в Docker Desktop на Windows в настоящее время использует --gpus all с бэкендом WSL 2, поскольку устройства NVIDIA CDI там недоступны. Windows не использует Linux systemd, поэтому описанная выше ошибка daemon-reload к нему не относится.
Примечание о доступности файлов#
Чтобы работать с файлами на локальном компьютере внутри контейнера, ты можешь использовать тома 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 с GUI#
Использование 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 с GUI#
Теперь ты можешь отображать графические приложения внутри контейнера 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. Она включает вывод отладочной информации, что помогает устранить неполадки.
После завершения работы с GUI Docker#
В обоих случаях не забудь отозвать доступ группы Docker после завершения работы.
xhost -local:dockerХочешь просматривать результаты изображений прямо в терминале?
См. следующее руководство по просмотру результатов изображений с помощью терминала
Теперь ты настроил Ultralytics для работы с Docker и готов воспользоваться всеми его возможностями. Чтобы развернуть веб-приложение Ultralytics самостоятельно, см. руководство по локальному развертыванию платформы. Альтернативные способы установки пакета Python описаны в документации по быстрому началу работы с Ultralytics.
Часто задаваемые вопросы#
Чтобы настроить Ultralytics с Docker, сначала убедись, что Docker установлен в твоей системе. Если у тебя есть GPU NVIDIA, установи NVIDIA Container Toolkit, чтобы включить поддержку GPU. Затем загрузи последний образ Ultralytics Docker из Docker Hub с помощью следующей команды:
sudo docker pull ultralytics/ultralytics:latestПодробные инструкции см. в нашем кратком руководстве по Docker.
Использование образов Ultralytics Docker обеспечивает согласованную среду на разных компьютерах, воспроизводя одинаковые программное обеспечение и зависимости. Это особенно полезно для совместной работы команд, запуска моделей на различном оборудовании и обеспечения воспроизводимости. Используй
latestдля обычного обучения на GPU 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 с 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.
Да, ты можешь монтировать локальные каталоги в контейнер 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— нужным путем внутри контейнера. Такая настройка позволяет работать с локальными файлами внутри контейнера. Подробнее см. в разделе Примечание о доступности файлов.