Đa- GPU Đào tạo
📚 Hướng dẫn này giải thích cách sử dụng đúng nhiều GPU để đào tạo một tập dữ liệu với YOLOv5 🚀 trên một hoặc nhiều máy.
Trước khi bạn bắt đầu
Sao chép kho lưu trữ và cài đặt requirements.txt trong môi trường Python >=3.8.0 , bao gồm PyTorch >=1.8 . Các mô hình và tập dữ liệu tự động tải xuống từ phiên bản mới nhất YOLOv5 giải phóng .
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
💡 Mẹo chuyên nghiệp! Hình ảnh Docker được khuyến nghị cho tất cả Multi- GPU đào tạo. Xem Hướng dẫn khởi động nhanh Docker
💡 Mẹo chuyên nghiệp! torch.distributed.run
thay thế torch.distributed.launch
TRONG PyTorch >=1.9. Nhìn thấy tài liệu để biết thêm chi tiết.
Đào tạo
Chọn một mô hình được đào tạo trước để bắt đầu đào tạo. Ở đây chúng tôi chọn YOLOv5s , mô hình nhỏ nhất và nhanh nhất hiện có. Xem bảng README của chúng tôi để so sánh đầy đủ tất cả các mô hình. Chúng tôi sẽ đào tạo mô hình này với Multi- GPU trên tập dữ liệu COCO .
Đơn GPU
Đa- GPU Chế độ DataParallel (⚠️ không khuyến khích)
Bạn có thể tăng device
để sử dụng nhiều GPU ở chế độ DataParallel.
Phương pháp này chậm và hầu như không tăng tốc độ luyện tập so với việc chỉ sử dụng 1 GPU .
Đa- GPU Chế độ DistributedDataParallel (✅ khuyến nghị)
Bạn sẽ phải vượt qua python -m torch.distributed.run --nproc_per_node
, theo sau là những lập luận thông thường.
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
chỉ rõ số lượng GPU bạn muốn sử dụng. Trong ví dụ trên, đó là 2.
--batch
là tổng kích thước lô. Nó sẽ được chia đều cho mỗi GPU . Trong ví dụ trên, nó là 64/2=32 phần trăm GPU .
Mã ở trên sẽ sử dụng GPU 0... (N-1)
.
Sử dụng GPU cụ thể (nhấp để mở rộng)
Bạn có thể thực hiện điều này bằng cách chỉ cần truyền `--device` theo sau là GPU cụ thể của bạn. Ví dụ, trong mã bên dưới, chúng ta sẽ sử dụng GPU `2,3`.Sử dụng SyncBatchNorm (nhấp để mở rộng)
[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,Sử dụng nhiều máy (nhấp để mở rộng)
Điều này **chỉ** khả dụng cho Nhiều GPU Đào tạo DistributedDataParallel. Trước khi tiếp tục, hãy đảm bảo các tệp trên tất cả các máy đều giống nhau, tập dữ liệu, cơ sở mã, v.v. Sau đó, hãy đảm bảo các máy có thể giao tiếp với nhau. Bạn sẽ phải chọn một máy chủ (máy mà các máy khác sẽ giao tiếp). Ghi lại địa chỉ của máy đó (`master_addr`) và chọn một cổng (`master_port`). Tôi sẽ sử dụng `master_addr = 192.168.1.1` và `master_port = 1234` cho ví dụ bên dưới. Để sử dụng, bạn có thể thực hiện như sau, trong đó `G` là số GPU trên mỗi máy, `N` là số máy, và `R` là số máy từ `0...(N-1)`. Giả sử tôi có hai máy với hai GPU, thì sẽ là `G = 2`, `N = 2`, và `R = 1` cho các trường hợp trên. Đào tạo sẽ không bắt đầu cho đến khi tất cả `N` máy được kết nối. Đầu ra sẽ chỉ được hiển thị trên máy chính!Ghi chú
- Chưa kiểm tra khả năng hỗ trợ của Windows, khuyến khích sử dụng Linux.
--batch
phải là bội số của số GPU.- GPU 0 sẽ chiếm nhiều bộ nhớ hơn các GPU khác vì nó duy trì EMA và chịu trách nhiệm kiểm tra điểm, v.v.
- Nếu bạn nhận được
RuntimeError: Address already in use
, có thể là do bạn đang chạy nhiều buổi đào tạo cùng một lúc. Để khắc phục điều này, chỉ cần sử dụng một số cổng khác bằng cách thêm--master_port
như bên dưới,
Kết quả
Kết quả phân tích DDP trên phiên bản AWS EC2 P4d với 8x A100 SXM4-40GB cho YOLOv5l trong 1 kỷ nguyên COCO.
Mã hồ sơ
# 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 A100 |
kích thước lô | CUDA _tôi thiết bị0 (G) |
COCO xe lửa |
COCO giá trị |
---|---|---|---|---|
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 |
CÂU HỎI THƯỜNG GẶP
Nếu xảy ra lỗi, vui lòng đọc danh sách kiểm tra bên dưới trước! (Điều này có thể tiết kiệm thời gian của bạn)
Danh sách kiểm tra (nhấp để mở rộng)
- Bạn đã đọc kỹ bài viết này chưa?
- Bạn đã thử sao chép lại cơ sở mã chưa? Mã thay đổi hàng ngày .
- Bạn đã thử tìm kiếm lỗi của mình chưa? Có thể ai đó đã gặp lỗi này trong repo này hoặc repo khác và có giải pháp.
- Bạn đã cài đặt tất cả các yêu cầu được liệt kê ở trên chưa (bao gồm cả yêu cầu chính xác) Python Và Pytorch phiên bản)?
- Bạn đã thử ở những môi trường khác được liệt kê trong phần "Môi trường" bên dưới chưa?
- Bạn đã thử với tập dữ liệu khác như coco128 hoặc coco2017 chưa? Nó sẽ giúp tìm ra nguyên nhân gốc rễ dễ dàng hơn.
Môi trường được hỗ trợ
Ultralytics cung cấp nhiều môi trường sẵn sàng sử dụng, mỗi môi trường đều được cài đặt sẵn các thành phần phụ thuộc cần thiết như CUDA , CUDNN , Python và PyTorch để khởi động dự án của bạn.
- Miễn phí GPU Sổ tay:
- Google Cloud : Hướng dẫn bắt đầu nhanh GCP
- Amazon : Hướng dẫn bắt đầu nhanh AWS
- Azure : Hướng dẫn bắt đầu nhanh AzureML
- Người lái tàu: Hướng dẫn khởi động nhanh Docker
Tình trạng dự án
Huy hiệu này cho biết tất cả các thử nghiệm Tích hợp liên tục (CI) YOLOv5 GitHub Actions đều vượt qua thành công. Các thử nghiệm CI này kiểm tra nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên nhiều khía cạnh chính: đào tạo , xác thực , suy luận , xuất và chuẩn . Chúng đảm bảo hoạt động nhất quán và đáng tin cậy trên macOS, Windows và Ubuntu, với các bài kiểm tra được tiến hành sau mỗi 24 giờ và sau mỗi lần cam kết mới.
Tín dụng
Chúng tôi muốn cảm ơn @MagicFrogSJTU, người đã đảm nhiệm mọi công việc khó khăn, và @glenn-jocher đã hướng dẫn chúng tôi trong suốt chặng đường.