Guida rapida a Docker per Ultralytics
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.
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:
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:
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
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
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:
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 :
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.
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:
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 :
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.