Ultralytics YOLO27:

Краткое руководство по Docker для Ultralytics#

Ultralytics Docker Package Visual

Это руководство представляет собой подробное введение в настройку среды Docker для твоих проектов Ultralytics. Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Она особенно полезна для обеспечения одинаковой работы программного обеспечения независимо от места его развертывания. Подробнее см. в репозитории Ultralytics Docker на Docker Hub.

Версия образа Docker Загрузки Docker

Чему ты научишься#

  • Настройка 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 update
sudo 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.

ТегПлатформа и назначениеИсточник
latestLinux AMD64 с CUDA для обучения и инференса на GPUDockerfile
latest-exportLinux AMD64 с CUDA и зависимостями для экспорта для конвертации и бенчмаркингаDockerfile-export
latest-pythonОблегченный образ Linux AMD64 с Python для инференса на CPUDockerfile-python
latest-python-exportОбраз Linux AMD64 для CPU с зависимостями для экспортаDockerfile-python-export
latest-cpuОбраз Linux AMD64 для CPU с Bash в качестве команды по умолчаниюDockerfile-cpu
latest-jupyterОбраз Linux AMD64 для CPU с JupyterLab и учебными ноутбуками UltralyticsDockerfile-jupyter
latest-arm64Образ Linux ARM64 для CPU для Apple silicon, Raspberry Pi и других систем ARM64Dockerfile-arm64
latest-nvidia-arm64Linux ARM64 для DGX Spark (DGX OS) и PyTorch на Thor (JetPack 7.1); встроенный TensorRT не поддерживает JetPackDockerfile-nvidia-arm64
latest-jetson-jetpack6Linux ARM64 для устройств NVIDIA Jetson под управлением JetPack 6Dockerfile-jetson-jetpack6
latest-jetson-jetpack5Linux ARM64 для устройств NVIDIA Jetson под управлением JetPack 5Dockerfile-jetson-jetpack5
latest-jetson-jetpack4Linux ARM64 для устройств NVIDIA Jetson под управлением JetPack 4Dockerfile-jetson-jetpack4
latest-runnerОбраз Linux AMD64 с CUDA для собственного GPU-раннера GitHub ActionsDockerfile-runner
latest-runner-cpuОбраз Linux AMD64 для собственного CPU-раннера GitHub ActionsDockerfile-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.

Используй CDI вместо `--gpus all`

В 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#

Крайне экспериментально — пользователь принимает на себя все риски

Следующие инструкции являются экспериментальными. Предоставление X11-сокета контейнеру Docker может создавать угрозы безопасности. Поэтому рекомендуется тестировать это решение только в контролируемой среде. Подробнее см. в следующих ресурсах об использовании xhost(1)(2).

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 — нужным путем внутри контейнера. Такая настройка позволяет работать с локальными файлами внутри контейнера. Подробнее см. в разделе Примечание о доступности файлов.

Комментарии