본문 바로가기

연구/pytorch

[error] 파이썬 data loader 시간지연문제

반응형

파이썬 data loader 시간지연문제는 사실 data loader안에서 생기는 문제가 아니고 파이썬 threading 문제다.

 

File "test_dataloader.py", line 39, in <module>
    _debug_h36m()
  File "/home/kwu/Desktop/chun/code/METRO_REAL/main/../data/Human36M/Human36M.py", line 464, in _debug
    for i, (inputs, targets, meta_info) in enumerate(train_loader):
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 345, in __next__
    data = self._next_data()
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 841, in _next_data
    idx, data = self._get_data()
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 798, in _get_data
    success, data = self._try_get_data()
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 761, in _try_get_data
    data = self._data_queue.get(timeout=timeout)
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/queue.py", line 179, in get
    self.not_empty.wait(remaining)
  File "/home/kwu/anaconda3/envs/metro_real/lib/python3.7/threading.py", line 300, in wait
    gotit = waiter.acquire(True, timeout)

데이터 로더에서 데이터를 읽어오는데 시간이 매우 오래걸리는 문제가 발생했고 너무 오래걸려서 Ctrl+C 로 종료하자 위와같은 에러메세지를 출력했다.

 

요약하자면 대충 threading 과정에서 데이터를 읽어오는 시간이 매우 오래걸려서 생기는 문제인데 이와 관련해서 검색해보니 다음과 같은 사이트들을 참고할 수 있었다.

https://github.com/paramiko/paramiko/issues/515

https://bugs.python.org/issue24026

 

나같은 경우에는 파이썬, 파이토치를 딥러닝 공부용으로 사용하고 있고, 이 문제가 파이토치 문제인줄 알았으나 알고보니 파이썬 버전 버그 문제였다.

 

위 문제가 발생하는 파이썬 버전을 확인해보니 다음과 같았다.

>>> import sys
>>> print(sys.version)
3.7.10 (default, Feb 26 2021, 18:47:35) 
[GCC 7.3.0]

 

그리고 아래의 파이썬 버전으로 바꿔서 테스트해보니 결과적으로 thread 문제는 해결됐다.

>>> import sys
>>> print(sys.version)
3.8.5 (default, Sep  4 2020, 07:30:14) 
[GCC 7.3.0]
반응형