YOLO Vision 2026:

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

Ultralytics Docker Package Visual

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, distribuir y ejecutar aplicaciones en contenedores. Es especialmente beneficiosa para garantizar que el software se ejecute siempre de la misma manera, independientemente de dónde se implemente. Para obtener más detalles, visita el repositorio de Ultralytics Docker en Docker Hub.

Docker Image Version Docker Pulls

Lo que aprenderás#

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


Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉

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.
  • Para la aceleración por GPU, asegúrate de que tu sistema tenga una GPU NVIDIA y los controladores de NVIDIA instalados. Las imágenes de CPU no requieren hardware de NVIDIA.
  • Si utilizas dispositivos NVIDIA Jetson, asegúrate de tener instalada la versión de JetPack adecuada. Consulta la guía de NVIDIA Jetson para obtener más detalles.

Configurar Docker con soporte para NVIDIA (opcional)#

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

nvidia-smi

Instalación de NVIDIA Container Toolkit#

Ahora, instalemos el NVIDIA Container Toolkit para habilitar el soporte de GPU en los contenedores 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

Actualiza las listas de paquetes e instala el NVIDIA Container Toolkit:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Verifica los dispositivos CDI con Docker#

Ejecuta nvidia-ctk cdi list para asegurarte de que los dispositivos CDI de la GPU estén disponibles (el servicio nvidia-cdi-refresh del kit de herramientas genera y mantiene la especificación automáticamente en versiones del kit de herramientas >= 1.18):

nvidia-ctk cdi list

Deberías ver entradas como nvidia.com/gpu=0 y nvidia.com/gpu=all. Los dispositivos CDI descubiertos también aparecen en docker info.


Instalación de imágenes de Docker de Ultralytics#

Ultralytics publica las siguientes imágenes en Docker Hub. Cada imagen se compila a partir de su archivo Dockerfile vinculado mediante el flujo de trabajo de publicación en Docker.

EtiquetaPlataforma y propósitoFuente
latestLinux AMD64 con CUDA para entrenamiento e inferencia en GPUDockerfile
latest-exportLinux AMD64 con CUDA y dependencias de exportación para conversión y evaluación comparativaDockerfile-export
latest-pythonImagen ligera de Linux AMD64 Python para inferencia en CPUDockerfile-python
latest-python-exportImagen de Linux AMD64 CPU con dependencias de exportaciónDockerfile-python-export
latest-cpuImagen de Linux AMD64 CPU con Bash como comando predeterminadoDockerfile-cpu
latest-jupyterImagen de Linux AMD64 CPU con JupyterLab y cuadernos de tutoriales de UltralyticsDockerfile-jupyter
latest-arm64Imagen de CPU para Linux ARM64 para Apple silicon, Raspberry Pi y otros sistemas ARM64Dockerfile-arm64
latest-nvidia-arm64Linux ARM64 con soporte para GPU NVIDIA para Jetson AGX Thor, DGX Spark, JetPack 7 y DGX OSDockerfile-nvidia-arm64
latest-jetson-jetpack6Linux ARM64 para dispositivos NVIDIA Jetson que ejecutan JetPack 6Dockerfile-jetson-jetpack6
latest-jetson-jetpack5Linux ARM64 para dispositivos NVIDIA Jetson que ejecutan JetPack 5Dockerfile-jetson-jetpack5
latest-jetson-jetpack4Linux ARM64 para dispositivos NVIDIA Jetson que ejecutan JetPack 4Dockerfile-jetson-jetpack4
latest-runnerImagen Linux AMD64 CUDA para un ejecutor de GPU autohospedado de GitHub ActionsDockerfile-runner
latest-runner-cpuImagen Linux AMD64 para un ejecutor de CPU autohospedado de GitHub ActionsDockerfile-runner-cpu

Las etiquetas que comienzan con latest rastrean la compilación de la rama principal publicada más recientemente. Las etiquetas con versión reemplazan el prefijo latest con una versión de Ultralytics, como VERSION, VERSION-cpu o VERSION-jetson-jetpack6. Utiliza una etiqueta con versión para obtener un entorno reproducible.

Para descargar la última imagen:

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latest

Para construir una imagen tú mismo en su lugar, clona el repositorio y pasa el Dockerfile correspondiente de la tabla anterior, utilizando la raíz del repositorio como contexto de compilación:

# Build the CPU image locally from docker/Dockerfile-cpu
sudo docker build -t ultralytics/ultralytics:latest-cpu -f docker/Dockerfile-cpu .

Ejecución de Ultralytics en un contenedor Docker#

Aquí tienes cómo ejecutar el contenedor Docker de Ultralytics:

Uso exclusivo de la CPU#

# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpu

Uso de GPUs#

# 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

La bandera -it asigna un pseudo-TTY y mantiene la entrada estándar abierta, lo que te permite interactuar con el contenedor. La bandera --ipc=host permite compartir el espacio de nombres IPC del host, algo esencial para compartir memoria entre procesos. La bandera --device nvidia.com/gpu=... otorga al contenedor acceso a las GPU del host a través de CDI.

Usa CDI en lugar de `--gpus all`

En Linux, las solicitudes de dispositivos CDI requieren Docker >= 28.2.0 (CDI habilitado por defecto) y nvidia-container-toolkit >= 1.18 (generación automática de especificaciones CDI). Actualiza los hosts Linux más antiguos antes de ejecutar contenedores de GPU. La bandera heredada --gpus all puede perder el acceso a la GPU (Failed to initialize NVML: Unknown Error) cuando el host recarga systemd durante las actualizaciones rutinarias de paquetes (nvidia-container-toolkit#48). Las solicitudes CDI de --device incluyen los nodos de dispositivos en la configuración del contenedor, por lo que los contenedores de larga duración, como los trabajadores de entrenamiento o los ejecutores de CI, conservan el acceso a la GPU entre recargas.

El soporte de GPU de Docker Desktop en Windows utiliza actualmente --gpus all con el backend de WSL 2 porque los dispositivos CDI de NVIDIA no están disponibles allí. Windows no utiliza systemd de Linux, por lo que el fallo de recarga del daemon mencionado anteriormente no se aplica.

Nota sobre la accesibilidad de archivos#

Para trabajar con archivos en tu máquina local dentro del contenedor, puedes utilizar volúmenes de 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

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.

Persistencia de las salidas de entrenamiento#

Los resultados del entrenamiento se guardan por defecto en /ultralytics/runs/<task>/<name>/ dentro del contenedor. Si no montas un directorio del host, los resultados se perderán cuando se elimine el contenedor.

Para persistir las salidas de entrenamiento:

# 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

Esto guarda todos los resultados del entrenamiento en ./runs en tu máquina host.

Ejecución de aplicaciones con 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 únicamente en un entorno controlado. Para obtener 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 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 empezar, es fundamental determinar qué servidor gráfico estás utilizando actualmente. Ejecuta este comando para averiguarlo:

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

La configuración de un servidor de pantalla X11 o Wayland queda fuera del alcance de esta guía. Si el comando anterior no devuelve nada, deberás empezar por hacer que uno de los dos funcione en tu sistema antes de continuar.

Ejecución de un contenedor Docker con una GUI#

Ejemplo
Uso de GPUs

Si estás utilizando GPUs, puedes añadir la bandera --device nvidia.com/gpu=all al comando.

Si estás usando 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 ultralytics/ultralytics:latest

Este comando establece la variable de entorno DISPLAY en la pantalla del host, monta el socket X11 y asigna el archivo .Xauthority al contenedor. El comando xhost +local:docker permite que el contenedor Docker acceda al servidor X11.

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 CLI para visualizar las predicciones de un modelo YOLO26:

yolo predict model=yolo26n.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 de interfaz gráfica de usuario (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 pantalla 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 facilita el proceso de resolución de problemas.

Cuando termines con la GUI de Docker#

Revocar acceso

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

xhost -local:docker
¿Quieres ver los resultados de la imagen directamente en la Terminal?

Ahora ya tienes todo configurado para usar Ultralytics con Docker y estás listo para aprovechar al máximo sus capacidades. Para alojar por ti mismo la aplicación web de Ultralytics, consulta la guía de plataforma local (On-Premise). Para conocer métodos alternativos de instalación de paquetes de Python, consulta la documentación de inicio rápido de Ultralytics.

FAQ#

  • Para configurar Ultralytics con Docker, asegúrate primero de que Docker esté instalado en tu sistema. Si tienes una GPU NVIDIA, instala el NVIDIA Container Toolkit para habilitar el soporte de GPU. A continuación, descarga la imagen de Docker de Ultralytics más reciente desde 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.

  • El uso de imágenes Docker de Ultralytics garantiza un entorno coherente en diferentes máquinas, replicando el mismo software y dependencias. Esto es especialmente útil para colaborar entre equipos, ejecutar modelos en diversos hardware y mantener la reproducibilidad. Utiliza latest para el entrenamiento general con GPU NVIDIA o selecciona la imagen que coincida con tu versión de JetPack para un dispositivo NVIDIA Jetson. Consulta la tabla completa de imágenes o explora Ultralytics Docker Hub.

  • Primero, asegúrate de que el NVIDIA Container Toolkit esté instalado y configurado. Luego, utiliza el siguiente comando para ejecutar Ultralytics YOLO con soporte de GPU:

    sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest # all GPUs

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

  • Para visualizar los resultados de las predicciones de YOLO con una GUI en un contenedor Docker, necesitas permitir que Docker acceda a tu servidor de pantalla. Para 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 sistemas que ejecutan Wayland, usa:

    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.

  • Sí, puedes montar directorios locales en el contenedor Docker de Ultralytics utilizando la bandera -v:

    sudo docker run -it --ipc=host --device nvidia.com/gpu=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 te permite trabajar con tus archivos locales dentro del contenedor. Para obtener más información, consulta la sección Nota sobre accesibilidad de archivos.

Comentarios