Перейти к содержимому

Руководство по быстрому запуску Docker для Ultralytics

Ultralytics Визуальный пакет Docker

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

Версия образа докера Docker Pulls

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

  • Настройка Docker с поддержкой NVIDIA
  • Установка Ultralytics Docker-образов
  • Запуск Ultralytics в контейнере Docker с поддержкой CPU или GPU
  • Использование сервера отображения с Docker для показа результатов обнаружения Ultralytics
  • Монтирование локальных директорий в контейнер

Пререквизиты

  • Убедись, что Docker установлен в твоей системе. Если нет, то ты можешь скачать и установить его с сайта Docker.
  • Убедись, что в твоей системе установлены драйверы NVIDIA GPU и 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 появляется в списке режимов выполнения:

docker info | grep -i runtime

Установка Ultralytics Docker Images

Ultralytics предлагает несколько Docker-образов, оптимизированных под разные платформы и случаи использования:

  • Dockerfile: GPU образ, идеально подходящий для обучения.
  • Dockerfile-arm64: Для архитектуры ARM64, подходит для устройств вроде Raspberry Pi.
  • Dockerfile-cpu: CPU-единственная версия для инференции и неGPU окружений.
  • Dockerfile-jetson: Оптимизирован для устройств NVIDIA Jetson.
  • 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

Вот как выполнить Docker-контейнер Ultralytics:

Используя только CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Использование графических процессоров

# 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

The -it Флаг назначает псевдо-TTY и держит stdin открытым, позволяя тебе взаимодействовать с контейнером. Флаг --ipc=host Флаг позволяет совместно использовать IPC-пространство имен хоста, что необходимо для разделения памяти между процессами. Флаг --gpus Флаг позволяет контейнеру получить доступ к графическим процессорам хоста.

Запуск Ultralytics в контейнере Docker

Вот как выполнить Docker-контейнер Ultralytics:

Используя только CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Использование графических процессоров

# 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

The -it Флаг назначает псевдо-TTY и держит stdin открытым, позволяя тебе взаимодействовать с контейнером. Флаг --ipc=host Флаг позволяет совместно использовать IPC-пространство имен хоста, что необходимо для разделения памяти между процессами. Флаг --gpus Флаг позволяет контейнеру получить доступ к графическим процессорам хоста.

Заметка о доступности файлов

Чтобы работать с файлами на твоей локальной машине внутри контейнера, ты можешь использовать тома 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 с помощью графического интерфейса

Пример

Используй графические процессоры
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 , чтобы визуализировать предсказания, полученные с помощью моделиYOLOv8 :

yolo predict model=yolov8n.pt show=True
Тестирование

Простой способ проверить, что группа Docker имеет доступ к серверу X11, - запустить контейнер с помощью программы с графическим интерфейсом, например xclock или xeyes. Как вариант, ты также можешь установить эти программы в контейнер Ultralytics Docker, чтобы проверить доступ к X11-серверу твоего дисплейного сервера GNU-Linux. Если у тебя возникнут проблемы, подумай о том, чтобы установить переменную окружения -e QT_DEBUG_PLUGINS=1. Установка этой переменной окружения позволяет выводить отладочную информацию, что помогает в процессе устранения неполадок.

После завершения работы с графическим интерфейсом Docker

Отмените доступ

В обоих случаях не забудь отозвать доступ из группы 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 установлена и настроена. Затем используй следующую команду, чтобы запустить Ultralytics YOLO с поддержкой GPU :

sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest

Эта команда устанавливает контейнер Docker с доступом по адресу GPU . Дополнительные подробности смотри в руководстве Docker Quickstart Guide.

Как визуализировать результаты предсказаний 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-контейнере ".

Можно ли монтировать локальные директории в Docker-контейнер Ultralytics ?

Да, ты можешь монтировать локальные директории в докеровский контейнер Ultralytics , используя -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 с указанием нужного пути внутри контейнера. Такая настройка позволяет тебе работать с локальными файлами внутри контейнера. За дополнительной информацией обращайся к соответствующему разделу Монтирование локальных каталогов.



Создано 2023-11-12, Обновлено 2024-07-05
Авторы: glenn-jocher (7), Burhan-Q (1), jpedrofonseca_94@hotmail.com (1)

Комментарии