Guida rapida a Docker per Ultralytics
Questa guida funge da introduzione completa alla configurazione di un ambiente Docker per i tuoi progetti Ultralytics. Docker è una piattaforma per sviluppare, distribuire ed eseguire applicazioni in container. È particolarmente utile per garantire che il software funzioni sempre allo stesso modo, indipendentemente da dove viene distribuito. Per ulteriori dettagli, visita il repository Docker di Ultralytics su Docker Hub.
Cosa imparerai
- Configurazione di Docker con supporto NVIDIA
- Installazione delle immagini Docker di Ultralytics
- Esecuzione di Ultralytics in un container Docker con supporto CPU o GPU
- Utilizzo di un display server con Docker per mostrare i risultati di rilevamento di Ultralytics
- Montaggio di directory locali nel container
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
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 abbia una GPU NVIDIA e che i driver NVIDIA siano installati.
- Se utilizzi dispositivi NVIDIA Jetson, assicurati di avere installato la versione di JetPack appropriata. Fai riferimento alla guida NVIDIA Jetson per maggiori dettagli.
Configurazione di Docker con supporto NVIDIA
Per prima cosa, verifica che i driver NVIDIA siano installati correttamente eseguendo:
nvidia-smiInstallazione di NVIDIA Container Toolkit
Ora installiamo il NVIDIA Container Toolkit per abilitare il supporto GPU nei container 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.listAggiorna gli elenchi dei pacchetti e installa il pacchetto nvidia-container-toolkit:
sudo apt-get updateInstalla l'ultima versione di nvidia-container-toolkit:
sudo apt-get install -y nvidia-container-toolkit \
nvidia-container-toolkit-base libnvidia-container-tools \
libnvidia-container1Opzionale: installa una versione specifica di nvidia-container-toolkit
Facoltativamente, puoi installare una versione specifica di nvidia-container-toolkit impostando la variabile d'ambiente NVIDIA_CONTAINER_TOOLKIT_VERSION:
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerVerifica del runtime NVIDIA con Docker
Esegui docker info | grep -i runtime per assicurarti che nvidia appaia nell'elenco dei runtime:
docker info | grep -i runtimeInstallazione delle immagini Docker di Ultralytics
Ultralytics offre diverse immagini Docker ottimizzate per varie piattaforme e casi d'uso:
- Dockerfile: immagine GPU, ideale per l'addestramento.
- Dockerfile-arm64: per architettura ARM64, adatta a dispositivi come Raspberry Pi.
- Dockerfile-cpu: versione solo CPU per inferenza e ambienti non GPU.
- Dockerfile-jetson-jetpack4: ottimizzata per dispositivi NVIDIA Jetson con NVIDIA JetPack 4.
- Dockerfile-jetson-jetpack5: ottimizzata per dispositivi NVIDIA Jetson con NVIDIA JetPack 5.
- Dockerfile-jetson-jetpack6: ottimizzata per dispositivi NVIDIA Jetson con NVIDIA JetPack 6.
- Dockerfile-jupyter: per sviluppo interattivo usando JupyterLab nel browser.
- Dockerfile-nvidia-arm64: per dispositivi NVIDIA ARM64 come Jetson AGX Thor e DGX Spark, che supportano JetPack 7.0 e DGX OS.
- Dockerfile-python: ambiente Python minimale per applicazioni leggere.
- Dockerfile-python-export: immagine Python minimale estesa con funzionalità di esportazione complete per la conversione di modelli YOLO.
- Dockerfile-conda: include Miniconda3 e il pacchetto Ultralytics installato tramite Conda.
- Dockerfile-export: immagine GPU con tutte le dipendenze dei formati di esportazione preinstallate per la conversione e il benchmarking dei modelli.
Per scaricare l'ultima immagine:
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $tEsecuzione di Ultralytics nel container Docker
Ecco come eseguire il container Docker di Ultralytics:
Utilizzando solo la CPU
# Run without GPU
sudo docker run -it --ipc=host $tUtilizzando le GPU
# Run with all GPUs
sudo docker run -it --ipc=host --runtime=nvidia --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --runtime=nvidia --gpus '"device=2,3"' $tIl flag -it assegna uno pseudo-TTY e mantiene stdin aperto, permettendoti di interagire con il container. Il flag --ipc=host abilita la condivisione dello spazio dei nomi IPC dell'host, essenziale per condividere la memoria tra i processi. Il flag --gpus consente al container di accedere alle GPU dell'host.
Nota sull'accessibilità dei file
Per lavorare con i file sulla tua macchina locale all'interno del container, puoi usare i volumi Docker:
# Mount a local directory into the container
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container $tSostituisci /path/on/host con il percorso della directory sulla tua macchina locale e /path/in/container con il percorso desiderato all'interno del container Docker.
Persistenza degli output di addestramento
Gli output di addestramento vengono salvati in /ultralytics/runs/<task>/<name>/ all'interno del container per impostazione predefinita. Senza montare una directory host, gli output vanno persi quando il container viene rimosso.
Per mantenere gli output di addestramento:
# 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/runsQuesto salva tutti gli output di addestramento in ./runs sulla tua macchina host.
Esegui applicazioni con interfaccia grafica (GUI) in un container Docker
Le seguenti istruzioni sono sperimentali. La condivisione di un socket X11 con un container Docker comporta potenziali rischi per la sicurezza. Pertanto, si consiglia di testare questa soluzione solo in un ambiente controllato. Per ulteriori informazioni, fai riferimento a queste risorse su come usare 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, è essenziale determinare quale server grafico stai utilizzando. Esegui questo comando per scoprirlo:
env | grep -E -i 'x11|xorg|wayland'La configurazione di un display server X11 o Wayland esula dallo scopo di questa guida. Se il comando sopra non restituisce nulla, dovrai iniziare assicurandoti che uno dei due funzioni sul tuo sistema prima di continuare.
Esecuzione di un container Docker con una GUI
Usa le GPU
Se stai utilizzando GPU, puoi aggiungere il flag --gpus all al comando.
Flag del runtime Docker
Se la tua installazione Docker non utilizza il runtime nvidia per impostazione predefinita, puoi aggiungere il flag --runtime=nvidia al comando.
Se stai utilizzando X11, puoi eseguire il seguente comando per consentire al container 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 $tQuesto comando imposta la variabile d'ambiente DISPLAY sul display dell'host, monta il socket X11 e mappa il file .Xauthority nel container. Il comando xhost +local:docker consente al container Docker di accedere al server X11.
Utilizzo di Docker con una GUI
Ora puoi visualizzare applicazioni grafiche all'interno del tuo container Docker. Ad esempio, puoi eseguire il seguente comando CLI per visualizzare le predizioni da un modello YOLO26:
yolo predict model=yolo26n.pt show=TrueTest
Un modo semplice per convalidare che il gruppo Docker abbia accesso al server X11 è eseguire un container con un programma GUI come xclock o xeyes. In alternativa, puoi anche installare questi programmi nel container Docker di Ultralytics per testare l'accesso al server X11 del tuo server grafico GNU-Linux. Se riscontri problemi, considera l'impostazione della variabile d'ambiente -e QT_DEBUG_PLUGINS=1. L'impostazione di questa variabile d'ambiente abilita l'output di informazioni di debug, aiutando nel processo di risoluzione dei problemi.
Quando hai finito con la GUI di Docker
In entrambi i casi, non dimenticare di revocare l'accesso dal gruppo Docker quando hai finito.
xhost -local:dockerVuoi visualizzare i risultati delle immagini direttamente nel terminale?
Fai riferimento alla seguente guida sulla visualizzazione dei risultati delle immagini usando un terminale
Ora sei pronto per utilizzare Ultralytics con Docker e sfruttarne le funzionalità. Per metodi di installazione alternativi, consulta la documentazione di avvio rapido di Ultralytics.
FAQ
Come configuro Ultralytics con Docker?
Per configurare Ultralytics con Docker, assicurati innanzitutto che Docker sia installato sul tuo sistema. Se hai una GPU NVIDIA, installa il NVIDIA Container Toolkit per abilitare il supporto GPU. Quindi, scarica l'ultima immagine Docker di Ultralytics da Docker Hub usando il seguente comando:
sudo docker pull ultralytics/ultralytics:latestPer passaggi dettagliati, fai riferimento alla nostra Guida rapida a Docker.
Quali sono i vantaggi dell'utilizzo delle immagini Docker di Ultralytics per i progetti di machine learning?
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 collaborare tra team, eseguire modelli su vari hardware e mantenere la riproducibilità. Per l'addestramento basato su GPU, Ultralytics fornisce immagini Docker ottimizzate come Dockerfile per l'uso generale della GPU e Dockerfile-jetson per dispositivi NVIDIA Jetson. Esplora Ultralytics Docker Hub per ulteriori dettagli.
Come posso eseguire Ultralytics YOLO in un container Docker con supporto GPU?
Per prima cosa, assicurati che il NVIDIA Container Toolkit sia installato e configurato. Quindi, usa il seguente comando per eseguire Ultralytics YOLO con supporto GPU:
sudo docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics/ultralytics:latest # all GPUsQuesto comando configura un container Docker con accesso alla GPU. Per ulteriori dettagli, consulta la Guida rapida a Docker.
Come visualizzo i risultati delle predizioni YOLO in un container Docker con un display server?
Per visualizzare i risultati delle predizioni YOLO con una GUI in un container Docker, devi consentire a Docker di accedere al tuo display server. Per i sistemi che eseguono 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:latestPer i sistemi che eseguono 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:latestUlteriori informazioni sono disponibili nella sezione Esegui applicazioni con interfaccia grafica (GUI) in un container Docker.
Posso montare directory locali nel container Docker di Ultralytics?
Sì, puoi montare directory locali nel container Docker di Ultralytics usando il flag -v:
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestSostituisci /path/on/host con la directory sulla tua macchina locale e /path/in/container con il percorso desiderato all'interno del container. Questa configurazione ti consente di lavorare con i tuoi file locali all'interno del container. Per ulteriori informazioni, fai riferimento alla sezione Nota sull'accessibilità dei file.