Multi-GPU-training
📚 Deze handleiding legt uit hoe je op de juiste manier meerdere GPU's kunt gebruiken om een dataset te trainen met YOLOv5 🚀 op één of meerdere machines.
Voordat je begint
Kloon repo en installeer requirements.txt in een Python>=3.8.0 omgeving, inclusief PyTorch>=1.8. Modellen en datasets worden automatisch gedownload van de nieuwste YOLOv5 release.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
ProTip! Docker afbeelding wordt aanbevolen voor alle Multi-GPU trainingen. Zie Docker snelstartgids
ProTip! torch.distributed.run
vervangt torch.distributed.launch
in PyTorch>=1.9. Zie docs voor meer informatie.
Training
Selecteer een voorgetraind model om mee te gaan trainen. Hier selecteren we YOLOv5s, het kleinste en snelste model dat beschikbaar is. Zie onze README tabel voor een volledige vergelijking van alle modellen. We trainen dit model met Multi-GPU op de COCO dataset.
Enkele GPU
Multi-GPU DataParallel modus (⚠️ niet aanbevolen)
Je kunt de device
om meerdere GPU's te gebruiken in DataParallel modus.
Deze methode is langzaam en versnelt de training nauwelijks in vergelijking met het gebruik van slechts 1 GPU.
Multi-GPU modus DistributedDataParallel (✅ aanbevolen)
Je moet slagen voor python -m torch.distributed.run --nproc_per_node
gevolgd door de gebruikelijke argumenten.
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
Geeft aan hoeveel GPU's je wilt gebruiken. In het bovenstaande voorbeeld zijn dat er 2.
--batch
is de totale batchgrootte. Deze wordt gelijk verdeeld over elke GPU. In het bovenstaande voorbeeld is het 64/2=32 per GPU.
De bovenstaande code gebruikt GPU's 0... (N-1)
.
Specifieke GPU's gebruiken (klik om uit te breiden)
Je kunt dit doen door simpelweg `--device` door te geven gevolgd door je specifieke GPU's. In de onderstaande code gebruiken we bijvoorbeeld GPU's `2,3`.SyncBatchNorm gebruiken (klik om uit te breiden)
[SyncBatchNorm](https://pytorch.org/docs/master/generated/torch.nn.SyncBatchNorm.html) could increase accuracy for multiple gpu training, however, it will slow down training by a significant factor. It is **only** available for Multiple GPU DistributedDataParallel training. It is best used when the batch-size on **each** GPU is small (<= 8). To use SyncBatchNorm, simple pass `--sync-bn` to the command like below,Meerdere machines gebruiken (klik om uit te breiden)
Dit is **alleen** beschikbaar voor Multiple GPU DistributedDataParallel training. Controleer voordat we verder gaan of de bestanden op alle machines hetzelfde zijn, dataset, codebase, enz. Zorg er daarna voor dat de machines met elkaar kunnen communiceren. Je moet een mastermachine kiezen (de machine waarmee de anderen zullen praten). Noteer het adres (`master_addr`) en kies een poort (`master_port`). Ik zal `master_addr = 192.168.1.1` en `master_port = 1234` gebruiken voor het onderstaande voorbeeld. Om het te gebruiken, kun je het volgende doen, waarbij `G` het aantal GPU's per machine is, `N` het aantal machines en `R` het machinenummer van `0...(N-1)`. Stel dat ik twee machines heb met elk twee GPU's, dan is `G = 2` , `N = 2` en `R = 1` voor het bovenstaande. De training begint pas als alle Er zijn `N` machines aangesloten. Uitvoer wordt alleen op de mastermachine getoond!Opmerkingen
- Ondersteuning voor Windows is niet getest, Linux wordt aanbevolen.
--batch
moet een veelvoud zijn van het aantal GPU's.- GPU 0 neemt iets meer geheugen in beslag dan de andere GPU's omdat deze EMA onderhoudt en verantwoordelijk is voor checkpointing en dergelijke.
- Als je
RuntimeError: Address already in use
Het kan ook komen doordat je meerdere trainingen tegelijk uitvoert. Om dit op te lossen kun je een ander poortnummer gebruiken door het volgende toe te voegen--master_port
zoals hieronder,
Resultaten
DDP profileringsresultaten op een AWS EC2 P4d instance met 8x A100 SXM4-40GB voor YOLOv5l voor 1 COCO epoch.
Code profileren
# prepare
t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --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's A100 |
partijgrootte | CUDA_mem apparaat0 (G) |
COCO trein |
COCO val |
---|---|---|---|---|
1x | 16 | 26 GB | 20:39 | 0:55 |
2x | 32 | 26 GB | 11:43 | 0:57 |
4x | 64 | 26 GB | 5:57 | 0:55 |
8x | 128 | 26 GB | 3:09 | 0:57 |
FAQ
Als er een fout optreedt, lees dan eerst de checklist hieronder! (Het kan je tijd besparen)
Checklist (klik om uit te breiden)
- Heb je deze post goed gelezen?
- Heb je geprobeerd de codebase opnieuw te klonen? De code verandert dagelijks.
- Heb je geprobeerd naar je fout te zoeken? Misschien is iemand dit al tegengekomen in deze repo of in een andere repo en heeft hij de oplossing.
- Heb je alle vereisten geïnstalleerd die bovenaan staan (inclusief de juiste Python en Pytorch versies)?
- Heb je het geprobeerd in andere omgevingen die worden genoemd in het gedeelte "Omgevingen" hieronder?
- Heb je het geprobeerd met een andere dataset zoals coco128 of coco2017? Dat maakt het makkelijker om de hoofdoorzaak te vinden.
Ondersteunde omgevingen
Ultralytics biedt een reeks kant-en-klare omgevingen, elk vooraf geïnstalleerd met essentiële afhankelijkheden zoals CUDA, CUDNN, Python, en PyTorchom je projecten een kickstart te geven.
- Gratis GPU notitieboeken:
- Google Cloud: GCP snelstartgids
- Amazon: AWS Snelstartgids
- Azure: AzureML snelstartgids
- Docker: Docker snelstartgids
Projectstatus
Deze badge geeft aan dat alle YOLOv5 GitHub Actions Continuous Integration (CI) tests met succes zijn doorstaan. Deze CI-tests controleren rigoureus de functionaliteit en prestaties van YOLOv5 op verschillende belangrijke aspecten: training, validatie, inferentie, export en benchmarks. Ze zorgen voor een consistente en betrouwbare werking op macOS, Windows en Ubuntu, met tests die elke 24 uur en bij elke nieuwe commit worden uitgevoerd.
Credits
We willen @MagicFrogSJTU bedanken, die al het zware werk heeft gedaan, en @glenn-jocher voor de begeleiding.