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

训练进度条中,loss一直显示Nan的问题 #144

Open
Yikai-Liao opened this issue Jul 27, 2023 · 5 comments
Open

训练进度条中,loss一直显示Nan的问题 #144

Yikai-Liao opened this issue Jul 27, 2023 · 5 comments

Comments

@Yikai-Liao
Copy link

基本信息

  • 你使用的操作系统: ArcoLinux
  • 你使用的Python版本: 3.10
  • 你使用的Pytorch版本: '2.0.0+cu117'
  • 你使用的bert4torch版本: 0.3.0
  • 你加载的预训练模型: gau_alpha

问题反馈

当loss 出现一次Nan之后,即使后续没有Nan, 进度条也会因为平滑机制一直显示Nan

2023-07-27 10:26:24 - Epoch: 1/10
2660/6659 [==========>...................] - ETA: 7:48 - loss: nan - pos: 0.0764 - pitch: 0.1843 - decoder: nan - acc: 0.8350 

根据WandB中的记录,实际上只有一个step出现了Nan
图片

并且进度条中的loss感觉有些平滑过度,希望能与WandB一样,自由选择平滑方式和平滑的程度。

注:训练中开启混合精度

model.compile(
    loss=loss_func, 
    optimizer=optim, 
    mixed_precision=True, 
    scheduler=scheduler, 
    metrics={'acc': acc},
    clip_grad_norm=1.0
)
@Tongjilibo
Copy link
Owner

Tongjilibo commented Jul 27, 2023

  1. wandb是记录了每个batch的的指标,通过后续来平滑方式来记录的
  2. 你可以在compile时候传入stateful_metrics=['loss']来实现指标均不平滑(只记录状态量),这样进度条的指标显示的也是每个batch的指标,抖动会很明显;
  3. 在v0.3.1.post2之后,除了stateful_metrics指定指标不平滑,还可以通过smooth_interval来指定平滑的步数,也就是最近n个batch的平均指标;并且设计的思路是进度条平滑了,后面记录(wandb, tensorboard, logger等)的指标也是平滑的指标,如果进度条不平滑,后面记录的也是不平滑的指标,两者保持一致
  4. 我之前设计的思路是参考keras来的,后续我也考虑看看这块需不需要优化

@Yikai-Liao
Copy link
Author

可以先把Nan过滤加上

@Tongjilibo
Copy link
Owner

Tongjilibo commented Jul 27, 2023

如果按照你的需求,你直接设置stateful_metrics=['loss', 'pos', 'pitch']等等就可以了啊,这个时候进度条只是显示当前batch的loss,后续不会再显示nan了,而且感觉loss出现nan也是不太正常的

@Yikai-Liao
Copy link
Author

这里出现Nan的原因还我没搞清楚。但是我记得有一种情况是,amp混合精度的scale会引起Nan,然后它会自动跳过这次更新,并调整scale,不影响后续训练。

@Tongjilibo
Copy link
Owner

安装bert4torch==0.3.3, 可以通过设置os.environ['IGNORE_NAN_VALUES'] = 'true'来跳过nan的指标显示

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants