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

深度学习代码debug方法 #4

Open
ShengdingHu opened this issue Jul 5, 2022 · 2 comments
Open

深度学习代码debug方法 #4

ShengdingHu opened this issue Jul 5, 2022 · 2 comments
Labels

Comments

@ShengdingHu
Copy link
Collaborator

在这里集合一些深度学习代码debug方法,欢迎大家补充自己的见解和优质帖子。

@ShengdingHu
Copy link
Collaborator Author

@ShengdingHu
Copy link
Collaborator Author

ShengdingHu commented Jul 5, 2022

  1. debug时,batchsize和hidden 不要设置得能整除,有同学batchsize 和 hidden都设置成32, 这样维度错了也不知道。为了避免该问题可以在debug阶段设置成33和32; (其他维度也一样,不要能整除)不要整除而不是不相等是因为pytorch有自动广播机制。
  2. 遇到疯狂输出的cuda error,例如
    1021656954422_ pic
    一般是列表索引越界,可以设置环境变量 CUDA_LAUNCH_BLOCKING=1来debug,具体可以参考网上很多帖子
  3. 首先检查输入是否正确,对于NLP任务,可以将id复原为token,看句子是不是想要的那样。
  4. 查看模型梯度是否正常,如下
    [(name, parameter.grad.abs().sum(), parameter.sum()) for name,parameter in model.named_parameters()]
    
    每个tuple里,第一个是模块名字,第二个是grad绝对值求和,第三个是参数求和; 如果 需要由grad的模块的grad绝对值求和为零,就说明有问题;如果两次打印之间模型参数求和没有变化,可能也有问题,说明学习率可能过小。
  5. 使用单个样本调试。
    可以将数据集大小改为1 (也就是反复过这一个数据),去掉测试代码,只看训练loss,如果这种情况loss不降,说明优化流程有问题,例如没有开梯度,没有optimizer.step()等等
  6. 在完成单个样本调试之后,可以逐步加大样本量,如果这时候loss变得难以下降,一般是优化器有问题,可以通过换优化器,换学习率,让模型在10~100这个量级上的数据能快速过拟合。
  7. pip install ipython 之后,可以在代码中需要交互debug的地方加入语句 from IPython import embed; embed(), 程序就可以停在这儿供你访问程序中的变量,查看它们是否正常。

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

No branches or pull requests

1 participant