"/opt/conda/envs/medsam/lib/python3.10/site-packages/torch/utils/data/dataloader.py"
File "/opt/conda/envs/medsam/lib/python3.10/site-packages/torch/utils/data/dataloader.py", line 1460, in _shutdown_workers
if w.is_alive():
File "/opt/conda/envs/medsam/lib/python3.10/multiprocessing/process.py", line 160, in is_alive
assert self._parent_pid == os.getpid(), 'can only test a child process'
train.py 학습 과정에서 발생함.
현재 프로세스의 부모 PID와 현재 프로세스의 PID가 같은지 확인.
자식 프로세스에 대해서만 부모의 pid가
데이터 로딩하는 dataloader 부분에서 발생함.
python의 multiprocessing 모듈을 사용하는 프로그램에서 발생.
다중 스레드 또는 다중 프로세스 환경에서 데이터로더를 사용할 때 발생함.
부모-자식 프로세스간의 관계가 깨짐. 부모 프로세스가 종료되거나, 예상치 못한 오류로 인해 자식 프로세스와의 관계가 단절된 경우.
DataLoader의 num_workers 파라미터를 너무 크게 설정하거나, 복잡한 데이터 전처리 로직이 있을 경우 이런 문제가 발생.
batch size를 150으로 너무 크게 잡음-> ram에 과부하.
프로세스가 올바르게 종료되는지, 부모 프로세스와 자식 프로세스간의 관계가 유지되고 있는지 확인해야 함.
batch size를 150으로 무리하게 크게 잡음. -> batch size를 8정도로 줄이니 이 문제는 해결됨. (X)
사용할 수 있는 GPU 갯수가 1개인데, num_workers가 4로 잡혀있었음. ->
torch.utils.data.DataLoader의 num_workers는 dataset의 데이터를 gpu로 전송할 때 필요한 전처리를 수행할 때 사용하는 subprocess의 수를 말한다.
num_workers의 수가 너무 크면 다른 일을 수행하는 데 사용할 자원이 적어져서 성능이 안 좋아질 수 있다.
따라서 적절한 값을 찾기 위해 하이퍼파라미터 튜닝을 하듯 접근한다.