Meet YOLO26: next-gen vision AI.

Link to this sectionYOLOv5 ile Çoklu GPU Eğitimi#

Bu rehber, YOLOv5'i tek bir makinede veya birden fazla makine üzerinde birden çok GPU ile nasıl eğiteceğini açıklar.

Link to this sectionBaşlamadan Önce#

Depoyu kopyala ve requirements.txt dosyasını Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere yükle. Modeller ve veri kümeleri, en son YOLOv5 sürümünden otomatik olarak indirilir.

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
Docker Kullan

Tüm çoklu GPU eğitim çalışmaları için Ultralytics Docker imajı önerilir. Docker Başlangıç Kılavuzuna göz at. Docker Pulls

PyTorch >= 1.9

torch.distributed.run replaces torch.distributed.launch in PyTorch >= 1.9. See the PyTorch distributed documentation for details.

Link to this sectionEğitim#

Eğitime başlamak için önceden eğitilmiş bir model seç. Burada küçük ve hızlı bir model olan YOLOv5s modelini seçiyoruz. Tüm modellerin tam karşılaştırması için README tablosuna bak. Bu modeli COCO veri kümesi üzerinde Çoklu GPU ile eğiteceğiz.

YOLOv5 Models

Link to this sectionTek GPU#

python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0

Link to this sectionÇoklu GPU DataParallel Modu (⚠️ önerilmez)#

DataParallel modunu etkinleştirmek için --device parametresine birden fazla GPU kimliği gönder:

python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1

DataParallel yavaştır ve tek bir GPU kullanmaya kıyasla eğitimi neredeyse hiç hızlandırmaz.

Link to this sectionÇoklu GPU DistributedDataParallel Modu (✅ önerilen)#

Eğitim komutunun önüne python -m torch.distributed.run --nproc_per_node ekle ve ardından her zamanki argümanları gönder:

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, kullanılacak GPU sayısıdır. Yukarıdaki örnekte bu değer 2'dir.
  • --batch, toplam batch boyutudur ve her GPU'ya eşit olarak dağıtılır. Yukarıdaki örnekte, GPU başına 64 / 2 = 32 olur.

Yukarıdaki komut 0...(N-1) GPU'larını kullanır. Bunun yerine cihaz görünürlüğünü ortam değişkenleri aracılığıyla kontrol etmek istersen, başlatmadan önce CUDA_VISIBLE_DEVICES=2,3 (veya başka bir liste) ayarla.

Use specific GPUs (click to expand)

--device parametresinden sonra belirli GPU kimliklerini gönder. Aşağıdaki örnek 2,3 GPU'larını kullanır.

python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3
Use SyncBatchNorm (click to expand)

SyncBatchNorm, çoklu GPU eğitimi için doğruluğu artırabilir ancak eğitimi önemli ölçüde yavaşlatır. Yalnızca çoklu GPU DistributedDataParallel eğitimi için kullanılabilir.

En iyi her GPU'daki batch boyutu küçük (<= 8) olduğunda kullanılır.

SyncBatchNorm'u etkinleştirmek için --sync-bn gönder:

python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bn
Use Multiple machines (click to expand)

Bu özellik yalnızca çoklu GPU DistributedDataParallel eğitimi için mevcuttur.

Devam etmeden önce veri kümesinin, kod tabanının ve diğer tüm bağımlılıkların tüm makinelerde eşleştiğinden emin ol, ardından makinelerin ağ üzerinde birbirine ulaşabildiğini doğrula.

Bir ana makine seç (diğerlerinin bağlanacağı makine), adresini (master_addr) not et ve bir bağlantı noktası (master_port) belirle. Aşağıdaki örnek master_addr = 192.168.1.1 ve master_port = 1234 kullanır.

Ardından çalıştır:

# 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 ''

burada G makine başına GPU sayısı, N makine sayısı ve R ise 0...(N-1) aralığındaki makine derecesidir. Örneğin, ikişer GPU'lu iki makine ile G = 2, N = 2 olarak ayarla ve ikinci makinede R = 1 değerini kullan.

Eğitim tüm N makine bağlanana kadar başlamaz. Çıktı yalnızca ana makinede gösterilir.

Link to this sectionNotlar#

  • Windows desteği test edilmemiştir; Linux önerilir.

  • --batch değeri GPU sayısının bir katı olmalıdır.

  • GPU 0, EMA'yı koruduğu ve kontrol noktası işlemlerini yönettiği için diğerlerinden biraz daha fazla bellek kullanır.

  • RuntimeError: Address already in use hatası alırsan, bu genellikle birden fazla eğitim sürecinin aynı bağlantı noktasını kullandığı anlamına gelir. --master_port ile farklı bir bağlantı noktası belirt:

    python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...

Link to this sectionSonuçlar#

8x A100 SXM4-40GB içeren bir AWS EC2 P4d örneğinde YOLOv5l için 1 COCO dönemi üzerinden DDP profil oluşturma sonuçları.

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'lar
A100
batch-sizeCUDA_mem
cihaz0 (G)
COCO
eğitim
COCO
doğrulama
1x1626GB20:390:55
2x3226GB11:430:57
4x6426GB5:570:55
8x12826GB3:090:57

Sonuçlarda gösterildiği gibi, çoklu GPU ile DistributedDataParallel kullanmak, eğitim hızında neredeyse doğrusal bir ölçeklendirme sağlar. 8 GPU ile eğitim, cihaz başına aynı bellek kullanımını korurken tek bir GPU'ya göre yaklaşık 6,5 kat daha hızlı tamamlanır.

Link to this sectionSSS#

Bir sorun açmadan önce aşağıdaki kontrol listesini oku — genellikle zaman kazandırır.

Checklist (click to expand)
  • Bu rehberi baştan sona okudun mu?
  • Kod tabanını yeniden kopyaladın mı? Kod günlük olarak değişir.
  • Hata mesajını arattın mı? Başka biri aynı sorunla karşılaşmış ve bir çözüm paylaşmış olabilir.
  • Tüm gereksinimleri (doğru Python ve PyTorch sürümleri dahil) yükledin mi?
  • Aşağıda listelenen desteklenen ortamlardan birini denedin mi?
  • Kök nedeni belirlemek için coco128 veya coco2017 gibi daha küçük bir veri kümesi denedin mi?

Yukarıdakilerin tümü sağlandıysa, şablonu takip ederek mümkün olduğunca çok ayrıntıyla bir Sorun (Issue) aç.

Link to this sectionDesteklenen Ortamlar#

Ultralytics, projelerine hızlı bir başlangıç yapman için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklü olduğu, kullanıma hazır çeşitli ortamlar sağlar.

Link to this sectionProje Durumu#

YOLOv5 CI

Bu rozet, tüm YOLOv5 GitHub Actions Sürekli Entegrasyon (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5'in işlevselliğini ve performansını çeşitli temel yönlerden titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışmayı garanti eder; testler her 24 saatte bir ve her yeni commit yapıldığında gerçekleştirilir.

Link to this sectionKatkıda Bulunanlar#

Tüm ağır işleri yapan @MagicFrogSJTU'ya ve yol boyunca bize rehberlik eden @glenn-jocher'a teşekkür ederiz.

Link to this sectionAyrıca Bakınız#

Yorumlar