Guía de inicio rápido de Docker para Ultralytics
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.
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.