-
Notifications
You must be signed in to change notification settings - Fork 448
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
[bugfix]修复Trainer里check_code函数忽略pin_memory参数导致的内存bug #400
base: dev
Are you sure you want to change the base?
Conversation
非常感谢您的再次提交,上次我没有认真检查您提到的细节,我刚才再次看了下这部分的修改内容。这里我倾向于默认打开,是由于大家真的在跑神经网络的时候,大部分时间都会在有gpu的服务器上,这点内存消耗应该对于服务器来说比较容易接受(这里是由于pin_memory确实会加速data准备过程,感觉默认开启可以为大家节省一点时间);遭遇了内存问题之后,也可以通过pin_memory手动关闭。我检查了一下代码,发现Trainer中check_code应该是默认就关闭了pin_memory吧? fastNLP/fastNLP/core/trainer.py Line 957 in 9ac7d09
|
Trainer中check_code的问题是出现在下面这行代码: fastNLP/fastNLP/core/trainer.py Lines 1012 to 1013 in 9ac7d09
这行使用Tester的时候没有传入pin_memory参数,再看到Tester的初始化方法: fastNLP/fastNLP/core/tester.py Line 116 in 9ac7d09
也就是说,不管是否给trainer传入pin_memory,这里的pin_memory都是默认开启的。 同时,在有gpu的服务器,我也复现过该内存问题。大概场景是同一个服务器有多人在不同卡上跑代码,导致服务器内存不是特别充足,那么pin_memory这部分的消耗就会有影响了。如果不想更改默认方式,也可以参考一下我之前提交的另外一种修复方式:ouyhlan@cac1331 。 |
嗯嗯,我觉得您提到的另一种方式应该会更好一些, |
非常感谢~麻烦您按照提到的那份代码发起一下pr吧~ |
3be86c6
to
2302853
Compare
已经push -f到这个PR里了,麻烦直接在这个PR里review一下改动就好~ |
Description:修复Trainer里check_code函数忽略pin_memory参数导致的内存不足bug
Main reason:
在使用fastNLP库时发生内存不足错误。使用场景是在使用CPU训练模型时,发生了内存错误。经过DEBUG发现,是core/trainer.py文件里,_check_code函数在调用Tester类时没有指定pin_memory参数,而Tester类默认初始化pin_memory为True。
具体错误调用栈:
pin_memory参数设为False后问题消失。同时,根据pytorch/pytorch#57273 ,建议所有的torch版本里Trainer和Tester类默认不开启pin_memory。
Checklist 检查下面各项是否完成
Please feel free to remove inapplicable items for your PR.
Changes: 逐项描述修改的内容
Mention: 找人review你的PR
@yhcc