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

Function train_epoch

classification/main_deepspeed.py:225–278  ·  view source on GitHub ↗
(config, model, criterion, data_loader, optimizer, epoch, mixup_fn, lr_scheduler, model_ema=None)

Source from the content-addressed store, hash-verified

223
224
225def train_epoch(config, model, criterion, data_loader, optimizer, epoch, mixup_fn, lr_scheduler, model_ema=None):
226 model.train()
227
228 num_steps = len(data_loader)
229 batch_time = AverageMeter()
230 model_time = AverageMeter()
231 loss_meter = AverageMeter()
232 norm_meter = MyAverageMeter(300)
233
234 start = time.time()
235 end = time.time()
236
237 for idx, (samples, targets) in enumerate(data_loader):
238 iter_begin_time = time.time()
239 samples = samples.cuda(non_blocking=True)
240 targets = targets.cuda(non_blocking=True)
241
242 if mixup_fn is not None:
243 samples, targets = mixup_fn(samples, targets)
244
245 outputs = model(samples)
246 loss = criterion(outputs, targets)
247
248 model.backward(loss)
249 model.step()
250
251 if model_ema is not None:
252 model_ema(model)
253
254 if (idx + 1) % config.TRAIN.ACCUMULATION_STEPS == 0:
255 lr_scheduler.step_update(epoch * num_steps + idx)
256
257 torch.cuda.synchronize()
258 loss_meter.update(loss.item(), targets.size(0))
259 norm_meter.update(optimizer._global_grad_norm)
260 batch_time.update(time.time() - end)
261 model_time.update(time.time() - iter_begin_time)
262 end = time.time()
263
264 if idx % config.PRINT_FREQ == 0:
265 lr = optimizer.param_groups[0]['lr']
266 memory_used = torch.cuda.max_memory_allocated() / (1024.0 * 1024.0)
267 etas = batch_time.avg * (num_steps - idx)
268 logger.info(
269 f'Train: [{epoch}/{config.TRAIN.EPOCHS}][{idx}/{num_steps}]\t'
270 f'eta {datetime.timedelta(seconds=int(etas))} lr {lr:.6f}\t'
271 f'time {batch_time.val:.4f} ({batch_time.avg:.4f})\t'
272 f'model_time {model_time.val:.4f} ({model_time.avg:.4f})\t'
273 f'loss {loss_meter.val:.4f} ({loss_meter.avg:.4f})\t'
274 f'grad_norm {norm_meter.val:.4f} ({norm_meter.avg:.4f}/{norm_meter.var:.4f})\t'
275 f'mem {memory_used:.0f}MB')
276
277 epoch_time = time.time() - start
278 logger.info(f'EPOCH {epoch} training takes {datetime.timedelta(seconds=int(epoch_time))}')
279
280
281@torch.no_grad()

Callers 1

trainFunction · 0.70

Calls 3

updateMethod · 0.95
MyAverageMeterClass · 0.90
backwardMethod · 0.45

Tested by

no test coverage detected