如何禁用自动检查点加载

How to disable automatic checkpoint loading

我正在尝试 运行 对一组参数进行循环,我不想为每个参数创建一个新网络并让它学习几个时期。

目前我的代码是这样的:

def optimize_scale(self, epochs=5, comp_scale=100, scale_list=[1, 100]):
    trainer = pyli.Trainer(gpus=1, max_epochs=epochs)
    
    for scale in scale_list:
        test_model = CustomNN(num_layers=1, scale=scale, lr=1, pad=True, batch_size=1)
        trainer.fit(test_model)
        trainer.test(verbose=True)
        
        del test_model

scale_list 的第一个元素一切正常,网络学习了 5 个 epoch 并完成了测试。这一切都可以在控制台中看到。然而,对于 scale_list 的所有后续元素,它不起作用,因为旧网络未被覆盖,而是在调用 trainer.fit(model) 时自动加载旧检查点。在控制台中,这是通过以下方式指示的:

C:\Users\XXXX\AppData\Roaming\Python\Python39\site-packages\pytorch_lightning\callbacks\model_checkpoint.py:623: UserWarning:
Checkpoint directory D:\XXXX\src\lightning_logs\version_0\checkpoints exists and is not empty.
rank_zero_warn(f"Checkpoint directory {dirpath} exists and is not empty.")
train_size = 8   val_size = 1    test_size = 1
Restoring states from the checkpoint path at D:\XXXX\src\lightning_logs\version_0\checkpoints\epoch=4-step=39.ckpt
LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]
Loaded model weights from checkpoint at D:\XXXX\src\lightning_logs\version_0\checkpoints\epoch=4-step=39.ckpt

结果是第二次测试输出相同的结果,因为加载了旧网络的检查点,它已经完成了所有 5 个时期。我虽然添加 del test_model 可能有助于完全删除模型,但这没有用。

在我的搜索中,我发现了一些密切相关的问题,例如:https://github.com/PyTorchLightning/pytorch-lightning/issues/368。但是我没有设法解决我的问题。我认为这与应该覆盖旧网络的新网络具有相同的 name/version 并因此寻找相同的检查点这一事实有关。

如果有人知道或知道如何规避此问题,我将不胜感激。

我认为,在您的设置中,您想禁用 automatic checkpointing:

trainer = pyli.Trainer(gpus=1, max_epochs=epochs,enable_checkpointing=False)

您可能需要为每个训练课程明确保存一个检查点(使用不同的名称)运行。

您可以通过以下方式手动保存检查点:

trainer.save_checkpoint(f'checkpoint_for_scale_{scale}.pth')