for _ in range(start_step, train_steps):
try:
self.train_step(self.data_iterator)
except StopIteration:
logger.info(
"epoch:%s Dataloader finished with drop_last %s",
epoch,
config.dataloader.drop_last,
)
break
self.on_epoch_end()
self.state.epoch = epoch + 1
print_device_mem_info(f"VRAM usage after epoch {epoch + 1}")
self.data_iterator.stop()
self.data_iterator = None
finally:
# ExitStack runs every callback even when an earlier cleanup raises.
with ExitStack() as cleanup:
cleanup.callback(self.destroy_distributed)