Link to this sectionGuida rapida di 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 vantaggiosa 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.
Link to this sectionCosa 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 all'interno del container
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
Link to this sectionPrerequisiti#
- 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 una GPU NVIDIA e che i driver NVIDIA siano installati.
- Se utilizzi dispositivi NVIDIA Jetson, assicurati di avere installato la versione corretta di JetPack. Consulta la guida NVIDIA Jetson per ulteriori dettagli.
Link to this sectionConfigurazione di Docker con supporto NVIDIA#
Innanzitutto, verifica che i driver NVIDIA siano installati correttamente eseguendo:
nvidia-smiLink to this sectionInstallazione del 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 dockerLink to this sectionVerifica il Runtime NVIDIA con Docker#
Esegui docker info | grep -i runtime per assicurarti che nvidia appaia nell'elenco dei runtime:
docker info | grep -i runtimeLink to this sectionInstallazione 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 senza GPU.
- Dockerfile-jetson-jetpack4: Ottimizzato per dispositivi NVIDIA Jetson che eseguono NVIDIA JetPack 4.
- Dockerfile-jetson-jetpack5: Ottimizzato per dispositivi NVIDIA Jetson che eseguono NVIDIA JetPack 5.
- Dockerfile-jetson-jetpack6: Ottimizzato per dispositivi NVIDIA Jetson che eseguono 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, con supporto per 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 per i formati di esportazione preinstallate per conversione di modelli e benchmarking.
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 $tLink to this sectionEsecuzione di Ultralytics in un container Docker#
Ecco come eseguire il container Docker di Ultralytics:
Link to this sectionUtilizzando solo la CPU#
# Run without GPU
sudo docker run -it --ipc=host $tLink to this sectionUtilizzando 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 un 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.
Link to this sectionNota 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.
Link to this sectionMantenimento degli output di addestramento#
Gli output di addestramento vengono salvati per impostazione predefinita in /ultralytics/runs/<task>/<name>/ all'interno del container. Senza montare una directory dell'host, gli output vengono 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.
Link to this sectionEsegui applicazioni con interfaccia grafica (GUI) in un container Docker#
Docker è 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 non rientra nell'ambito di questa guida. Se il comando sopra non restituisce nulla, dovrai iniziare assicurandoti che uno dei due funzioni sul tuo sistema prima di continuare.
Link to this sectionEsecuzione di un container Docker con una GUI#
Usa le GPU
Se stai usando le GPU, puoi aggiungere il flag --gpus all al comando.
Flag del runtime Docker
Se la tua installazione di Docker non usa il runtime nvidia per impostazione predefinita, puoi aggiungere il flag --runtime=nvidia al comando.
Se stai usando X11, puoi eseguire il comando seguente 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.
Link to this sectionUtilizzo 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, prendi in considerazione 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.
Link to this sectionQuando 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 su come visualizzare i risultati delle immagini usando un terminale
Ora sei pronto a usare Ultralytics con Docker e a sfruttare le sue funzionalità. Per metodi di installazione alternativi, consulta la documentazione di avvio rapido di Ultralytics.
Link to this sectionFAQ#
Link to this sectionCome 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, consulta la nostra Guida rapida di Docker.
Link to this sectionQuali sono i vantaggi dell'utilizzo delle immagini Docker di Ultralytics per progetti di machine learning?#
L'utilizzo delle immagini Docker di Ultralytics garantisce un ambiente coerente su diverse macchine, 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 i dispositivi NVIDIA Jetson. Esplora Ultralytics Docker Hub per ulteriori dettagli.
Link to this sectionCome posso eseguire Ultralytics YOLO in un container Docker con supporto GPU?#
Innanzitutto, 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, vedi la Guida rapida di Docker.
Link to this sectionCome 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:latestMaggiori informazioni si possono trovare nella sezione Esegui applicazioni con interfaccia grafica (GUI) in un container Docker.
Link to this sectionPosso 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 maggiori informazioni, consulta la sezione Nota sull'accessibilità dei file.