Skip to content

Commit

Permalink
[Fix] Avoid infinite GPU waiting in dist training (open-mmlab#6501)
Browse files Browse the repository at this point in the history
* [open-mmlab#6495] fix infinite GPU waiting in dist training

* print log_vars keys in assertion msg

* linting issue
  • Loading branch information
fingertap authored and ZwwWayne committed Jul 18, 2022
1 parent 9d85075 commit de71fd8
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions mmdet/models/detectors/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,16 @@ def _parse_losses(self, losses):
loss = sum(_value for _key, _value in log_vars.items()
if 'loss' in _key)

# If the loss_vars has different length, GPUs will wait infinitely
if dist.is_available() and dist.is_initialized():
log_var_length = torch.tensor(len(log_vars), device=loss.device)
dist.all_reduce(log_var_length)
message = (f'rank {dist.get_rank()}' +
f' len(log_vars): {len(log_vars)}' + ' keys: ' +
','.join(log_vars.keys()))
assert log_var_length == len(log_vars) * dist.get_world_size(), \
'loss log variables are different across GPUs!\n' + message

log_vars['loss'] = loss
for loss_name, loss_value in log_vars.items():
# reduce loss when distributed training
Expand Down

0 comments on commit de71fd8

Please sign in to comment.