(config, accelerator: Accelerator)
| 299 | |
| 300 | |
| 301 | def train(config, accelerator: Accelerator): |
| 302 | _, _, _, training_dataloader, validate_dataloader, _, mixup_fn = build_loader2(config) |
| 303 | model = build_model(config) |
| 304 | optimizer = build_optimizer(config, model) |
| 305 | criterion = build_criterion(config) |
| 306 | |
| 307 | model, optimizer, training_dataloader, validate_dataloader = accelerator.prepare( |
| 308 | model, optimizer, training_dataloader, validate_dataloader) |
| 309 | |
| 310 | effective_update_steps_per_epoch = len(training_dataloader) // config.TRAIN.ACCUMULATION_STEPS |
| 311 | lr_scheduler = build_scheduler(config, optimizer, effective_update_steps_per_epoch) |
| 312 | |
| 313 | try: |
| 314 | model.register_comm_hook(state=None, hook=fp16_compress_hook) |
| 315 | logger.info('using fp16_compress_hook!') |
| 316 | except: |
| 317 | logger.info('cannot register fp16_compress_hook!') |
| 318 | |
| 319 | max_acc = load_checkpoint_if_needed(accelerator, config, lr_scheduler) |
| 320 | |
| 321 | logger.info(f'Created model:{config.MODEL.TYPE}/{config.MODEL.NAME}') |
| 322 | logger.info(str(model)) |
| 323 | logger.info('Effective Optimizer Steps: {}'.format(effective_update_steps_per_epoch)) |
| 324 | logger.info('Start training') |
| 325 | logger.info('Max accuracy: {}'.format(max_acc)) |
| 326 | log_model_statistic(accelerator.unwrap_model(model)) |
| 327 | |
| 328 | for epoch in range(config.TRAIN.START_EPOCH, config.TRAIN.EPOCHS): |
| 329 | train_epoch(model=model, optimizer=optimizer, data_loader=training_dataloader, |
| 330 | scheduler=lr_scheduler, criterion=criterion, mixup_fn=mixup_fn, |
| 331 | accelerator=accelerator, epoch=epoch, config=config) |
| 332 | acc = eval_epoch(config=config, data_loader=validate_dataloader, model=model, |
| 333 | accelerator=accelerator) |
| 334 | |
| 335 | accelerator.wait_for_everyone() |
| 336 | if acc > max_acc: |
| 337 | max_acc = acc |
| 338 | save_checkpoint(os.path.join(config.OUTPUT, 'best'), accelerator, epoch, max_acc, config, lr_scheduler) |
| 339 | logger.info(f'Max Acc@1 {max_acc:.3f}') |
| 340 | save_checkpoint(os.path.join(config.OUTPUT, 'last'), accelerator, epoch, max_acc, config, lr_scheduler) |
| 341 | |
| 342 | |
| 343 | def main(): |
no test coverage detected