(config,
model,
criterion,
data_loader,
optimizer,
epoch,
mixup_fn,
lr_scheduler,
amp_autocast=suppress,
loss_scaler=None,
model_ema=None)
| 401 | |
| 402 | |
| 403 | def train_one_epoch(config, |
| 404 | model, |
| 405 | criterion, |
| 406 | data_loader, |
| 407 | optimizer, |
| 408 | epoch, |
| 409 | mixup_fn, |
| 410 | lr_scheduler, |
| 411 | amp_autocast=suppress, |
| 412 | loss_scaler=None, |
| 413 | model_ema=None): |
| 414 | model.train() |
| 415 | optimizer.zero_grad() |
| 416 | |
| 417 | num_steps = len(data_loader) |
| 418 | batch_time = AverageMeter() |
| 419 | model_time = AverageMeter() |
| 420 | loss_meter = AverageMeter() |
| 421 | norm_meter = MyAverageMeter(300) |
| 422 | |
| 423 | start = time.time() |
| 424 | end = time.time() |
| 425 | |
| 426 | amp_type = torch.float16 if config.AMP_TYPE == 'float16' else torch.bfloat16 |
| 427 | for idx, (samples, targets) in enumerate(data_loader): |
| 428 | iter_begin_time = time.time() |
| 429 | samples = samples.cuda(non_blocking=True) |
| 430 | targets = targets.cuda(non_blocking=True) |
| 431 | |
| 432 | if mixup_fn is not None: |
| 433 | samples, targets = mixup_fn(samples, targets) |
| 434 | |
| 435 | if not obsolete_torch_version(TORCH_VERSION, |
| 436 | (1, 9)) and config.AMP_OPT_LEVEL != 'O0': |
| 437 | with amp_autocast(dtype=amp_type): |
| 438 | outputs = model(samples) |
| 439 | else: |
| 440 | with amp_autocast(): |
| 441 | outputs = model(samples) |
| 442 | |
| 443 | if config.TRAIN.ACCUMULATION_STEPS > 1: |
| 444 | if not obsolete_torch_version( |
| 445 | TORCH_VERSION, (1, 9)) and config.AMP_OPT_LEVEL != 'O0': |
| 446 | with amp_autocast(dtype=amp_type): |
| 447 | loss = criterion(outputs, targets) |
| 448 | loss = loss / config.TRAIN.ACCUMULATION_STEPS |
| 449 | else: |
| 450 | with amp_autocast(): |
| 451 | loss = criterion(outputs, targets) |
| 452 | loss = loss / config.TRAIN.ACCUMULATION_STEPS |
| 453 | if config.AMP_OPT_LEVEL != 'O0': |
| 454 | is_second_order = hasattr(optimizer, 'is_second_order') and optimizer.is_second_order |
| 455 | grad_norm = loss_scaler(loss, |
| 456 | optimizer, |
| 457 | clip_grad=config.TRAIN.CLIP_GRAD, |
| 458 | parameters=model.parameters(), |
| 459 | create_graph=is_second_order, |
| 460 | update_grad=(idx + 1) % config.TRAIN.ACCUMULATION_STEPS == 0) |
no test coverage detected