Link to this sectionAddestramento Multi-GPU con YOLOv5#
Questa guida spiega come addestrare YOLOv5 con più GPU su una singola macchina o su più macchine.
Link to this sectionPrima di iniziare#
Clona il repository e installa requirements.txt in un ambiente Python>=3.8.0, incluso PyTorch>=1.8. I modelli e i dataset vengono scaricati automaticamente dall'ultima release di YOLOv5.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installL'immagine Docker di Ultralytics è consigliata per tutte le sessioni di addestramento multi-GPU. Consulta la Guida Rapida Docker.
torch.distributed.run sostituisce torch.distributed.launch in PyTorch >= 1.9. Vedi la documentazione distribuita di PyTorch per i dettagli.
Link to this sectionAddestramento#
Seleziona un modello preaddestrato da cui iniziare l'addestramento. Qui selezioniamo YOLOv5s, un modello piccolo e veloce. Consulta la tabella nel nostro README per un confronto completo di tutti i modelli. Addestreremo questo modello in Multi-GPU sul dataset COCO.

Link to this sectionSingola GPU#
python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0Link to this sectionModalità Multi-GPU DataParallel (⚠️ non consigliata)#
Passa più ID GPU a --device per abilitare la modalità DataParallel:
python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1DataParallel è lento e velocizza a malapena l'addestramento rispetto all'uso di una singola GPU.
Link to this sectionModalità Multi-GPU DistributedDataParallel (✅ consigliata)#
Preponi al comando di addestramento python -m torch.distributed.run --nproc_per_node, quindi passa gli argomenti consueti:
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1--nproc_per_nodeè il numero di GPU da utilizzare. Nell'esempio precedente, è2.--batchè la dimensione totale del batch, divisa equamente tra ogni GPU. Nell'esempio precedente, questo equivale a64 / 2 = 32per GPU.
Il comando precedente utilizza le GPU 0...(N-1). Per controllare la visibilità del dispositivo tramite variabili d'ambiente, imposta CUDA_VISIBLE_DEVICES=2,3 (o qualsiasi altra lista) prima di eseguire il lancio.
Use specific GPUs (click to expand)
Passa --device seguito dagli ID specifici delle GPU. L'esempio seguente utilizza le GPU 2,3.
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3Use SyncBatchNorm (click to expand)
SyncBatchNorm può aumentare l'accuratezza per l'addestramento multi-GPU, ma rallenta notevolmente l'addestramento. È disponibile solo per l'addestramento multi-GPU DistributedDataParallel.
Da utilizzare preferibilmente quando la dimensione del batch su ogni GPU è piccola (<= 8).
Per abilitare SyncBatchNorm, passa --sync-bn:
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bnUse Multiple machines (click to expand)
Questo è disponibile solo per l'addestramento multi-GPU DistributedDataParallel.
Prima di continuare, assicurati che il dataset, la base di codice e qualsiasi altra dipendenza corrispondano su tutte le macchine, quindi verifica che le macchine possano raggiungersi a vicenda sulla rete.
Scegli una macchina master (quella a cui si connetteranno le altre), annota il suo indirizzo (master_addr) e scegli una porta (master_port). L'esempio sotto utilizza master_addr = 192.168.1.1 e master_port = 1234.
Quindi esegui:
# On master machine 0
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank 0 --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''# On machine R
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank R --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''dove G è il numero di GPU per macchina, N è il numero di macchine e R è il rango della macchina in 0...(N-1). Ad esempio, con due macchine e due GPU ciascuna, imposta G = 2, N = 2 e R = 1 sulla seconda macchina.
L'addestramento non inizia finché tutte le N macchine non sono collegate. L'output viene mostrato solo sulla macchina master.
Link to this sectionNote#
-
Il supporto per Windows non è testato; si consiglia Linux.
-
--batchdeve essere un multiplo del numero di GPU. -
La GPU 0 utilizza leggermente più memoria delle altre perché mantiene l'EMA e gestisce il checkpointing.
-
Se ricevi
RuntimeError: Address already in use, solitamente significa che più sessioni di addestramento stanno utilizzando la stessa porta. Specifica una porta diversa con--master_port:python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...
Link to this sectionRisultati#
Risultati del profiling DDP su un'istanza AWS EC2 P4d con 8x A100 SXM4-40GB per YOLOv5l per 1 epoca COCO.
Profiling code
# prepare
t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --runtime=nvidia --ipc=host --gpus all -v "$(pwd)"/coco:/usr/src/coco $t
pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
cd .. && rm -rf app && git clone https://github.com/ultralytics/yolov5 -b master app && cd app
cp data/coco.yaml data/coco_profile.yaml
# profile
python train.py --batch-size 16 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0
python -m torch.distributed.run --nproc_per_node 2 train.py --batch-size 32 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1
python -m torch.distributed.run --nproc_per_node 4 train.py --batch-size 64 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3
python -m torch.distributed.run --nproc_per_node 8 train.py --batch-size 128 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3,4,5,6,7| GPU A100 | batch-size | CUDA_mem device0 (G) | COCO train | COCO val |
|---|---|---|---|---|
| 1x | 16 | 26GB | 20:39 | 0:55 |
| 2x | 32 | 26GB | 11:43 | 0:57 |
| 4x | 64 | 26GB | 5:57 | 0:55 |
| 8x | 128 | 26GB | 3:09 | 0:57 |
Come mostrato nei risultati, l'utilizzo di DistributedDataParallel con più GPU offre uno scaling quasi lineare nella velocità di addestramento. Con 8 GPU, l'addestramento viene completato circa 6,5 volte più velocemente rispetto a una singola GPU, mantenendo lo stesso utilizzo di memoria per dispositivo.
Link to this sectionFAQ#
Consulta la lista di controllo qui sotto prima di aprire un issue: spesso fa risparmiare tempo.
Checklist (click to expand)
- Hai letto questa guida dall'inizio alla fine?
- Hai rieseguito il clone della base di codice? Il codice cambia quotidianamente.
- Hai cercato il messaggio di errore? Qualcun altro potrebbe aver già riscontrato lo stesso problema e condiviso una soluzione.
- Hai installato tutti i requisiti (incluse le versioni corrette di Python e PyTorch)?
- Hai provato uno degli ambienti supportati elencati di seguito?
- Hai provato un dataset più piccolo come
coco128ococo2017per isolare la causa principale?
Se tutto quanto sopra è verificato, apri un Issue con quanti più dettagli possibili, seguendo il template.
Link to this sectionAmbienti supportati#
Ultralytics fornisce una serie di ambienti pronti all'uso, ciascuno preinstallato con le dipendenze essenziali come CUDA, CUDNN, Python e PyTorch, per dare il via ai tuoi progetti.
- Notebook GPU Gratuiti:
- Google Cloud: Guida Rapida GCP
- Amazon: Guida Rapida AWS
- Azure: Guida Rapida AzureML
- Docker: Guida Rapida Docker
Link to this sectionStato del progetto#
Questo badge indica che tutti i test di Continuous Integration (CI) di YOLOv5 GitHub Actions vengono superati con successo. Questi test CI controllano rigorosamente la funzionalità e le prestazioni di YOLOv5 attraverso vari aspetti chiave: addestramento, validazione, inferenza, esportazione e benchmark. Garantiscono un funzionamento coerente e affidabile su macOS, Windows e Ubuntu, con test condotti ogni 24 ore e ad ogni nuovo commit.
Link to this sectionCrediti#
Vorremmo ringraziare @MagicFrogSJTU, che ha svolto tutto il lavoro pesante, e @glenn-jocher per averci guidato lungo il percorso.
Link to this sectionVedi anche#
- Modalità Train - Scopri come addestrare modelli YOLO con Ultralytics
- Ottimizzazione degli Iperparametri - Ottimizza le prestazioni del tuo modello
- Guida Rapida Docker - Configura il tuo ambiente Docker per l'addestramento