I don’t understand why I have put it out of the if-else statement:

Because, loading existing checkpoint (model, optimizer, trainer, lr_scheduler) does not setup event handlers as lr scheduler. Yes, Checkpoint.load_objects(to_load=to_load, checkpoint=checkpoint) only setups the states for all those objects.