Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[🐛BUG] 断点resume将导致性能下降 #2126

Open
asinsss opened this issue Dec 9, 2024 · 1 comment
Open

[🐛BUG] 断点resume将导致性能下降 #2126

asinsss opened this issue Dec 9, 2024 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@asinsss
Copy link

asinsss commented Dec 9, 2024

描述这个 bug
当保存checkpoint并中断训练后,使用resume函数加载checkpoint并重启训练将会损害最终性能,例如LDiffRec的ndcg@10将由0.045降0.028。
导致这一问题的原因目前已发现两点,首先是缺乏恢复训练的逻辑,重启训练将导致train data从第一批次重新开始,当我们将train data与epoch对齐解决了这一点后,又发现中断重启会导致LDiffRec的encoder部分参数更新出错,继而得到更高的loss并造成最终的性能瓶颈。

如何复现
复现这个 bug 的步骤:

  1. 在某次epoch结束后调用_save_checkpoint函数保存checkpoint。
  2. 在quick_start.py的run_recbole函数中,在trainer.fit调用前添加检测checkpoint并调用resume函数的代码。
  3. 在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
  4. 重新启动训练,观察log输出的评估结果。

预期
希望可以修复上述问题,并提供完整的resume逻辑,例如指定checkpoint文件以提示是否调用resume函数。
另外我注意到Time and Memory Costs中没有DiffRec等新模型的条目,希望后续可以添加以供参考。

实验环境:

  • 操作系统:Linux
  • RecBole 版本 0.1.2
  • Python 版本 3.8
  • PyTorch 版本 2.0
  • Cuda 版本 11.8
@asinsss asinsss added the bug Something isn't working label Dec 9, 2024
@BishopLiu
Copy link
Collaborator

@asinsss 感谢你指出这一问题,我们会在下一版本中进行修复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants