개발환경
- window10
- pytorch 1.2.0
- pycham 2020.3.3
1. Problem
pytorch를 사용해서 model을 학습하려고 할 때 해당 error가 발생하였다.
2. Reason
window 환경은 unix, linux와 다르게 *fork 를 지원하지 않고 *spawn을 사용한다고 하는데
spawn은 부모프로세스와 자식 프로세스가 구분되지 않아 프로세스를 계속 불러오는 재귀호출이 발생한다.
* fork : 부모 프로세스에서 자식 프로세스를 하나 복제 생성해 주는 역할을 한다. 이때 복제 생성시, 부모 프로세스와 같은 프로세스가 만들어짐
* spawn : 부모 프로세스는 깨끗한 새 파이썬 인터프리터 프로세스를 시작한다. 자식 프로세스는 프로세스 객체의 run() 메서드를 실행하는데 필요한 자원만 상속 받음
3. Solution
나는 pytorch의 DataLoader 함수를 사용할 때 num_workers라는 파라미터를 설정해 주었는데 이 파라미터는
cpu 코어를 N개의 코어로 나누어서 프로세스가 재귀적인 호출이 일어나 발생한 문제로 보인다.
num_workers를 0으로 설정해 문제를 발생시키지 않는 방법도 존재하나 처리가 매우 느려지기 때문에 사용하지 않았다.
torch에서는 torch.multiprocessing.freeze_support()를 사용하면 해당 오류를 막을수 있게 해주는데, 나에게는 소용이
없어서 (if __name__ == '__main__' : 주요코드)를 사용해 오류를 없앨 수 있었다.
이 코드안에 주요 코드를 삽입하면 현재 파일이 엔트리 포인트로 사용되는지, 모듈로 import되어 사용되는지 구분해
준다고 한다.
'프로그래밍 > Python' 카테고리의 다른 글
ubuntu18.04 XGBoost 설치 (0) | 2022.03.17 |
---|---|
파이썬으로 동영상 파일 처리 방법 (0) | 2021.04.02 |
[AWS] AWS EC2 시작부터 jupyter notebook 설치 (0) | 2020.09.26 |
[웹크롤링] 파이썬으로 삼성주식뉴스 가져오기 (0) | 2020.09.20 |
[웹크롤링]네이버 주식뉴스 크롤링 시도 (0) | 2020.08.14 |
댓글