训练代码未报错,但是每个epoch中步数直接跳过 #1358
-
|
‘ tables: ----------- ** dataset_classes ** -------------- [2024-02-05 18:53:57,974][root][INFO] - config.yaml is saved to: outputs/config.yaml ’这是我的全部日志,为什么会出现 “ 0/1 [00:00<?, ?it/s]”这种情况 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
这个日志的根因可以确定:你当时使用的 2024-02-05 版本中, 从日志可以直接串起来:
另外,你设置了 我用同样的 2 条样本做了最小对照测试: 当前动态 sampler 会显式保留最后一个非空 batch(当前源码)。 建议的恢复方式
python -m pip install -U "funasr==1.3.14"
官方脚本也是 进度条刚创建时短暂出现一次 最后,两条数据并且训练集与验证集使用同一个 JSONL,只适合验证训练管线,不能用于判断 contextual Paraformer 的微调效果。确认能够稳定完成 step 后,再换成独立且足够规模的 train/valid 数据。 |
Beta Was this translation helpful? Give feedback.
这个日志的根因可以确定:你当时使用的 2024-02-05 版本中,
DynamicBatchLocalShuffleSampler丢掉了最后一个未满 batch,所以 DataLoader 报告有 1 个 batch,但实际一个也没有产出。 这不是 CUDA 卡住,也不是模型已经完成了一步训练。从日志可以直接串起来:
num of samplers: 2表示 JSONL 读到了 2 条样本。batch_type: example、batch_size: 6000,因此 6000 表示 6000 条样本,两条数据只会组成一个未满的尾 batch。__len__()会返回 1,但__iter__()只在下一个样本装不下时才yield batch,循环结束后没有再 yield 尾 batch(当时的源码)。所以这里是len(dataloader) == 1,实际迭代次数却是 0。len创建total=1的进度条,但训练循环没有收到 batch,optimizer.step()从未执行;epoch 末仍调用scheduler.step(),于是正好出现日志里的 “lr_scheduler.step()beforeoptimizer.step()” 警告(训练循环,epoch 末 scheduler)。这些model.pt.ep*只是按 epoch 保存,不能证明参数更新过。另外,你设置了
max_epoch=5,日志却跑了 Epoch 1 到 6,也是当时ra…