본문 바로가기
코딩 라이프/에러log

[pytorch]Caught RuntimeError in DataLoader worker process 0.

by min0114 2022. 8. 6.

 

 

 

DataLoader의 인자값 중 num_workers = gpu 개수 X 4 로 설정해주었더니 

RuntimeError: Caught RuntimeError in DataLoader worker process 0. 에러가 났다. 

 

해결방법은 간단하다. num_workers 의 값을 0으로 바꾸어주면 된다. 

 

from torch.utils.data import DataLoader

train_dataset = Detection_dataset(data_dir=DATA_DIR,phase="train", transform=train_tranformer)
train_sampler = DistributedSampler(train_dataset,num_replicas=hvd.size(),rank=hvd.rank())
dataloaders["train"] = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=False,
                                  num_workers=0, pin_memory=True, worker_init_fn=seed_worker)

하지만 0으로 설정하는 것은  gpu와 cpu 사이의 병목현상이 발생될 수 있다. 

 

cpu -> shuffle, random ...etc

gpu -> 단순연산  

 

 

  • num_workers (int, optional) – how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. (default: 0)

 

그리고 찾아보니 이 설정에 관한 것들에 대해서 많은 토론이 되는 것을 보니 읽어보고 적절한 셋팅을 찾는 것이 중요하다 느껴졌다. 아래 참조링크를 남긴다. 

 

[reference]

 

https://discuss.pytorch.org/t/guidelines-for-assigning-num-workers-to-dataloader/813

 

Guidelines for assigning num_workers to DataLoader

I realize that to some extent this comes down to experimentation, but are there any general guidelines on how to choose the num_workers for a DataLoader object? Should num_workers be equal to the batch size? Or the number of CPU cores in my machine? Or to

discuss.pytorch.org

 

 

반응형

댓글