ÇokluGPU Eğitim
📚 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 tavsiye edilir. Bakınız Docker Hızlı Başlangıç Kılavuzu
💡 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 bir karşılaştırması için README tablomuza bakın. Bu modeli COCO veri kümesi üzerinde Multi-GPU ile eğiteceğiz.
Tek kişilik GPU
ÇokluGPU DataParalel Mod (⚠️ önerilmez)
Artırabilirsiniz device
DataParallel modunda Çoklu GPU'ları kullanmak için.
Bu yöntem yavaştır ve sadece 1 GPU kullanmaya kıyasla eğitimi ancak hızlandırır.
ÇokluGPU DağıtılmışVeriParalel Mod (✅ önerilir)
Geçmeniz gerekecek python -m torch.distributed.run --nproc_per_node
ardı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 parti boyutudur. Her bir GPU adresine 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.SyncBatchNorm kullanın (genişletmek için tıklayın)
[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,Birden fazla makine kullanın (genişletmek için tıklayın)
Bu **sadece** Multiple GPU DistributedDataParallel 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 seçmeniz gerekecek (diğerlerinin konuşacağı makine). 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 gibi yapabilirsiniz, 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 kullanacaktır.
- Eğer alırsan
RuntimeError: Address already in use
Bunun 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,
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.
Desteklenen Ortamlar
Ultralytics gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sağlar. CUDA, CUDNN, Pythonve PyTorchProjelerinizi başlatmak için.
- Ücretsiz GPU Not Defterleri:
- Google Bulut: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Hızlı Başlangıç Kılavuzu
- Azure: AzureML Hızlı Başlangıç Kılavuzu
- Docker: Docker Hızlı Başlangıç Kılavuzu
Proje Durumu
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.