सामग्री पर जाएं

मल्टी-जीपीयू प्रशिक्षण

📚 यह मार्गदर्शिका बताती है कि डेटासेट को प्रशिक्षित करने के लिए कई GPU का ठीक से उपयोग कैसे करें YOLOv5 🚀 एकल या एकाधिक मशीन पर।

शुरू करने से पहले

रेपो क्लोन करें और आवश्यकताओं को स्थापित करें.txt एक Python> = 3.8.0 पर्यावरण, सहित PyTorch>=1.8मॉडल और डेटासेट नवीनतम से स्वचालित रूप से डाउनलोड होते हैं YOLOv5 रिलीज

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

💡 प्रो टिप! डॉकर छवि सभी मल्टी-जीपीयू प्रशिक्षणों के लिए अनुशंसित है। देखना डॉकर क्विकस्टार्ट गाइड डॉकर पुल

💡 प्रो टिप! torch.distributed.run बदलता torch.distributed.launch में PyTorch>=1.9. देखना डॉक्स विवरण के लिए।

प्रशिक्षण

प्रशिक्षण शुरू करने के लिए एक पूर्व-प्रशिक्षित मॉडल का चयन करें। यहां हम उपलब्ध सबसे छोटे और सबसे तेज़ मॉडल YOLOv5s का चयन करते हैं। सभी मॉडलों की पूरी तुलना के लिए हमारी README तालिका देखें। हम इस मॉडल को COCO डेटासेट पर मल्टी-GPU के साथ प्रशिक्षित करेंगे।

YOLOv5 मॉडल

सिंगल जीपीयू

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

आप बढ़ा सकते हैं device DataParallel मोड में एकाधिक GPU का उपयोग करने के लिए।

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

यह विधि धीमी है और केवल 1 GPU का उपयोग करने की तुलना में प्रशिक्षण को मुश्किल से गति देती है।

आपको पास होना होगा python -m torch.distributed.run --nproc_per_node, सामान्य तर्कों के बाद।

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 निर्दिष्ट करता है कि आप कितने GPU का उपयोग करना चाहते हैं। ऊपर दिए गए उदाहरण में, यह 2 है। --batch कुल बैच-आकार है। इसे प्रत्येक GPU में समान रूप से विभाजित किया जाएगा। ऊपर दिए गए उदाहरण में, यह 64/2 = 32 प्रति GPU है।

उपरोक्त कोड GPU का उपयोग करेगा 0... (N-1).

विशिष्ट GPU का उपयोग करें (विस्तार करने के लिए क्लिक करें) आप अपने विशिष्ट GPU के बाद केवल '--device' पास करके ऐसा कर सकते हैं। उदाहरण के लिए, नीचे दिए गए कोड में, हम GPU '2,3' का उपयोग करेंगे।
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3
SyncBatchNorm का उपयोग करें (विस्तार करने के लिए क्लिक करें) [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
एकाधिक मशीनों का उपयोग करें (विस्तार करने के लिए क्लिक करें) यह **केवल** एकाधिक GPU वितरित डेटासमानांतर प्रशिक्षण के लिए उपलब्ध है। इससे पहले कि हम जारी रखें, सुनिश्चित करें कि सभी मशीनों पर फाइलें समान हैं, डेटासेट, कोडबेस, आदि। बाद में, सुनिश्चित करें कि मशीनें एक दूसरे से संवाद कर सकती हैं। आपको एक मास्टर मशीन (वह मशीन जिससे दूसरे बात करेंगे) चुनना होगा। इसका पता ('master_addr') नोट करें और एक पोर्ट ('master_port') चुनें। मैं नीचे दिए गए उदाहरण के लिए 'master_addr = 192.168.1.1' और 'master_port = 1234' का उपयोग करूँगा। इसका उपयोग करने के लिए, आप निम्न के रूप में कर सकते हैं,
# 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 ''
जहां 'G' प्रति मशीन GPU की संख्या है, 'N' मशीनों की संख्या है, और 'R' '0' से मशीन नंबर है... (एन-1)'। मान लीजिए कि मेरे पास दो जीपीयू के साथ दो मशीनें हैं, यह उपरोक्त के लिए 'जी = 2', 'एन = 2', और 'आर = 1' होगा। प्रशिक्षण तब तक शुरू नहीं होगा सब 'एन' मशीनें जुड़ी हुई हैं। आउटपुट केवल मास्टर मशीन पर दिखाया जाएगा!

नोट्स

  • विंडोज समर्थन का परीक्षण नहीं किया गया है, लिनक्स की सिफारिश की जाती है।
  • --batch GPU की संख्या का गुणज होना चाहिए।
  • GPU 0 अन्य GPU की तुलना में थोड़ा अधिक मेमोरी लेगा क्योंकि यह EMA को बनाए रखता है और चेकपॉइंटिंग आदि के लिए जिम्मेदार है।
  • यदि आपको मिलता है RuntimeError: Address already in use, ऐसा इसलिए हो सकता है क्योंकि आप एक समय में कई प्रशिक्षण चला रहे हैं। इसे ठीक करने के लिए, बस जोड़कर एक अलग पोर्ट नंबर का उपयोग करें --master_port नीचे की तरह,
python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...

परिणाम

DDP प्रोफाइलिंग परिणाम AWS EC2 P4d उदाहरण पर 8x A100 SXM4-40GB के साथ YOLOv5l के लिए 1 COCO युग के लिए।

प्रोफाइलिंग कोड
# 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
जीपीयू
ए100
बैच का आकार CUDA_mem
डिवाइस0 (जी)
कोको
रेलगाड़ी
कोको
वैल
1x 16 26जीबी 20:39 0:55
2x 32 26जीबी 11:43 0:57
4x 64 26जीबी 5:57 0:55
8x 128 26जीबी 3:09 0:57

अक्सर पूछे जाने वाले प्रश्न

यदि कोई त्रुटि होती है, तो कृपया पहले नीचे दी गई चेकलिस्ट पढ़ें! (यह आपका समय बचा सकता है)

चेकलिस्ट (विस्तार करने के लिए क्लिक करें)
  • क्या आपने इस पोस्ट को ठीक से पढ़ा है?
  • क्या आपने कोडबेस को फिर से क्लोन करने की कोशिश की है? कोड प्रतिदिन बदलता है
  • क्या आपने अपनी त्रुटि खोजने की कोशिश की है? हो सकता है कि किसी ने पहले ही इस रेपो में या किसी अन्य में इसका सामना किया हो और उसके पास समाधान हो।
  • क्या आपने शीर्ष पर सूचीबद्ध सभी आवश्यकताओं को स्थापित किया है (सही सहित) Python और Pytorch संस्करण)?
  • क्या आपने नीचे "वातावरण" अनुभाग में सूचीबद्ध अन्य परिवेशों में प्रयास किया है?
  • क्या आपने coco128 या coco2017 जैसे किसी अन्य डेटासेट के साथ प्रयास किया है? इससे मूल कारण का पता लगाना आसान हो जाएगा।
यदि आप उपरोक्त सभी के माध्यम से गए हैं, तो टेम्पलेट का पालन करते हुए जितना संभव हो उतना विवरण देकर एक मुद्दा उठाने के लिए स्वतंत्र महसूस करें।

समर्थित वातावरण

Ultralytics उपयोग के लिए तैयार वातावरण की एक श्रृंखला प्रदान करता है, प्रत्येक आवश्यक निर्भरताओं जैसे CUDA, CUDNN के साथ पूर्व-स्थापित, Pythonऔर PyTorch, अपनी परियोजनाओं को किकस्टार्ट करने के लिए।

परियोजना की स्थिति

YOLOv5 सीआई

यह बैज इंगित करता है कि सभी YOLOv5 GitHub क्रियाएँ सतत एकीकरण (CI) परीक्षण सफलतापूर्वक पास हो रहे हैं। ये सीआई परीक्षण सख्ती से कार्यक्षमता और प्रदर्शन की जांच करते हैं YOLOv5 विभिन्न प्रमुख पहलुओं के पार: प्रशिक्षण, सत्यापन, अनुमान, निर्यात और बेंचमार्क। वे macOS, Windows और Ubuntu पर लगातार और विश्वसनीय संचालन सुनिश्चित करते हैं, हर 24 घंटे में और प्रत्येक नई प्रतिबद्धता पर परीक्षण किए जाते हैं।

क्रेडिट्स

हम @MagicFrogSJTU को धन्यवाद देना चाहते हैं, जिन्होंने सभी भारी भारोत्तोलन किए, और रास्ते में हमारा मार्गदर्शन करने के लिए @glenn-जोचर।



2023-11-12 बनाया गया, अपडेट किया गया 2023-12-03
लेखक: ग्लेन-जोचर (2)

टिप्पणियाँ