在使用pytorch dataloader 有时候会爆OSError的问题
可能是每一个batch的形成的时候就已经超过了系统的打开文件的数量
-
要么提高系统的打开的文件的数量
先查看系统设置 ulimit -n
设置新的daxiao ulimit -n xxxx要么就设置pytorch使用系统的限定
import torch.multiprocessing torch.multiprocessing.set_sharing_strategy('file_system')
-
可能是在每一次的run iter 的过程中 做了一些操作让该tensor没有被在iter的结束关闭。比如是append到一个数组,这会导致multiprocessing 没有被正确释放。
这可以通过deepcopy该tensor 然后delete tensor, 再做相应的操作可以避免没有释放multiprocessing。
https://github.com/pytorch/pytorch/issues/11201
[Added]
3. 如果每一次epoch,都没有完全遍历完Dataset,在使用了Prefetcher的时候, 会导致预存的Batch没有被释放,占用着句柄。