본문 바로가기
ML & DL/Deep Learning

[DL] num_workers 이해와 활용

by Yuchulnote 2023. 12. 24.
728x90

딥러닝에서 num_workers는 데이터 로딩의 병렬 처리를 담당하는 중요한 파라미터입니다. 이 값은 CPU 코어를 사용하여 배치 데이터를 병렬로 얼마나 빨리 로딩할지 결정합니다. 적절한 num_workers 값을 설정하는 것은 모델 학습의 효율성을 크게 향상시킬 수 있습니다.

num_workers 값 설정시 고려 사항

  1. CPU 코어 수: 사용 가능한 CPU 코어 수에 따라 num_workers 값을 조절해야 합니다. 예를 들어, 8개의 CPU 코어가 있다면, num_workers를 4 이상으로 설정하는 것이 좋을 수 있습니다.
  2. I/O 속도: 데이터를 로딩할 때 디스크의 읽기 속도가 중요합니다. 빠른 SSD의 경우, 더 많은 num_workers를 사용해 병렬 로딩의 이점을 얻을 수 있습니다.
  3. 데이터 변환 부하: 데이터셋에서 복잡한 변환(augmentation)을 수행하는 경우, CPU 부하가 증가합니다. 이럴 때 더 많은 num_workers가 도움이 될 수 있습니다.

대규모 환경에서의 사용

여러 GPU를 사용하는 환경에서는 num_workers를 GPU 수의 4배로 설정하는 것이 일반적인 권장 사항입니다. 예를 들어, 4개의 GPU가 있다면 num_workers=16으로 설정할 수 있습니다. 이는 경험적인 가이드라인이며, 실제 상황에 따라 최적의 값은 달라질 수 있습니다.

실 사용 코드 예제

PyTorch에서 DataLoader를 사용할 때 num_workers를 설정하는 예제는 다음과 같습니다:

from torch.utils.data import DataLoader

# 데이터셋 로드
dataset = MyDataset()
# DataLoader 설정
loader = DataLoader(dataset, batch_size=64, num_workers=4)

이 코드에서 num_workers=4는 데이터 로딩을 위해 4개의 병렬 작업자(worker)를 사용한다는 것을 의미합니다.

Windows 환경에서의 특별한 고려 사항

Windows 환경에서는 num_workers의 설정이 다를 수 있습니다. 특히, 병렬 처리 시 메모리 문제나 데드락(deadlock)으로 인해 num_workers = 0으로 설정하여 GPU 사용이 가능하게 하는 경우가 있습니다.

이는 Windows의 병렬 처리 구현 방식과 관련이 있으며, num_workers = 0은 모든 데이터 로딩 작업을 메인 프로세스에서 수행하도록 합니다.

 

728x90
반응형