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 progetti Ultralytics . Docker è una piattaforma per lo sviluppo, la spedizione e l'esecuzione di applicazioni in contenitori. È particolarmente utile per garantire che il software venga eseguito sempre nello stesso modo, indipendentemente da dove viene distribuito. Per maggiori dettagli, visitare il repository Docker di Ultralytics su Docker Hub.

Versione dell'immagine Docker Docker tira

Cosa imparerete

  • Impostazione di Docker con il supporto di NVIDIA
  • Installazione delle immagini Docker di Ultralytics
  • Esecuzione di Ultralytics in un contenitore Docker con il supporto di CPU o GPU
  • Utilizzo di un server di visualizzazione con Docker per mostrare i risultati del rilevamento di Ultralytics
  • Montaggio delle directory locali nel contenitore

Prerequisiti

  • Assicurarsi che Docker sia installato sul sistema. In caso contrario, è possibile scaricarlo e installarlo dal sito web di Docker.
  • Assicurarsi che il sistema disponga dei driver NVIDIA GPU e NVIDIA .

Impostazione di Docker con il supporto di NVIDIA

Per prima cosa, verificate che i driver di NVIDIA siano installati correttamente eseguendo l'operazione:

nvidia-smi

Installazione del runtime Docker NVIDIA

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

Correre 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: immagine GPU , ideale per la formazione.
  • Dockerfile-arm64: Per l'architettura ARM64, adatto a dispositivi come Raspberry Pi.
  • Dockerfile-cpu: CPU Versione solo per ambienti di inferenza e nonGPU .
  • Dockerfile-jetson: Ottimizzato per i dispositivi NVIDIA Jetson.
  • Dockerfile-python: Ambiente minimale Python per applicazioni leggere.
  • Dockerfile-conda: include il pacchetto Miniconda3 e Ultralytics installato tramite Conda.

Per prelevare l'immagine più recente:

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

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

Esecuzione di Ultralytics in un contenitore Docker

Ecco come eseguire il contenitore Docker Ultralytics :

Utilizzando solo il 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 stdin, consentendo 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.

Esecuzione di Ultralytics in un contenitore Docker

Ecco come eseguire il contenitore Docker Ultralytics :

Utilizzando solo il 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 stdin, consentendo 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 sulla macchina locale all'interno del contenitore, è possibile 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

Sostituire /path/on/host con il percorso della directory sulla macchina locale e /path/in/container con il percorso desiderato all'interno del contenitore Docker.

Esecuzione di 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 raccomanda di testare questa soluzione solo in un ambiente controllato. Per ulteriori informazioni, fare riferimento a queste risorse su come utilizzare xhost(1)(2).

Docker è usato 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, è essenziale determinare quale sia il server grafico attualmente in uso. Eseguite questo comando per scoprirlo:

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

L'impostazione e la configurazione di un server di visualizzazione X11 o Wayland esula dallo scopo di questa guida. Se il comando precedente non restituisce nulla, è necessario iniziare a far funzionare uno dei due sistemi prima di continuare.

Esecuzione di un contenitore Docker con una GUI

Esempio

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

Se si usa X11, si può 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 consente al contenitore Docker di accedere al server X11.

Per Wayland, utilizzare 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 consente al contenitore Docker di accedere al server Wayland.

Utilizzo di Docker con una GUI

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

yolo predict model=yolo11n.pt show=True
Test

Un modo semplice per verificare che il gruppo Docker abbia accesso al server X11 è quello di eseguire un contenitore con un programma GUI come xclock o xeyes. In alternativa, potete anche installare questi programmi nel contenitore Docker Ultralytics per testare l'accesso al server X11 del vostro display server GNU-Linux. Se si riscontrano problemi, si può 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 terminata l'interfaccia grafica di Docker

Revoca dell'accesso

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

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

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


Congratulazioni! Ora si è configurato l'uso di Ultralytics con Docker e si è pronti a sfruttare le sue potenti capacità. Per metodi di installazione alternativi, si consiglia di consultare la documentazione di avvio rapido diUltralytics .

FAQ

Come si configura Ultralytics con Docker?

Per configurare Ultralytics con Docker, assicurarsi innanzitutto che Docker sia installato sul sistema. Se si dispone di un NVIDIA GPU , installare il runtime Docker NVIDIA per abilitare il supporto a GPU . Quindi, prelevare l'ultima immagine Docker di Ultralytics da Docker Hub usando il seguente comando:

sudo docker pull ultralytics/ultralytics:latest

Per i passaggi dettagliati, consultare la nostra Guida rapida a Docker.

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

L'uso 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 per i dispositivi NVIDIA Jetson. Esplora Ultralytics Hub Docker per maggiori dettagli.

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

Innanzitutto, assicurarsi che il runtime Docker NVIDIA sia installato e configurato. Quindi, utilizzare il seguente comando per eseguire Ultralytics YOLO con il supporto di GPU :

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

Questo comando imposta un contenitore Docker con accesso a GPU . Per ulteriori dettagli, consultare la Guida rapida di Docker.

Come si visualizzano 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, è necessario consentire a Docker di accedere al server di visualizzazione. Per i sistemi con 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 con Wayland, utilizzare:

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

Ulteriori informazioni sono disponibili nella sezione Esecuzione di applicazioni con interfaccia grafica (GUI) in un contenitore Docker.

È possibile montare directory locali nel contenitore Docker Ultralytics ?

Sì, è possibile montare le directory locali nel contenitore Docker Ultralytics usando il metodo -v bandiera:

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

Sostituire /path/on/host con la directory sulla macchina locale e /path/in/container con il percorso desiderato all'interno del contenitore. Questa impostazione consente di lavorare con i file locali all'interno del contenitore. Per ulteriori informazioni, consultare la sezione relativa a montaggio delle directory locali.

📅C reato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti