如何禁用自动检查点加载
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')
我正在尝试 运行 对一组参数进行循环,我不想为每个参数创建一个新网络并让它学习几个时期。
目前我的代码是这样的:
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')