본문 바로가기
프로그래밍/Python

freeze_support() error 해결

by Leeys 2021. 3. 25.
반응형

개발환경

 

- 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되어 사용되는지 구분해   

 

준다고 한다.

 

 

 

 

 

반응형

댓글