MCPcopy Index your code
hub / github.com/OpenGVLab/InternVL / train_one_epoch

Function train_one_epoch

classification/main.py:403–535  ·  view source on GitHub ↗
(config,
                    model,
                    criterion,
                    data_loader,
                    optimizer,
                    epoch,
                    mixup_fn,
                    lr_scheduler,
                    amp_autocast=suppress,
                    loss_scaler=None,
                    model_ema=None)

Source from the content-addressed store, hash-verified

401
402
403def 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)

Callers 1

mainFunction · 0.85

Calls 5

updateMethod · 0.95
MyAverageMeterClass · 0.90
get_grad_normFunction · 0.90
obsolete_torch_versionFunction · 0.85
backwardMethod · 0.45

Tested by

no test coverage detected