| | |
| | | grad_clip: float |
| | | grad_clip_type: float |
| | | log_interval: Optional[int] |
| | | no_forward_run: bool |
| | | use_tensorboard: bool |
| | | use_wandb: bool |
| | | # no_forward_run: bool |
| | | # use_tensorboard: bool |
| | | # use_wandb: bool |
| | | output_dir: Union[Path, str] |
| | | max_epoch: int |
| | | max_update: int |
| | | seed: int |
| | | sharded_ddp: bool |
| | | # sharded_ddp: bool |
| | | patience: Optional[int] |
| | | keep_nbest_models: Union[int, List[int]] |
| | | nbest_averaging_interval: int |
| | |
| | | best_model_criterion: Sequence[Sequence[str]] |
| | | val_scheduler_criterion: Sequence[str] |
| | | unused_parameters: bool |
| | | wandb_model_log_interval: int |
| | | # wandb_model_log_interval: int |
| | | use_pai: bool |
| | | oss_bucket: Union[oss2.Bucket, None] |
| | | |
| | |
| | | schedulers: Sequence[Optional[AbsScheduler]], |
| | | train_dataloader: AbsIterFactory, |
| | | valid_dataloader: AbsIterFactory, |
| | | trainer_options, |
| | | distributed_option: DistributedOption): |
| | | self.trainer_options = self.build_options(args) |
| | | self.model = model |
| | |
| | | self.schedulers = schedulers |
| | | self.train_dataloader = train_dataloader |
| | | self.valid_dataloader = valid_dataloader |
| | | self.trainer_options = trainer_options |
| | | self.distributed_option = distributed_option |
| | | |
| | | def build_options(self, args: argparse.Namespace) -> TrainerOptions: |
| | |
| | | """Reserved for future development of another Trainer""" |
| | | pass |
| | | |
| | | @staticmethod |
| | | def resume( |
| | | checkpoint: Union[str, Path], |
| | | model: torch.nn.Module, |
| | | reporter: Reporter, |
| | | optimizers: Sequence[torch.optim.Optimizer], |
| | | schedulers: Sequence[Optional[AbsScheduler]], |
| | | scaler: Optional[GradScaler], |
| | | ngpu: int = 0, |
| | | ): |
| | | def resume(self, |
| | | checkpoint: Union[str, Path], |
| | | model: torch.nn.Module, |
| | | reporter: Reporter, |
| | | optimizers: Sequence[torch.optim.Optimizer], |
| | | schedulers: Sequence[Optional[AbsScheduler]], |
| | | scaler: Optional[GradScaler], |
| | | ngpu: int = 0, |
| | | ): |
| | | states = torch.load( |
| | | checkpoint, |
| | | map_location=f"cuda:{torch.cuda.current_device()}" if ngpu > 0 else "cpu", |
| | |
| | | if distributed: |
| | | iterator_stop.fill_(1) |
| | | torch.distributed.all_reduce(iterator_stop, ReduceOp.SUM) |
| | | |
| | | |
| | | def build_trainer( |
| | | args, |
| | | model: FunASRModel, |
| | | optimizers: Sequence[torch.optim.Optimizer], |
| | | schedulers: Sequence[Optional[AbsScheduler]], |
| | | train_dataloader: AbsIterFactory, |
| | | valid_dataloader: AbsIterFactory, |
| | | distributed_option: DistributedOption |
| | | ): |
| | | trainer = Trainer( |
| | | args=args, |
| | | model=model, |
| | | optimizers=optimizers, |
| | | schedulers=schedulers, |
| | | train_dataloader=train_dataloader, |
| | | valid_dataloader=valid_dataloader, |
| | | distributed_option=distributed_option |
| | | ) |
| | | return trainer |