(model: LightningModule, data_module: LightningDataModule, config: DictConfig)
| 9 | |
| 10 | |
| 11 | def train(model: LightningModule, data_module: LightningDataModule, config: DictConfig): |
| 12 | seed_everything(config.seed) |
| 13 | params = config.train |
| 14 | |
| 15 | # define logger |
| 16 | wandb_logger = WandbLogger( |
| 17 | project=config.wandb.project, |
| 18 | group=config.wandb.group, |
| 19 | log_model=False, |
| 20 | offline=config.wandb.offline, |
| 21 | config=OmegaConf.to_container(config), |
| 22 | ) |
| 23 | |
| 24 | # define model checkpoint callback |
| 25 | checkpoint_callback = ModelCheckpointWithUpload( |
| 26 | dirpath=join(wandb_logger.experiment.dir, "checkpoints"), |
| 27 | filename="{epoch:02d}-val_loss={val/loss:.4f}", |
| 28 | monitor="val/loss", |
| 29 | every_n_epochs=params.save_every_epoch, |
| 30 | save_top_k=-1, |
| 31 | auto_insert_metric_name=False, |
| 32 | ) |
| 33 | # define early stopping callback |
| 34 | early_stopping_callback = EarlyStopping(patience=params.patience, monitor="val/loss", verbose=True, mode="min") |
| 35 | # define callback for printing intermediate result |
| 36 | print_epoch_result_callback = PrintEpochResultCallback(after_test=False) |
| 37 | # use gpu if it exists |
| 38 | gpu = 1 if torch.cuda.is_available() else None |
| 39 | # define learning rate logger |
| 40 | lr_logger = LearningRateMonitor("step") |
| 41 | # define progress bar callback |
| 42 | progress_bar = RichProgressBar(refresh_rate_per_second=config.progress_bar_refresh_rate) |
| 43 | trainer = Trainer( |
| 44 | max_epochs=params.n_epochs, |
| 45 | gradient_clip_val=params.clip_norm, |
| 46 | deterministic=True, |
| 47 | check_val_every_n_epoch=params.val_every_epoch, |
| 48 | log_every_n_steps=params.log_every_n_steps, |
| 49 | logger=wandb_logger, |
| 50 | gpus=gpu, |
| 51 | callbacks=[lr_logger, early_stopping_callback, checkpoint_callback, print_epoch_result_callback, progress_bar], |
| 52 | resume_from_checkpoint=config.get("checkpoint", None), |
| 53 | ) |
| 54 | |
| 55 | trainer.fit(model=model, datamodule=data_module) |
| 56 | trainer.test(datamodule=data_module, ckpt_path="best") |
no outgoing calls
no test coverage detected