[Pytorch] num_workers가 성능에 미치는 간접적 영향

2025. 3. 31. 17:13·Pytorch
728x90
반응형

딥러닝으로 분류모델 학습도중, validation accuracy가 

n epoch =>.  "class A" Acc: 98.21%,   "class B" Acc: 98.67%

n+1 epoch =>   "class A" Acc: 28.96%,   "class B" Acc: 99.88%

이렇게 데이터가 적은 쪽 클래스의 정확도가 대폭 감소하는 현상이 발생했습니다.

원인을 찾아보니 num_workers의 값이 크면 발생할 수 있는 현상이라고 합니다.

 

- num_workers란?  

num_workers는 PyTorch의 DataLoader가 데이터를 로드할 때 사용할 서브 프로세스(worker)의 개수를 의미합니다.
기본적으로 DataLoader는 데이터를 배치 단위로 불러오는데, num_workers를 늘리면 여러 개의 프로세스가 병렬로 데이터를 로드해서 속도를 높힐 수 있다는 장점이 있습니다.

 

 

- num_workers=0 vs num_workers>0  

  • num_workers=0:
    • 싱글 프로세스에서 데이터를 로드 (메인 프로세스가 직접 데이터 로드)
    • 데이터가 하나씩 순차적으로 로드됨 → 느림
    • 디버깅할 때 사용하기 좋음 (멀티프로세싱 관련 오류 방지)
  • num_workers>0:
    • 멀티프로세싱을 사용해서 데이터를 병렬로 로드
    • 여러 worker가 동시에 데이터를 로드 → 속도 증가
    • 단, 너무 많으면 CPU 과부하 및 I/O 병목 발생 가능

 

- num_workers가 성능에 간접적으로 영향을 줄 수 있는 이유는?  

1. data shuffle에서의 문제 발생

  • num_workers가 너무 많거나 설정이 잘못되면 DataLoader의 shuffle=True가 제대로 동작하지 않을 수도 있음.
  • 이 경우 특정 클래스(개수가 더 많은 클래스) 데이터가 연속으로 쌓여서 모델이 한쪽으로 편향될 수 있음.
  • 특히 한 클래스의 데이터가 희소한 경우, 데이터가 고르게 섞이지 않으면 모델이 과적합되면서 데이터 수가 더 많은 클래스의 Accuracy가 낮아질 가능성이 있음.

2. I/O 병목으로 인해 데이터 로딩이 지연됨

  • 데이터가 일부 배치에서 누락되거나 DataLoader가 불안정하게 동작하면 모델 성능이 일관되지 않을 수도 있음

3. 특정 클래스 데이터 손실 가능성

  • num_workers가 높으면 멀티프로세싱으로 데이터를 병렬 로드하는 과정에서 일부 데이터가 손실될 가능성이 있음.
  • 특히 drop_last=True를 설정했다면 데이터수가 적은 클래스의 데이터가 일부 배치에서 빠지는 경우가 생길 수도 있음.
  • 이 경우 모델이 작은 데이터를 충분히 학습하지 못해서 데이터가 더 적은 클래스의 Accuracy가 낮아질 가능성이 있음.

보통 적절한 값은 4~8 사이라고 하고,

실제로 num_workers의 값을 16-> 8로 변경했을때 학습이 좀 더 안정적으로 진행되었고 validation accuracy의 변동폭도 감소했습니다.

 

 

 

728x90
반응형
저작자표시 (새창열림)

'Pytorch' 카테고리의 다른 글

[Pytorch] 메모리 효율적으로 사용하기  (3) 2024.08.30
[Pytorch] Inference Time Check  (0) 2023.02.24
[Pytorch] loss nan 해결하기  (0) 2023.02.24
[Pytorch] Tensor Manipulation  (0) 2023.02.24
[Pytorch] TorchVision Fine Tuning  (0) 2023.02.05
'Pytorch' 카테고리의 다른 글
  • [Pytorch] 메모리 효율적으로 사용하기
  • [Pytorch] Inference Time Check
  • [Pytorch] loss nan 해결하기
  • [Pytorch] Tensor Manipulation
ga.0_0.ga
ga.0_0.ga
    반응형
    250x250
  • ga.0_0.ga
    ##뚝딱뚝딱 딥러닝##
    ga.0_0.ga
  • 전체
    오늘
    어제
    • 분류 전체보기 (181)
      • Paper Review (51)
        • Video Scene Graph Generation (6)
        • Image Scene Graph Generation (18)
        • Graph Model (5)
        • Key Information Extraction (4)
        • Fake Detection (2)
        • Text to Image (1)
        • Diffusion Personalization (4)
        • etc (11)
      • AI Research (49)
        • Deep Learning (30)
        • Artificial Intelligence (15)
        • Data Analysis (4)
      • Pytorch (10)
      • ONNX (5)
      • OpenCV (2)
      • Error Note (34)
      • Linux (2)
      • Docker (3)
      • Etc (7)
      • My Study (16)
        • Algorithm (10)
        • Project (4)
        • Interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    torch.nn
    알고리즘
    활성화 함수
    pandas
    dataset
    forch.nn.functional
    dataloader
    Inductive bias
    차원의 저주
    HRNet
    정규화
    linear regression
    ONNX
    contiguous
    Logistic regression
    그래프신경망
    Activation Function
    permute
    3dinput
    i3d
    pytorch
    transformer
    JNI
    RuntimeError
    나이브 베이즈 분류
    tensorflow
    TypeError
    오차 역전파
    GCN
    fine tuning
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ga.0_0.ga
[Pytorch] num_workers가 성능에 미치는 간접적 영향
상단으로

티스토리툴바