Vai al contenuto

Guida rapida a Docker per Ultralytics

Ultralytics Pacchetto Docker Visuale

Questa guida è un'introduzione completa alla creazione di un ambiente Docker per i tuoi progetti Ultralytics . Docker è una piattaforma per sviluppare, spedire ed eseguire applicazioni in container. È particolarmente utile per garantire che il software venga eseguito sempre nello stesso modo, indipendentemente dal luogo in cui viene distribuito. Per maggiori dettagli, visita il repository Docker di Ultralytics su Docker Hub.

Versione dell'immagine Docker Docker tira

Cosa imparerai

  • Configurazione di Docker con il supporto di NVIDIA
  • Installare le immagini Docker di Ultralytics
  • Eseguire Ultralytics in un contenitore Docker con il supporto di CPU o GPU
  • Utilizzare un server di visualizzazione con Docker per mostrare i risultati del rilevamento di Ultralytics
  • Montare le directory locali nel contenitore

Prerequisiti

  • Assicurati che Docker sia installato sul tuo sistema. In caso contrario, puoi scaricarlo e installarlo dal sito web di Docker.
  • Assicurati che il tuo sistema disponga di un driver NVIDIA GPU e NVIDIA .

Configurazione di Docker con il supporto di NVIDIA

Per prima cosa, verifica che i driver di NVIDIA siano installati correttamente eseguendo:

nvidia-smi

Installazione di NVIDIA Docker Runtime

Ora installiamo il runtime Docker NVIDIA per abilitare il supporto di GPU nei container 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

Verifica il runtime di NVIDIA con Docker

Corri docker info | grep -i runtime per garantire che nvidia appare nell'elenco dei runtime:

docker info | grep -i runtime

Installazione delle immagini Docker di Ultralytics

Ultralytics offre diverse immagini Docker ottimizzate per varie piattaforme e casi d'uso:

  • Dockerfile: GPU image, ideal for training.
  • Dockerfile-arm64: Per l'architettura ARM64, adatto a dispositivi come Raspberry Pi.
  • Dockerfile-cpu: CPU-only version for inference and non-GPU environments.
  • Dockerfile-jetson: Optimized for NVIDIA Jetson devices.
  • Dockerfile-python: Ambiente minimale Python per applicazioni leggere.
  • Dockerfile-conda: include il pacchetto Miniconda3 e Ultralytics installato tramite Conda.

Per prelevare l'ultima immagine:

# Set image name as a variable
t=ultralytics/ultralytics:latest

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t

Eseguire Ultralytics in un contenitore Docker

Ecco come eseguire il contenitore Docker Ultralytics :

Utilizzando solo la funzione CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Utilizzo delle GPU

# 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

Il -it assegna una pseudo-TTY e mantiene aperto lo stdin, permettendoti di interagire con il contenitore. Il flag --ipc=host consente di condividere lo spazio dei nomi IPC dell'host, essenziale per condividere la memoria tra i processi. Il flag --gpus permette al contenitore di accedere alle GPU dell'host.

Eseguire Ultralytics in un contenitore Docker

Ecco come eseguire il contenitore Docker Ultralytics :

Utilizzando solo la funzione CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

Utilizzo delle GPU

# 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

Il -it assegna una pseudo-TTY e mantiene aperto lo stdin, permettendoti di interagire con il contenitore. Il flag --ipc=host consente di condividere lo spazio dei nomi IPC dell'host, essenziale per condividere la memoria tra i processi. Il flag --gpus permette al contenitore di accedere alle GPU dell'host.

Nota sull'accessibilità dei file

Per lavorare con i file sul tuo computer locale all'interno del container, puoi utilizzare i volumi Docker:

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

Sostituisci /path/on/host con il percorso della directory sul computer locale e /path/in/container con il percorso desiderato all'interno del contenitore Docker.

Eseguire applicazioni con interfaccia grafica (GUI) in un contenitore Docker

Altamente sperimentale - L'utente si assume tutti i rischi

Le seguenti istruzioni sono sperimentali. La condivisione di un socket X11 con un contenitore Docker comporta potenziali rischi per la sicurezza. Pertanto, si consiglia di testare questa soluzione solo in un ambiente controllato. Per maggiori informazioni, consulta queste risorse su come utilizzare xhost(1)(2).

Docker viene utilizzato principalmente per containerizzare applicazioni in background e programmi CLI , ma può anche eseguire programmi grafici. Nel mondo Linux, due server grafici principali gestiscono la visualizzazione grafica: X11 (noto anche come X Window System) e Wayland. Prima di iniziare, è fondamentale determinare quale server grafico stai utilizzando. Esegui questo comando per scoprirlo:

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

L'installazione e la configurazione di un display server X11 o Wayland esula dagli scopi di questa guida. Se il comando precedente non restituisce nulla, allora dovrai iniziare a far funzionare uno dei due sistemi prima di continuare.

Eseguire un contenitore Docker con una GUI

Esempio

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

Se utilizzi X11, puoi eseguire il seguente comando per consentire al contenitore Docker di accedere 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

Questo comando imposta il valore DISPLAY al display dell'host, monta il socket X11 e mappa la variabile d'ambiente .Xauthority al contenitore. Il xhost +local:docker permette al contenitore Docker di accedere al server X11.

Per Wayland, usa il seguente comando:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

Questo comando imposta il valore DISPLAY sul display dell'host, monta il socket Wayland e permette al contenitore Docker di accedere al server Wayland.

Usare Docker con una GUI

Ora puoi visualizzare le applicazioni grafiche all'interno del tuo contenitore Docker. Ad esempio, puoi eseguire il seguente comandoCLI per visualizzare le previsioni di un modelloYOLOv8 :

yolo predict model=yolov8n.pt show=True
Test

Un modo semplice per verificare che il gruppo Docker abbia accesso al server X11 è quello di eseguire un container con un programma GUI del tipo xclock o xeyes. In alternativa, puoi anche installare questi programmi nel contenitore Docker Ultralytics per testare l'accesso al server X11 del tuo display server GNU-Linux. Se dovessi riscontrare dei problemi, considera di impostare la variabile d'ambiente -e QT_DEBUG_PLUGINS=1. L'impostazione di questa variabile d'ambiente consente l'emissione di informazioni di debug, aiutando il processo di risoluzione dei problemi.

Una volta terminato l'utilizzo della GUI di Docker

Revoca dell'accesso

In entrambi i casi, non dimenticare di revocare l'accesso al gruppo Docker quando hai finito.

xhost -local:docker
Vuoi visualizzare i risultati delle immagini direttamente nel Terminale?

Consulta la seguente guida per visualizzare i risultati dell'immagine utilizzando un terminale


Congratulazioni! Ora sei configurato per utilizzare Ultralytics con Docker e sei pronto a sfruttare le sue potenti funzionalità. Per metodi di installazione alternativi, non esitare a consultare la documentazione di avvio rapido diUltralytics .

DOMANDE FREQUENTI

Come si configura Ultralytics con Docker?

Per configurare Ultralytics con Docker, assicurati innanzitutto che Docker sia installato sul tuo sistema. Se hai un NVIDIA GPU , installa il runtime Docker NVIDIA per abilitare il supporto GPU . Quindi, preleva l'ultima immagine Docker di Ultralytics da Docker Hub utilizzando il seguente comando:

sudo docker pull ultralytics/ultralytics:latest

For detailed steps, refer to our Docker Quickstart Guide.

Quali sono i vantaggi dell'utilizzo delle immagini Docker di Ultralytics per i progetti di apprendimento automatico?

L'utilizzo delle immagini Docker di Ultralytics garantisce un ambiente coerente su macchine diverse, replicando lo stesso software e le stesse dipendenze. Questo è particolarmente utile per la collaborazione tra team, per l'esecuzione di modelli su hardware diversi e per mantenere la riproducibilità. Per la formazione basata su GPU, Ultralytics fornisce immagini Docker ottimizzate, come ad esempio Dockerfile per l'uso generale di GPU e Dockerfile-jetson for NVIDIA Jetson devices. Explore Ultralytics Docker Hub per maggiori dettagli.

Come posso eseguire Ultralytics YOLO in un contenitore Docker con il supporto di GPU ?

Per prima cosa, assicurati che il runtime Docker NVIDIA sia installato e configurato. Quindi, usa il seguente comando per eseguire Ultralytics YOLO con il supporto di GPU :

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

This command sets up a Docker container with GPU access. For additional details, see the Docker Quickstart Guide.

Come posso visualizzare i risultati delle previsioni di YOLO in un contenitore Docker con un server di visualizzazione?

Per visualizzare i risultati delle previsioni di YOLO con un'interfaccia grafica in un contenitore Docker, devi consentire a Docker di accedere al tuo server di visualizzazione. Per i sistemi che utilizzano X11, il comando è:

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

Per i sistemi che utilizzano 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

More information can be found in the Run graphical user interface (GUI) applications in a Docker Container section.

Posso montare le directory locali nel contenitore Docker Ultralytics ?

Sì, puoi montare le directory locali nel contenitore Docker Ultralytics utilizzando il comando -v bandiera:

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

Sostituisci /path/on/host con la directory sul tuo computer locale e /path/in/container with the desired path inside the container. This setup allows you to work with your local files within the container. For more information, refer to the relevant section on mounting local directories.



Created 2023-11-12, Updated 2024-07-05
Authors: glenn-jocher (7), Burhan-Q (1), jpedrofonseca_94@hotmail.com (1)

Commenti