─░├žeri─če ge├ž

├çoklu GPU E─čitimi

­čôÜ Bu k─▒lavuz, bir veri k├╝mesini YOLOv5 ­čÜÇ ile tek veya birden fazla makinede e─čitmek i├žin birden fazla GPU'nun nas─▒l do─čru ┼čekilde kullan─▒laca─č─▒n─▒ a├ž─▒klamaktad─▒r.

Ba┼člamadan ├ľnce

Repoyu klonlay─▒n ve requirements.txt dosyas─▒n─▒ bir Python>=3.8.0 ortam─▒ dahil olmak ├╝zere PyTorch>=1.8. Modeller ve veri setleri 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

­čĺí ProTip! Docker G├Âr├╝nt├╝s├╝ t├╝m Multi-GPU e─čitimleri i├žin ├Ânerilir. Bak─▒n─▒z Docker H─▒zl─▒ Ba┼člang─▒├ž K─▒lavuzu Docker ├çeker

­čĺí ProTip! torch.distributed.run yerine ge├žer torch.distributed.launch i├žinde PyTorch>=1.9. Bkz. dok├╝manlar detaylar i├žin.

E─čitim

E─čitime ba┼člamak i├žin ├Ânceden e─čitilmi┼č bir model se├žin. Burada, mevcut en k├╝├ž├╝k ve en h─▒zl─▒ model olan YOLOv5s'i se├žiyoruz. T├╝m modellerin tam kar┼č─▒la┼čt─▒rmas─▒ i├žin README tablomuza bak─▒n. Bu modeli COCO veri k├╝mesi ├╝zerinde Multi-GPU ile e─čitece─čiz.

YOLOv5 Modeller

Tek GPU

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

Art─▒rabilirsiniz device DataParallel modunda ├çoklu GPU'lar─▒ kullanmak i├žin.

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

Bu y├Ântem yava┼čt─▒r ve sadece 1 GPU kullanmaya k─▒yasla e─čitimi zar zor h─▒zland─▒r─▒r.

Ge├žmeniz gerekecek python -m torch.distributed.run --nproc_per_nodeard─▒ndan ola─čan tart─▒┼čmalar gelir.

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 ka├ž GPU kullanmak istedi─činizi belirtir. Yukar─▒daki ├Ârnekte bu say─▒ 2'dir. --batch toplam y─▒─č─▒n boyutudur. Her GPU'ya e┼čit olarak b├Âl├╝necektir. Yukar─▒daki ├Ârnekte, GPU ba┼č─▒na 64/2=32'dir.

Yukar─▒daki kod GPU'lar─▒ kullanacakt─▒r 0... (N-1).

Belirli GPU'lar─▒ kullan─▒n (geni┼čletmek i├žin t─▒klay─▒n) Bunu sadece `--device` ve ard─▒ndan belirli GPU'lar─▒n─▒z─▒ ge├žerek yapabilirsiniz. ├ľrne─čin, a┼ča─č─▒daki kodda `2,3` GPU'lar─▒n─▒ kullanaca─č─▒z.
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3
SyncBatchNorm kullan─▒n (geni┼čletmek i├žin t─▒klay─▒n) [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,
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bn
Birden fazla makine kullan─▒n (geni┼čletmek i├žin t─▒klay─▒n) Bu **sadece** ├çoklu GPU Da─č─▒t─▒lm─▒┼čVeriParalel e─čitimi i├žin kullan─▒labilir. Devam etmeden ├Ânce, t├╝m makinelerdeki dosyalar─▒n ayn─▒ oldu─čundan emin olun, veri k├╝mesi, kod taban─▒ vb. Daha sonra, makinelerin birbirleriyle ileti┼čim kurabildi─činden emin olun. Bir ana makine (di─čerlerinin konu┼čaca─č─▒ makine) se├žmeniz gerekecektir. Adresini not edin (`master_addr`) ve bir port se├žin (`master_port`). A┼ča─č─▒daki ├Ârnek i├žin `master_addr = 192.168.1.1` ve `master_port = 1234` kullanaca─č─▒m. Kullanmak i├žin a┼ča─č─▒daki i┼člemleri yapabilirsiniz,
# 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` `0...(N-1)` aras─▒ndaki makine numaras─▒d─▒r. Diyelim ki her biri iki GPU'ya sahip iki makinem var, yukar─▒dakiler i├žin `G = 2` , `N = 2` ve `R = 1` olacakt─▒r. E─čitim ┼ču tarihe kadar ba┼člamayacakt─▒r hepsi N` makine ba─čl─▒. ├ç─▒kt─▒ sadece ana makinede g├Âsterilecektir!

Notlar

  • Windows deste─či test edilmemi┼čtir, Linux ├Ânerilir.
  • --batch GPU say─▒s─▒n─▒n bir kat─▒ olmal─▒d─▒r.
  • GPU 0, EMA'y─▒ korudu─ču ve kontrol noktas─▒ndan vb. sorumlu oldu─ču i├žin di─čer GPU'lardan biraz daha fazla bellek alacakt─▒r.
  • E─čer al─▒rsan RuntimeError: Address already in useBunun nedeni ayn─▒ anda birden fazla e─čitim y├╝r├╝t├╝yor olman─▒z olabilir. Bunu d├╝zeltmek i├žin, a┼ča─č─▒dakileri ekleyerek farkl─▒ bir ba─člant─▒ noktas─▒ numaras─▒ kullan─▒n --master_port A┼ča─č─▒daki gibi,
python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...

Sonu├žlar

YOLOv5l i├žin 1 COCO d├Ânemi i├žin 8x A100 SXM4-40GB ile AWS EC2 P4d ├Ârne─činde DDP profilleme sonu├žlar─▒.

Profil olu┼čturma kodu
# 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'lar
A100
parti boyutu CUDA_mem
device0 (G)
COCO
tren
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

SSS

Bir hata olu┼čursa, l├╝tfen ├Ânce a┼ča─č─▒daki kontrol listesini okuyun! (Size zaman kazand─▒rabilir)

Kontrol Listesi (geni┼čletmek i├žin t─▒klay─▒n)
  • Bu yaz─▒y─▒ do─čru d├╝r├╝st okudunuz mu?
  • Kod taban─▒n─▒ yeniden klonlamay─▒ denediniz mi? Kod her g├╝n de─či┼čiyor.
  • Hatan─▒z─▒ ara┼čt─▒rmay─▒ denediniz mi? Birisi bu depoda veya ba┼čka bir yerde daha ├Ânce kar┼č─▒la┼čm─▒┼č ve ├ž├Âz├╝me sahip olabilir.
  • ├ťstte listelenen t├╝m gereksinimleri (do─čru Python ve Pytorch s├╝r├╝mleri dahil) y├╝klediniz mi?
  • A┼ča─č─▒daki "Ortamlar" b├Âl├╝m├╝nde listelenen di─čer ortamlarda denediniz mi?
  • coco128 veya coco2017 gibi ba┼čka bir veri k├╝mesi ile denediniz mi? Temel nedeni bulmay─▒ kolayla┼čt─▒racakt─▒r.
Yukar─▒dakilerin hepsinden ge├žtiyseniz, ┼čablonu izleyerek m├╝mk├╝n oldu─čunca fazla ayr─▒nt─▒ vererek bir Sorun bildirmekten ├žekinmeyin.

Desteklenen Ortamlar

Ultralytics her biri CUDA, CUDNN gibi temel ba─č─▒ml─▒l─▒klarla ├Ânceden y├╝klenmi┼č bir dizi kullan─▒ma haz─▒r ortam sa─člar, Pythonve PyTorchProjelerinizi ba┼člatmak i├žin.

Proje 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 'un 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. Her 24 saatte bir ve her yeni i┼člemde yap─▒lan testlerle macOS, Windows ve Ubuntu ├╝zerinde tutarl─▒ ve g├╝venilir ├žal─▒┼čma sa─člarlar.

Krediler

T├╝m a─č─▒r i┼čleri yapan @MagicFrogSJTU'ya ve yol boyunca bize rehberlik eden @glenn-jocher'a te┼čekk├╝r ederiz.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (4), Burhan-Q (1)

Yorumlar