Saltar al contenido

Gu铆a de inicio r谩pido de Docker para Ultralytics

Ultralytics Paquete Docker Visual

Esta gu铆a es una introducci贸n completa a la configuraci贸n de un entorno Docker para tus proyectos en Ultralytics . Docker es una plataforma para desarrollar, enviar y ejecutar aplicaciones en contenedores. Es especialmente beneficioso para garantizar que el software se ejecute siempre igual, independientemente de d贸nde se despliegue. Para m谩s detalles, visita el repositorio Docker de Ultralytics en Docker Hub.

Versi贸n de la imagen Docker Tirones de Docker

Lo que aprender谩s

  • Configurar Docker con soporte NVIDIA
  • Instalaci贸n de im谩genes Docker Ultralytics
  • Ejecutar Ultralytics en un contenedor Docker con soporte para CPU o GPU
  • Utilizar un servidor de visualizaci贸n con Docker para mostrar los resultados de la detecci贸n Ultralytics
  • Montar directorios locales en el contenedor

Requisitos previos

  • Aseg煤rate de que Docker est谩 instalado en tu sistema. Si no es as铆, puedes descargarlo e instalarlo desde el sitio web de Docker.
  • Aseg煤rate de que tu sistema tiene una GPU NVIDIA y los controladores NVIDIA est谩n instalados.

Configurar Docker con soporte NVIDIA

Primero, comprueba que los controladores NVIDIA est谩n correctamente instalados ejecutando:

nvidia-smi

Instalar NVIDIA Docker Runtime

Ahora, vamos a instalar el tiempo de ejecuci贸n NVIDIA Docker para habilitar el soporte de GPU en los contenedores 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

Verificar NVIDIA Runtime con Docker

Ejecuta docker info | grep -i runtime para garantizar que nvidia aparece en la lista de tiempos de ejecuci贸n:

docker info | grep -i runtime

Instalar im谩genes Docker de Ultralytics

Ultralytics ofrece varias im谩genes Docker optimizadas para diversas plataformas y casos de uso:

  • Archivo Docker: Imagen de GPU, ideal para entrenamiento.
  • Dockerfile-arm64: Para arquitectura ARM64, adecuado para dispositivos como Raspberry Pi.
  • Dockerfile-cpu: versi贸n s贸lo para CPU para entornos de inferencia y sin GPU.
  • Dockerfile-jetson: Optimizado para dispositivos NVIDIA Jetson.
  • Dockerfile-python: Entorno m铆nimo Python para aplicaciones ligeras.
  • Dockerfile-conda: Incluye Miniconda3 y el paquete Ultralytics instalado a trav茅s de Conda.

Para sacar la 煤ltima imagen:

# Set image name as a variable
t=ultralytics/ultralytics:latest

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t

Ejecutar Ultralytics en un contenedor Docker

A continuaci贸n te explicamos c贸mo ejecutar el contenedor Docker Ultralytics :

Utilizando s贸lo la CPU

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

Uso de las 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

En -it asigna un pseudo-TTY y mantiene stdin abierto, permiti茅ndote interactuar con el contenedor. La opci贸n --ipc=host permite compartir el espacio de nombres IPC del host, esencial para compartir memoria entre procesos. La direcci贸n --gpus permite al contenedor acceder a las GPUs del host.

Ejecutar Ultralytics en un contenedor Docker

A continuaci贸n te explicamos c贸mo ejecutar el contenedor Docker Ultralytics :

Utilizando s贸lo la CPU

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

Uso de las 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

En -it asigna un pseudo-TTY y mantiene stdin abierto, permiti茅ndote interactuar con el contenedor. La opci贸n --ipc=host permite compartir el espacio de nombres IPC del host, esencial para compartir memoria entre procesos. La direcci贸n --gpus permite al contenedor acceder a las GPUs del host.

Nota sobre la accesibilidad de los archivos

Para trabajar con archivos de tu m谩quina local dentro del contenedor, puedes utilizar los vol煤menes Docker:

# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t

Sustituye /path/on/host con la ruta del directorio en tu m谩quina local y /path/in/container con la ruta deseada dentro del contenedor Docker.

Ejecuta aplicaciones de interfaz gr谩fica de usuario (GUI) en un contenedor Docker

Altamente experimental - El usuario asume todo el riesgo

Las siguientes instrucciones son experimentales. Compartir un socket X11 con un contenedor Docker plantea riesgos potenciales de seguridad. Por tanto, se recomienda probar esta soluci贸n s贸lo en un entorno controlado. Para m谩s informaci贸n, consulta estos recursos sobre c贸mo utilizar xhost(1)(2).

Docker se utiliza principalmente para contenerizar aplicaciones en segundo plano y programas de CLI , pero tambi茅n puede ejecutar programas gr谩ficos. En el mundo Linux, dos servidores gr谩ficos principales se encargan de la visualizaci贸n gr谩fica: X11 (tambi茅n conocido como Sistema de Ventanas X) y Wayland. Antes de empezar, es esencial determinar qu茅 servidor gr谩fico est谩s utilizando actualmente. Ejecuta este comando para averiguarlo:

env | grep -E -i 'x11|xorg|wayland'

La instalaci贸n y configuraci贸n de un servidor de visualizaci贸n X11 o Wayland queda fuera del alcance de esta gu铆a. Si el comando anterior no devuelve nada, tendr谩s que empezar por hacer funcionar cualquiera de los dos en tu sistema antes de continuar.

Ejecutar un contenedor Docker con una GUI

Ejemplo

Utiliza GPUs
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.

Si utilizas X11, puedes ejecutar el siguiente comando para permitir que el contenedor Docker acceda al socket X11:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t

Este comando establece el DISPLAY a la pantalla del anfitri贸n, monta el socket X11 y asigna la variable de entorno .Xauthority al contenedor. La direcci贸n xhost +local:docker permite al contenedor Docker acceder al servidor X11.

Para Wayland, utiliza el siguiente comando:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

Este comando establece el DISPLAY a la pantalla del host, monta el socket Wayland y permite que el contenedor Docker acceda al servidor Wayland.

Utilizar Docker con una GUI

Ahora puedes visualizar aplicaciones gr谩ficas dentro de tu contenedor Docker. Por ejemplo, puedes ejecutar el siguiente comandoCLI para visualizar las predicciones de un modeloYOLOv8 :

yolo predict model=yolov8n.pt show=True
Prueba

Una forma sencilla de validar que el grupo Docker tiene acceso al servidor X11 es ejecutar un contenedor con un programa GUI como xclock o xeyes. Alternativamente, tambi茅n puedes instalar estos programas en el contenedor Docker Ultralytics para probar el acceso al servidor X11 de tu servidor de visualizaci贸n GNU-Linux. Si tienes alg煤n problema, considera la posibilidad de establecer la variable de entorno -e QT_DEBUG_PLUGINS=1. Establecer esta variable de entorno permite la salida de informaci贸n de depuraci贸n, lo que ayuda en el proceso de soluci贸n de problemas.

Cuando termines con Docker GUI

Revocar el acceso

En ambos casos, no olvides revocar el acceso del grupo Docker cuando hayas terminado.

xhost -local:docker
驴Quieres ver los resultados de las im谩genes directamente en el Terminal?

Consulta la siguiente gu铆a para ver los resultados de la imagen utilizando un terminal


隆Enhorabuena! Ya est谩s configurado para utilizar Ultralytics con Docker y listo para aprovechar sus potentes capacidades. Para conocer m茅todos de instalaci贸n alternativos, no dudes en explorar la documentaci贸n de inicio r谩pido deUltralytics .



Creado 2023-11-12, Actualizado 2024-05-25
Autores: Burhan-Q (1), glenn-jocher (3), jpedrofonseca_94@hotmail.com (1)

Comentarios