Ir al contenido

Guía de inicio rápido de Docker para Ultralytics

Visual del paquete Ultralytics Docker

Esta guía sirve como una introducción completa a la configuración de un entorno Docker para tus proyectos de Ultralytics. Docker es una plataforma para desarrollar, enviar y ejecutar aplicaciones en contenedores. Es particularmente beneficioso para asegurar que el software siempre se ejecute de la misma manera, independientemente de dónde se implemente. Para obtener más detalles, visita el repositorio de Docker de Ultralytics en Docker Hub.

Versión de la imagen de Docker Pulls de Docker

Qué aprenderás

  • Configuración de Docker con soporte de NVIDIA
  • Instalación de imágenes Docker de Ultralytics
  • Ejecución de Ultralytics en un contenedor Docker con soporte de CPU o GPU
  • Uso de un servidor de visualización con Docker para mostrar los resultados de detección de Ultralytics
  • Montaje de directorios locales en el contenedor



Ver: Cómo empezar con Docker | Uso del paquete de python Ultralytics dentro de una demostración en vivo de Docker 🎉


Prerrequisitos

  • 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 tenga una GPU NVIDIA y que los controladores de NVIDIA estén instalados.

Configuración de Docker con soporte de NVIDIA

Primero, verifica que los controladores de NVIDIA estén instalados correctamente ejecutando:

nvidia-smi

Instalación del runtime de NVIDIA Docker

Ahora, instalemos el runtime de 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

Verificación del runtime de NVIDIA con Docker

Ejecuta docker info | grep -i runtime para asegurar que nvidia aparezca en la lista de runtimes:

docker info | grep -i runtime

Instalación de imágenes de Ultralytics Docker

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

  • Dockerfile: Imagen de GPU, ideal para el entrenamiento.
  • Dockerfile-arm64: Para la arquitectura ARM64, adecuada para dispositivos como Raspberry Pi.
  • Dockerfile-cpu: Versión solo para CPU para inferencia y entornos sin GPU.
  • Dockerfile-jetson-jetpack4: Optimizado para dispositivos NVIDIA Jetson que ejecutan NVIDIA JetPack 4.
  • Dockerfile-jetson-jetpack5: Optimizado para dispositivos NVIDIA Jetson que ejecutan NVIDIA JetPack 5.
  • Dockerfile-jetson-jetpack6: Optimizado para dispositivos NVIDIA Jetson que ejecutan NVIDIA JetPack 6.
  • Dockerfile-jupyter: Para el desarrollo interactivo utilizando JupyterLab en el navegador.
  • Dockerfile-python: Entorno mínimo de python para aplicaciones ligeras.
  • Dockerfile-conda: Incluye Miniconda3 y el paquete Ultralytics instalado a través de Conda.

Para extraer 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

Ejecución de Ultralytics en un contenedor Docker

A continuación, se muestra cómo ejecutar el contenedor Docker de Ultralytics:

Usando solo la CPU

# Run without GPU
sudo docker run -it --ipc=host $t

Usando GPUs

# 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

El -it indica que se asigne una pseudo-TTY y se mantenga stdin abierto, lo que permite interactuar con el contenedor. La --ipc=host permite compartir el espacio de nombres IPC del host, lo cual es esencial para compartir memoria entre procesos. La --gpus permite que el contenedor acceda a las GPU del host.

Nota sobre la accesibilidad de los archivos

Para trabajar con archivos en tu máquina local dentro del contenedor, puedes usar volúmenes de Docker:

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

Reemplaza /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.

Ejecutar aplicaciones de interfaz gráfica de usuario (GUI) en un contenedor Docker

Altamente experimental: el usuario asume todos los riesgos

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

Docker se utiliza principalmente para contenerizar aplicaciones en segundo plano y programas de la CLI, pero también puede ejecutar programas gráficos. En el mundo de Linux, dos servidores gráficos principales gestionan la visualización gráfica: X11 (también conocido como X Window System) y Wayland. Antes de comenzar, es esencial determinar qué servidor de gráficos estás utilizando actualmente. Ejecuta este comando para averiguarlo:

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

La configuración de un servidor de visualización X11 o Wayland está fuera del alcance de esta guía. Si el comando anterior no devuelve nada, deberás comenzar por hacer que alguno de los dos funcione para tu sistema antes de continuar.

Ejecución de un contenedor Docker con una GUI

Ejemplo

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

Si estás utilizando 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 la DISPLAY variable de entorno en la pantalla del host, monta el socket X11 y asigna el .Xauthority archivo al contenedor. El xhost +local:docker permite que el contenedor Docker acceda 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 la DISPLAY variable de entorno a la pantalla del host, monta el socket de Wayland y permite que el contenedor Docker acceda al servidor de Wayland.

Uso de Docker con una GUI

Ahora puedes mostrar aplicaciones gráficas dentro de tu contenedor Docker. Por ejemplo, puedes ejecutar el siguiente comando de la CLI para visualizar las predicciones de un modelo YOLO11:

yolo predict model=yolo11n.pt show=True
Pruebas

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 de Ultralytics para probar el acceso al servidor X11 de tu servidor de visualización GNU-Linux. Si tienes algún problema, considera configurar la variable de entorno -e QT_DEBUG_PLUGINS=1. Configurar esta variable de entorno permite la salida de información de depuración, lo que ayuda en el proceso de resolución de problemas.

Cuando haya terminado con Docker GUI

Revocar acceso

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

xhost -local:docker
¿Quieres ver los resultados de las imágenes directamente en la Terminal?

Consulta la siguiente guía sobre cómo ver los resultados de las imágenes usando una terminal


¡Enhorabuena! Ahora estás configurado para usar Ultralytics con Docker y listo para aprovechar sus potentes capacidades. Para métodos de instalación alternativos, no dudes en explorar la documentación de inicio rápido de Ultralytics.

Preguntas frecuentes

¿Cómo configuro Ultralytics con Docker?

Para configurar Ultralytics con Docker, primero asegúrate de que Docker esté instalado en tu sistema. Si tienes una GPU NVIDIA, instala el runtime de NVIDIA Docker para habilitar la compatibilidad con la GPU. A continuación, extrae la última imagen de Ultralytics Docker de Docker Hub utilizando el siguiente comando:

sudo docker pull ultralytics/ultralytics:latest

Para conocer los pasos detallados, consulta nuestra Guía de inicio rápido de Docker.

¿Cuáles son las ventajas de usar imágenes Docker de Ultralytics para proyectos de aprendizaje automático?

El uso de imágenes Docker de Ultralytics garantiza un entorno consistente en diferentes máquinas, replicando el mismo software y dependencias. Esto es particularmente útil para colaborar entre equipos, ejecutar modelos en varios hardware y mantener la reproducibilidad. Para el entrenamiento basado en GPU, Ultralytics proporciona imágenes Docker optimizadas como Dockerfile para el uso general de la GPU y Dockerfile-jetson para dispositivos NVIDIA Jetson. Explora Ultralytics Docker Hub para obtener más detalles.

¿Cómo puedo ejecutar Ultralytics YOLO en un contenedor Docker con soporte de GPU?

Primero, asegúrate de que el runtime de NVIDIA Docker esté instalado y configurado. A continuación, utiliza el siguiente comando para ejecutar Ultralytics YOLO con soporte de GPU:

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

Este comando configura un contenedor Docker con acceso a la GPU. Para obtener detalles adicionales, consulte la Guía de inicio rápido de Docker.

¿Cómo visualizo los resultados de predicción de YOLO en un contenedor Docker con un servidor de visualización?

Para visualizar los resultados de la predicción de YOLO con una GUI en un contenedor Docker, debes permitir que Docker acceda a tu servidor de visualización. Para los sistemas que ejecutan X11, el comando es:

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

Para los sistemas que ejecutan Wayland, utiliza:

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

Puedes encontrar más información en la sección Ejecutar aplicaciones de interfaz gráfica de usuario (GUI) en un contenedor Docker.

¿Puedo montar directorios locales en el contenedor Docker de Ultralytics?

Sí, puedes montar directorios locales en el contenedor Ultralytics Docker usando el flag -v flag:

sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Reemplaza /path/on/host con el directorio en tu máquina local y /path/in/container con la ruta deseada dentro del contenedor. Esta configuración le permite trabajar con sus archivos locales dentro del contenedor. Para obtener más información, consulte la Nota sobre la accesibilidad de los archivos sección.



📅 Creado hace 1 año ✏️ Actualizado hace 4 meses

Comentarios