Guía de inicio rápido de Docker para Ultralytics#
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 funcione siempre igual, independientemente de dónde se implemente. Para obtener más información, visita el repositorio de Docker de Ultralytics en Docker Hub.
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
Ver: Cómo empezar a usar Docker | Demostración en directo del uso del paquete Ultralytics Python dentro de Docker 🎉
Requisitos previos#
- Asegúrate de que Docker esté instalado en tu sistema. Si no lo está, puedes descargarlo e instalarlo desde el sitio web de Docker.
- Para acelerar el procesamiento con GPU, asegúrate de que tu sistema tenga una GPU NVIDIA y los controladores NVIDIA instalados. Las imágenes para CPU no requieren hardware de 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 NVIDIA estén instalados correctamente ejecutando:
nvidia-smiInstalar NVIDIA Container Toolkit#
Ahora vamos a instalar 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.listActualiza las listas de paquetes e instala NVIDIA Container Toolkit:
sudo apt-get updatesudo apt-get install -y nvidia-container-toolkitVerificar dispositivos CDI con Docker#
Ejecuta nvidia-ctk cdi list para comprobar que los dispositivos CDI de GPU están disponibles (el servicio nvidia-cdi-refresh del kit de herramientas genera y mantiene automáticamente la especificación en toolkit >= 1.18):
nvidia-ctk cdi listDeberí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. La automatización de publicación de Docker compila cada imagen a partir del Dockerfile enlazado.
| Etiqueta | Plataforma y uso | Fuente |
|---|---|---|
latest | Linux AMD64 con CUDA para entrenamiento e inferencia con GPU | Dockerfile |
latest-export | Linux AMD64 con CUDA y dependencias de exportación para conversión y evaluación de rendimiento | Dockerfile-export |
latest-amd | Linux AMD64 con ROCm y MIGraphX para entrenamiento e inferencia con GPU AMD | Dockerfile-amd |
latest-python | Imagen ligera Linux AMD64 Python 3.14 para inferencia en CPU | Dockerfile-python |
latest-python-export | Imagen Linux AMD64 Python 3.13 para CPU con dependencias de exportación | Dockerfile-python-export |
latest-cpu | Imagen de Linux AMD64 para CPU con Bash como comando predeterminado | Dockerfile-cpu |
latest-jupyter | Imagen de Linux AMD64 para CPU con JupyterLab y cuadernos de tutoriales de Ultralytics | Dockerfile-jupyter |
latest-arm64 | Imagen Linux ARM64 Python 3.13 para CPU para Apple silicon, Raspberry Pi y otros sistemas ARM64 | Dockerfile-arm64 |
latest-nvidia-arm64 | Linux ARM64 para DGX Spark (DGX OS) y PyTorch en Thor (JetPack 7.1); TensorRT incluido no es compatible con JetPack | Dockerfile-nvidia-arm64 |
latest-jetson-jetpack6 | Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 6 | Dockerfile-jetson-jetpack6 |
latest-jetson-jetpack5 | Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 5 | Dockerfile-jetson-jetpack5 |
latest-jetson-jetpack4 | Linux ARM64 para dispositivos NVIDIA Jetson con JetPack 4 | Dockerfile-jetson-jetpack4 |
latest-runner | Imagen Linux AMD64 con CUDA para un ejecutor de GPU autohospedado de GitHub Actions | Dockerfile-runner |
latest-runner-cpu | Imagen Linux AMD64 para un ejecutor de CPU autohospedado de GitHub Actions | Dockerfile-runner-cpu |
Las imágenes GPU AMD64 (latest, latest-export y latest-runner) usan PyTorch 2.14 y CUDA 13.2. Comprueba la compatibilidad del controlador del host con CUDA mediante nvidia-smi antes de iniciarlas; instalar un contenedor más reciente no actualiza el controlador del host. CUDA 13 deja de ser compatible 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 los controladores.
La imagen NVIDIA ARM64 usa 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 TensorRT en Jetson, usa el entorno de ejecución TensorRT 10.x compatible con 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 para 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.
Usa latest-python-export para las exportaciones de LiteRT. La imagen GPU latest-export mantiene PyTorch 2.14 y no incluye LiteRT porque su dependencia actual requiere una versión de PyTorch anterior a la 2.14.
Las imágenes Python, CPU, Jupyter y ejecutor de CPU usan Python 3.14. La imagen de exportación de Python usa la base latest-python-3.13, creada a partir de la misma Dockerfile-python con --build-arg PYTHON_VERSION=3.13, porque TensorFlow, CoreML y PaddlePaddle aún no son compatibles con Python 3.14.
Las etiquetas que empiezan por latest corresponden a la compilación publicada más reciente de la rama principal. En las etiquetas con versión, el prefijo latest se sustituye por una versión de Ultralytics, como VERSION, VERSION-cpu o VERSION-jetson-jetpack6. Usa una etiqueta con versión para obtener un entorno reproducible.
Para descargar la imagen más reciente:
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latestSi prefieres compilar una imagen tú mismo, clona el repositorio y pasa el Dockerfile correspondiente de la tabla anterior; usa 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#
A continuación se explica cómo ejecutar el contenedor Docker de Ultralytics:
Usar solo la CPU#
# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpuUsar 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:latestLa opción -it asigna un 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. Para GPU NVIDIA, la opción --device nvidia.com/gpu=... concede acceso mediante CDI. Para GPU AMD, las opciones --device conceden acceso al controlador del núcleo de la GPU (/dev/kfd) y a los nodos de representación de pantalla (/dev/dri).
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 especificaciones CDI). Actualiza los hosts Linux antiguos antes de ejecutar contenedores con GPU. La opción heredada --gpus all puede hacer que se pierda el 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 procesos de entrenamiento o los ejecutores de CI, mantienen el acceso a la GPU tras las recargas.
La compatibilidad de Docker Desktop con GPU en Windows utiliza actualmente --gpus all con el backend de WSL 2, ya que los dispositivos CDI de NVIDIA no están disponibles allí. Windows no usa systemd de Linux, así que no se aplica el fallo de recarga del daemon descrito anteriormente.
Nota sobre el acceso a los archivos#
Para trabajar con archivos de tu equipo local desde el contenedor, puedes usar volúmenes 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:latestSustituye /path/on/host por la ruta del directorio de tu equipo 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 pierden 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/runsEsto guarda todos los resultados del entrenamiento en ./runs en tu equipo host.
Ejecutar aplicaciones de interfaz gráfica de usuario (GUI) en un contenedor Docker#
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 de CLI, pero también puede ejecutar programas gráficos. En el entorno Linux, hay dos servidores gráficos principales que gestionan la visualización: X11 (también conocido como X Window System) y Wayland. Antes de empezar, es fundamental determinar qué servidor gráfico estás usando. Ejecuta este comando para averiguarlo:
env | grep -E -i 'x11|xorg|wayland'La 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, primero tendrás que conseguir que uno de ellos funcione en tu sistema antes de continuar.
Ejecutar un contenedor Docker con una GUI#
Usar GPU
Si usas GPU, puedes añadir la marca --device nvidia.com/gpu=all al comando.
Si usas 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:latestEste 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 GUI#
Las imágenes de Ultralytics incluyen OpenCV sin interfaz gráfica, así que instala primero la versión de OpenCV con interfaz gráfica y sus bibliotecas del sistema dentro del contenedor:
apt-get update && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 libsm6
pip uninstall -y opencv-python-headless && pip install opencv-pythonAhora puedes mostrar aplicaciones gráficas dentro del 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=TruePruebas
Una forma sencilla de comprobar que el grupo Docker tiene acceso al servidor X11 es ejecutar un contenedor con un programa con 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 visualización GNU-Linux. Si tienes algún problema, plantéate establecer la variable de entorno -e QT_DEBUG_PLUGINS=1. Al establecer esta variable de entorno, se muestra información de depuración que facilita la resolución de problemas.
Cuando termines de usar la GUI de Docker#
En ambos casos, no olvides revocar el acceso del grupo Docker cuando termines.
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 las imágenes en un terminal
Ya tienes todo listo para usar Ultralytics con Docker y aprovechar sus capacidades. Para alojar la aplicación web de Ultralytics en tus propios servidores, consulta la guía de la plataforma local. Para conocer otros métodos de instalación del paquete Python, consulta la documentación de inicio rápido de Ultralytics.
Preguntas frecuentes#
Para configurar Ultralytics con Docker, primero asegúrate de que Docker esté instalado en tu sistema. Si tienes una GPU NVIDIA, instala NVIDIA Container Toolkit para habilitar la compatibilidad con GPU. A continuación, descarga la imagen más reciente de Docker de Ultralytics desde Docker Hub con el siguiente comando:
sudo docker pull ultralytics/ultralytics:latestPara ver 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 distintas máquinas, al replicar el mismo software y las mismas dependencias. Esto resulta especialmente útil para colaborar en equipo, ejecutar modelos en distintos tipos de hardware y mantener la reproducibilidad. Usa
latestpara 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 NVIDIA Container Toolkit esté instalado y configurado. A continuación, usa 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 GPUsEste 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 GUI en un contenedor Docker, tienes que permitir que Docker acceda a tu servidor de visualización. En los sistemas que usan 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:latestEn los sistemas que usan 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:latestDentro del contenedor, instala la versión de OpenCV con interfaz gráfica antes de usar
show=True, tal como se describe en la sección Ejecutar aplicaciones con interfaz gráfica de usuario (GUI) en un contenedor Docker.Sí, puedes montar directorios locales en el contenedor Docker de Ultralytics con la marca
-v:sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestSustituye
/path/on/hostpor el directorio de tu equipo local y/path/in/containerpor la ruta que quieras usar 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.