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
반응형
댓글