-
Notifications
You must be signed in to change notification settings - Fork 717
Open
Labels
bugSomething isn't workingSomething isn't working
Description
描述这个 bug
当保存checkpoint并中断训练后,使用resume函数加载checkpoint并重启训练将会损害最终性能,例如LDiffRec的ndcg@10将由0.045降0.028。
导致这一问题的原因目前已发现两点,首先是缺乏恢复训练的逻辑,重启训练将导致train data从第一批次重新开始,当我们将train data与epoch对齐解决了这一点后,又发现中断重启会导致LDiffRec的encoder部分参数更新出错,继而得到更高的loss并造成最终的性能瓶颈。
如何复现
复现这个 bug 的步骤:
- 在某次epoch结束后调用_save_checkpoint函数保存checkpoint。
- 在quick_start.py的run_recbole函数中,在trainer.fit调用前添加检测checkpoint并调用resume函数的代码。
- 在trainer.py的fit函数的epoch循环中添加如下代码以对齐train data的批次和epoch_idx(可选)
for epoch_idx in range(self.start_epoch, self.epochs): for i in range(self.start_epoch): # skip train_data epochs for batch in train_data: # skip train_data batchs pass - 重新启动训练,观察log输出的评估结果。
预期
希望可以修复上述问题,并提供完整的resume逻辑,例如指定checkpoint文件以提示是否调用resume函数。
另外我注意到Time and Memory Costs中没有DiffRec等新模型的条目,希望后续可以添加以供参考。
实验环境:
- 操作系统:Linux
- RecBole 版本 0.1.2
- Python 版本 3.8
- PyTorch 版本 2.0
- Cuda 版本 11.8
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working