Ultralytics YOLO27:

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

Ultralytics Docker Package Visual

Esta guía ofrece 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. Resulta especialmente útil para garantizar que el software se ejecute siempre de la misma forma, independientemente de dónde se implemente. Para obtener más información, visita el repositorio de Docker de Ultralytics en Docker Hub.

Versión de la imagen de Docker Descargas de Docker

Qué aprenderás#

  • Configurar Docker con compatibilidad con NVIDIA
  • Instalar imágenes Docker de Ultralytics
  • Ejecutar Ultralytics en un contenedor Docker con compatibilidad con CPU o GPU
  • Usar un servidor de pantalla con Docker para mostrar los resultados de detección de Ultralytics
  • Montar 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 mediante GPU, asegúrate de que tu sistema tenga una GPU NVIDIA y los controladores de NVIDIA instalados. Las imágenes para CPU no requieren hardware NVIDIA.
  • Si utilizas dispositivos NVIDIA Jetson, asegúrate de tener instalada la versión adecuada de JetPack. Consulta la guía de NVIDIA Jetson para obtener más información.

Configurar Docker con compatibilidad con NVIDIA (opcional)#

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

nvidia-smi

Instalar NVIDIA Container Toolkit#

Ahora, instala el NVIDIA Container Toolkit para habilitar la compatibilidad con 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

Verificar dispositivos CDI con Docker#

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

nvidia-ctk cdi list

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

Instalar imágenes Docker de Ultralytics#

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

EtiquetaPlataforma y finalidadOrigen
latestLinux AMD64 con CUDA para entrenamiento e inferencia con GPUDockerfile
latest-exportLinux AMD64 con CUDA y dependencias de exportación para conversión y evaluación comparativaDockerfile-export
latest-pythonImagen ligera de Python para Linux AMD64 destinada a la inferencia con CPUDockerfile-python
latest-python-exportImagen de CPU de Linux AMD64 con dependencias de exportaciónDockerfile-python-export
latest-cpuImagen de CPU de Linux AMD64 con Bash como comando predeterminadoDockerfile-cpu
latest-jupyterImagen de CPU de Linux AMD64 con JupyterLab y cuadernos de tutoriales de UltralyticsDockerfile-jupyter
latest-arm64Imagen de CPU de Linux ARM64 para Apple silicon, Raspberry Pi y otros sistemas ARM64Dockerfile-arm64
latest-nvidia-arm64Linux ARM64 para DGX Spark (DGX OS) y PyTorch en Thor (JetPack 7.1); el TensorRT integrado no es compatible con JetPackDockerfile-nvidia-arm64
latest-jetson-jetpack6Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 6Dockerfile-jetson-jetpack6
latest-jetson-jetpack5Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 5Dockerfile-jetson-jetpack5
latest-jetson-jetpack4Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 4Dockerfile-jetson-jetpack4
latest-runnerImagen Linux AMD64 con CUDA para un ejecutor de GitHub Actions con GPU autohospedadoDockerfile-runner
latest-runner-cpuImagen Linux AMD64 para un ejecutor de GitHub Actions con CPU autohospedadoDockerfile-runner-cpu

Las imágenes de GPU AMD64 (latest, latest-export y latest-runner) utilizan PyTorch 2.14 y CUDA 13.2. Comprueba la compatibilidad con CUDA del controlador del host con nvidia-smi antes de iniciarlas; instalar un contenedor más nuevo no actualiza el controlador del host. CUDA 13 elimina la compatibilidad con las GPU Maxwell, Pascal y Volta, incluidas Tesla P100 y V100. Consulta las notas de la versión de CUDA de NVIDIA y los requisitos de compatibilidad de controladores.

La imagen NVIDIA ARM64 utiliza NVIDIA PyTorch 26.08 con CUDA 13.4 y TensorRT 11.2. La compatibilidad de PyTorch con Thor no se extiende a TensorRT: NVIDIA no admite TensorRT 11.2 en JetPack. Para las exportaciones de Jetson TensorRT, utiliza el tiempo de ejecución compatible de TensorRT 10.x para tu versión de JetPack. Sigue los requisitos de la plataforma en la guía de Jetson o en la guía de DGX Spark. Las imágenes de JetPack 4, 5 y 6 conservan sus pilas independientes específicas de cada dispositivo.

El Dockerfile de Conda está disponible para compilaciones locales; la publicación automatizada de latest-conda está desactivada, por lo que esa etiqueta del registro no contiene estas actualizaciones.

Utiliza latest-python-export para las exportaciones de LiteRT. La imagen de GPU latest-export mantiene PyTorch 2.14 y omite LiteRT porque su dependencia actual requiere una versión de PyTorch inferior a la 2.14.

Las etiquetas que comienzan por latest siguen la compilación más reciente publicada de la rama principal. Las etiquetas versionadas sustituyen el prefijo latest por una versión de Ultralytics, como VERSION, VERSION-cpu o VERSION-jetson-jetpack6. Usa una etiqueta versionada para disponer de un entorno reproducible.

Para extraer la imagen más reciente:

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

Para compilar una imagen tú mismo, clona el repositorio y proporciona el Dockerfile correspondiente de la tabla anterior, usando 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 .

Ejecutar Ultralytics en un contenedor Docker#

Así puedes ejecutar el contenedor Docker de Ultralytics:

Usar únicamente la CPU#

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

Usar 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

La opción -it asigna una pseudo-TTY y mantiene stdin abierto, lo que te permite interactuar con el contenedor. La opción --ipc=host habilita el uso compartido del espacio de nombres IPC del host, algo esencial para compartir memoria entre procesos. La opción --device nvidia.com/gpu=... concede al contenedor acceso a las GPU del host mediante CDI.

Usa CDI en lugar de `--gpus all`

En Linux, las solicitudes de dispositivos CDI requieren Docker >= 28.2.0 (CDI está habilitado de forma predeterminada) y nvidia-container-toolkit >= 1.18 (generación automática de la especificación CDI). Actualiza los hosts Linux antiguos antes de ejecutar contenedores con GPU. La opción heredada --gpus all puede provocar la pérdida del acceso a la GPU (Failed to initialize NVML: Unknown Error) cuando el host vuelve a cargar systemd durante las actualizaciones rutinarias de paquetes (nvidia-container-toolkit#48). Las solicitudes CDI --device incluyen los nodos de dispositivo 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, mantienen el acceso a la GPU durante las recargas.

La compatibilidad con GPU de Docker Desktop en Windows utiliza actualmente --gpus all con el backend 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 daemon-reload anterior no se aplica.

Nota sobre la accesibilidad de los archivos#

Para trabajar con archivos de tu máquina local desde el contenedor, puedes usar 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

Sustituye /path/on/host por la ruta del directorio de tu máquina local y /path/in/container por la ruta deseada dentro del contenedor Docker.

Conservar los resultados del entrenamiento#

De forma predeterminada, los resultados del entrenamiento se guardan en /ultralytics/runs/<task>/<name>/ dentro del contenedor. Si no montas un directorio del host, los resultados se perderán al eliminar el contenedor.

Para conservar los resultados del 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 de tu máquina host.

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 tanto, se recomienda probar esta solución únicamente 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 CLI, pero también puede ejecutar programas gráficos. En el entorno Linux, hay dos servidores gráficos principales que gestionan la pantalla: X11 (también conocido como el 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 configuración y el ajuste de un servidor de pantalla X11 o Wayland quedan fuera del alcance de esta guía. Si el comando anterior no devuelve nada, primero tendrás que conseguir que uno de ellos funcione en tu sistema antes de continuar.

Ejecutar un contenedor Docker con una interfaz gráfica de usuario#

Ejemplo
Usar GPU

Si utilizas GPU, puedes añadir la opción --device nvidia.com/gpu=all al comando.

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

Usar Docker con una interfaz gráfica de usuario#

Ahora puedes mostrar aplicaciones gráficas dentro de tu contenedor Docker. Por ejemplo, puedes ejecutar el siguiente comando 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 GUI como xclock o xeyes. 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 encuentras algún problema, considera establecer la variable de entorno -e QT_DEBUG_PLUGINS=1. Al establecer esta variable de entorno, se habilita la salida de información de depuración, lo que facilita el proceso de resolución de problemas.

Al terminar de usar la interfaz gráfica de Docker#

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?

Ya tienes todo listo para usar Ultralytics con Docker y aprovechar sus funcionalidades. Para autohospedar la aplicación web de Ultralytics, consulta la guía de la plataforma local. Para conocer métodos alternativos de instalación del paquete Python, consulta la documentación de inicio rápido de Ultralytics.

Preguntas frecuentes#

  • 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 la compatibilidad con GPU. A continuación, extrae la imagen Docker más reciente de Ultralytics desde Docker Hub mediante el siguiente comando:

    sudo docker pull ultralytics/ultralytics:latest

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

  • El uso de imágenes Docker de Ultralytics garantiza un entorno coherente en distintas máquinas, al replicar el mismo software y las mismas dependencias. Esto resulta especialmente útil para colaborar entre equipos, ejecutar modelos en distintos tipos de hardware y mantener la reproducibilidad. Usa 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. A continuación, utiliza el siguiente comando para ejecutar Ultralytics YOLO con compatibilidad con 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 más información, consulta la Guía de inicio rápido de Docker.

  • Para visualizar los resultados de las predicciones de YOLO con una interfaz gráfica en un contenedor Docker, debes permitir que Docker acceda a tu servidor de pantalla. En 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

    En 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

    Encontrarás 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 mediante la opción -v:

    sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

    Sustituye /path/on/host por el directorio de tu máquina local y /path/in/container por la ruta deseada dentro del contenedor. Esta configuración te permite trabajar con tus archivos locales desde el contenedor. Para obtener más información, consulta la sección Nota sobre la accesibilidad de los archivos.

Comentarios