Multi-GPU Ausbildung
📚 Diese Anleitung erklärt, wie man mehrere GPUs richtig einsetzt, um einen Datensatz mit YOLOv5 🚀 auf einem oder mehreren Rechnern zu trainieren.
Bevor Sie beginnen
Repo klonen und requirements.txt in einem Python>=3.8.0 Umgebung, einschließlich PyTorch>=1.8. Modelle und Datensätze werden automatisch von der neuestenVersion von YOLOv5 heruntergeladen.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
💡 ProTip! Docker Image wird für alle Multi-GPU Schulungen empfohlen. Siehe Docker-Schnellstart-Anleitung
💡 ProTip! torch.distributed.run
Ersetzt torch.distributed.launch
in PyTorch>=1.9. Siehe docs für Einzelheiten.
Ausbildung
Wählen Sie ein vorab trainiertes Modell aus, um mit dem Training zu beginnen. Hier wählen wir YOLOv5s, das kleinste und schnellste verfügbare Modell. In unserer README-Tabelle finden Sie einen vollständigen Vergleich aller Modelle. Wir werden dieses Modell mit Multi-GPU auf dem COCO-Datensatz trainieren.
Einzeln GPU
Multi-GPU DataParallel Mode (⚠️ nicht empfohlen)
Sie können die device
um mehrere GPUs im DataParallel-Modus zu verwenden.
Diese Methode ist langsam und beschleunigt das Training kaum im Vergleich zur Verwendung von nur 1 GPU.
Multi-GPU VerteilteDatenParallelmodus (✅ empfohlen)
Sie müssen Folgendes bestehen python -m torch.distributed.run --nproc_per_node
, gefolgt von den üblichen 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
gibt an, wie viele GPUs Sie verwenden möchten. Im obigen Beispiel sind es 2.
--batch
ist die gesamte Losgröße. Sie wird gleichmäßig auf jede GPU aufgeteilt. Im obigen Beispiel sind es 64/2=32 pro GPU.
Der obige Code wird GPUs verwenden 0... (N-1)
.
Spezielle GPUs verwenden (zum Erweitern klicken)
Sie können dies tun, indem Sie einfach `--device` gefolgt von Ihren spezifischen GPUs übergeben. Im folgenden Code verwenden wir zum Beispiel die GPUs 2 und 3.SyncBatchNorm verwenden (zum Erweitern klicken)
[SyncBatchNorm](https://pytorch.org/docs/master/generated/torch.nn.SyncBatchNorm.html) could increase [accuracy](https://www.ultralytics.com/glossary/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,Mehrere Maschinen verwenden (zum Erweitern klicken)
Dies ist **nur** für die Schulung Multiple GPU DistributedDataParallel verfügbar. Bevor wir fortfahren, vergewissern Sie sich, dass die Dateien auf allen Rechnern die gleichen sind, also Datensatz, Codebasis usw. Stellen Sie anschließend sicher, dass die Rechner miteinander kommunizieren können. Sie müssen einen Master-Rechner auswählen (der Rechner, mit dem die anderen kommunizieren sollen). Notiere seine Adresse (`master_addr`) und wähle einen Port (`master_port`). Für das folgende Beispiel verwende ich `master_addr = 192.168.1.1` und `master_port = 1234`. Um es zu verwenden, können Sie wie folgt vorgehen, wobei `G` die Anzahl der GPU pro Maschine ist, `N` die Anzahl der Maschinen und `R` die Maschinennummer von `0...(N-1)` ist. Nehmen wir an, ich habe zwei Rechner mit je zwei GPUs, dann wäre `G = 2`, `N = 2` und `R = 1` für die obigen Angaben. Das Training beginnt nicht vor alle N" Rechner sind angeschlossen. Die Ausgabe wird nur auf dem Master-Rechner angezeigt!Anmerkungen
- Die Unterstützung von Windows ist nicht getestet, Linux wird empfohlen.
--batch
muss ein Vielfaches der Anzahl der GPUs sein.- GPU 0 benötigt etwas mehr Speicher als die anderen GPUs, da sie die EMA verwaltet und für Checkpointing usw. zuständig ist.
- Wenn Sie
RuntimeError: Address already in use
Es könnte daran liegen, dass Sie mehrere Schulungen gleichzeitig durchführen. Um dies zu beheben, verwenden Sie einfach eine andere Portnummer, indem Sie--master_port
wie unten,
Ergebnisse
DDP-Profiling-Ergebnisse auf einer AWS EC2 P4d-Instanz mit 8x A100 SXM4-40GB für YOLOv5l für eine COCO-Epoche.
Profiling-Code
# 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
GPUs A100 |
Losgröße | CUDA_mem device0 (G) |
COCO Zug |
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 |
FAQ
Wenn ein Fehler auftritt, lesen Sie bitte zuerst die folgende Checkliste! (Das könnte Ihnen Zeit sparen)
Checkliste (zum Vergrößern anklicken)
- Haben Sie diesen Beitrag richtig gelesen?
- Haben Sie versucht, die Codebasis neu zu klonen? Der Code ändert sich täglich.
- Haben Sie versucht, nach Ihrem Fehler zu suchen? Vielleicht ist jemand in diesem oder einem anderen Repo bereits darauf gestoßen und hat die Lösung.
- Haben Sie alle oben aufgeführten Anforderungen installiert (einschließlich der korrekten Versionen von Python und Pytorch )?
- Haben Sie es in anderen Umgebungen versucht, die im Abschnitt "Umgebungen" unten aufgeführt sind?
- Haben Sie es mit einem anderen Datensatz wie coco128 oder coco2017 versucht? Das macht es einfacher, die Ursache zu finden.
Unterstützte Umgebungen
Ultralytics bietet eine Reihe gebrauchsfertiger Umgebungen, die jeweils mit wichtigen Abhängigkeiten vorinstalliert sind, z. B. CUDA, CUDNN, Python, und PyTorchvorinstalliert, um Ihre Projekte in Gang zu bringen.
- Kostenlose GPU Notizbücher:
- Google Wolke: GCP-Schnellstart-Anleitung
- Amazon: AWS Schnellstart-Anleitung
- Azure: AzureML-Schnellstart-Anleitung
- Docker: Docker-Schnellstart-Anleitung
Projektstatus
Dieses Abzeichen zeigt an, dass alle YOLOv5 GitHub Actions Continuous Integration (CI) Tests erfolgreich bestanden wurden. Diese CI-Tests überprüfen die Funktionalität und Leistung von YOLOv5 in verschiedenen Schlüsselbereichen: Training, Validierung, Inferenz, Export und Benchmarks. Sie gewährleisten einen konsistenten und zuverlässigen Betrieb unter macOS, Windows und Ubuntu, wobei die Tests alle 24 Stunden und bei jeder neuen Übertragung durchgeführt werden.
Kredite
Wir möchten uns bei @MagicFrogSJTU bedanken, der die ganze Arbeit gemacht hat, und bei @glenn-jocher, der uns auf unserem Weg begleitet hat.