|
|
@@ -522,10 +522,12 @@ def main(opt, callbacks=Callbacks()): |
|
|
|
# DDP mode |
|
|
|
device = select_device(opt.device, batch_size=opt.batch_size) |
|
|
|
if LOCAL_RANK != -1: |
|
|
|
msg = 'is not compatible with YOLOv5 Multi-GPU DDP training' |
|
|
|
assert not opt.image_weights, f'--image-weights {msg}' |
|
|
|
assert not opt.evolve, f'--evolve {msg}' |
|
|
|
assert opt.batch_size != -1, f'AutoBatch with --batch-size -1 {msg}, please pass a valid --batch-size' |
|
|
|
assert opt.batch_size % WORLD_SIZE == 0, f'--batch-size {opt.batch_size} must be multiple of WORLD_SIZE' |
|
|
|
assert torch.cuda.device_count() > LOCAL_RANK, 'insufficient CUDA devices for DDP command' |
|
|
|
assert opt.batch_size % WORLD_SIZE == 0, '--batch-size must be multiple of CUDA device count' |
|
|
|
assert not opt.image_weights, '--image-weights argument is not compatible with DDP training' |
|
|
|
assert not opt.evolve, '--evolve argument is not compatible with DDP training' |
|
|
|
torch.cuda.set_device(LOCAL_RANK) |
|
|
|
device = torch.device('cuda', LOCAL_RANK) |
|
|
|
dist.init_process_group(backend="nccl" if dist.is_nccl_available() else "gloo") |