Skip to content
Discussion options

You must be logged in to vote

这个日志的根因可以确定:你当时使用的 2024-02-05 版本中,DynamicBatchLocalShuffleSampler 丢掉了最后一个未满 batch,所以 DataLoader 报告有 1 个 batch,但实际一个也没有产出。 这不是 CUDA 卡住,也不是模型已经完成了一步训练。

从日志可以直接串起来:

  1. num of samplers: 2 表示 JSONL 读到了 2 条样本。
  2. 配置里是 batch_type: examplebatch_size: 6000,因此 6000 表示 6000 条样本,两条数据只会组成一个未满的尾 batch。
  3. 问题发生时的 sampler 的 __len__() 会返回 1,但 __iter__() 只在下一个样本装不下时才 yield batch,循环结束后没有再 yield 尾 batch(当时的源码)。所以这里是 len(dataloader) == 1,实际迭代次数却是 0。
  4. 当时 trainer 用这个 len 创建 total=1 的进度条,但训练循环没有收到 batch,optimizer.step() 从未执行;epoch 末仍调用 scheduler.step(),于是正好出现日志里的 “lr_scheduler.step() before optimizer.step()” 警告(训练循环epoch 末 scheduler)。这些 model.pt.ep* 只是按 epoch 保存,不能证明参数更新过。

另外,你设置了 max_epoch=5,日志却跑了 Epoch 1 到 6,也是当时 ra…

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by LauraGPT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants