概述
一、问题描述
在使用Pytorch训练模型的时候,程序出现卡死、没反应的现象。当卡到无法令人接受,然后强制终止运行程序的时候,得到以下的终端输出信息:
xxxxxxxxx
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 435, in __next__
data = self._next_data()
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 1068, in _next_data
idx, data = self._get_data()
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 1034, in _get_data
success, data = self._try_get_data()
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 872, in _try_get_data
data = self._data_queue.get(timeout=timeout)
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/multiprocessing/queues.py", line 104, in get
if not self._poll(timeout):
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/multiprocessing/connection.py", line 257, in poll
return self._poll(timeout)
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/multiprocessing/connection.py", line 414, in _poll
r = wait([self], timeout)
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/multiprocessing/connection.py", line 911, in wait
ready = selector.select(timeout)
File "/home/csx/.conda/envs/py4torch17/lib/python3.6/selectors.py", line 376, in select
fd_event_list = self._poll.poll(timeout)
KeyboardInterrupt
我称之为"fd_event_list = self._poll.poll(timeout)"问题。
二、原因分析
如果模型没有问题(在一个数据集上能够正常训练,但切换到另一个数据集后出现了这个问题),这很有可能是因为数据集的规模引起的Dataloader加载数据timeout。当然,如果不考虑数据集规模,还有可能就是模型训练的机器性能不够,比如运行内存、显卡内存等,若不够大都有可能出现这个问题,但这个可能性比较小。
作以上的分析,这是因为我通过降低训练数据集的方法,使得程序恢复正常运行,而不至于卡死,一直不动。
后续的更新:表面上的确是数据集的问题,然而后面发现是自己的算法设计上出了逻辑错误(这个才是真正问题),才导致了timeout。问题出在Dataloader中__getitem__(self, idx) 这个方法中,我设置了一个循环,由于一直满足不了条件,导致陷入了死循环,一直获取不了数据,最终timeout。
三、建议方案
①网上有些大神认为是因为cpu worker nums设置得太高导致,可以适当地降低worker的数量,也许能够解决该问题。但我在我所使用的模型和数据集中作了相应的尝试,不行。
②尝试降低模型训练的数据量。如果这个方法有效,那么说明数据集确实有问题,只不过,这个是表面上的问题,真正的问题其实是在你的算法,尤其是__getitem__(self, idx)这个方法。如果这个方法中有循环,要特别地思考思考,这个循环有什么样的问题。
四、其他
若你遇到了该问题,请在下方留言,如果我所作出的建议有误,也可进行批评改正。欢迎加入讨论。
最后
以上就是瘦瘦煎饼为你收集整理的Pytorch模型训练出现fd_event_list = self._poll.poll(timeout)问题的全部内容,希望文章能够帮你解决Pytorch模型训练出现fd_event_list = self._poll.poll(timeout)问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复