num_workers, GPU

김찬우·2025년 10월 20일

용어

목록 보기
1/4

YOLO에서 학습을 진행하던 도중 GPU의 성능을 30%정도만 사용하는 것을 확인하였다.

windows환경에서 학습을 돌리며 multiprocessing관련 문제가 생겨 num_workers의 값을 0으로 했던 것이 문제였으며 multi-processing.freeze_support()함수를 추가해줌으로 해결

from ultralytics import YOLO
import multiprocessing
 
if __name__=="__main__":
    multiprocessing.freeze_support()
 
    model = YOLO("yolov10s-seg.yaml")
    # 배치 크기 8 
    # multiprocession.freeze_support()을 쓰지 않는다면 num_worker 0 고정.
    results = model.train(data="Compete_segment.yaml",pretrained='yolov8s-seg.pt',epochs=100, device=[0], workers=4, batch=8)
 

num_workers은 학습과정에서 데이터를 불러오는 역할을 수행할 때 사용하는 파라미터로 GPU의 연산 속도를 활용할 수 있도록 CPU의 데이터 전송 속도를 높이는 것이다.

num_workers의 수가 낮다면 GPU에 전송되는 데이터가 늦어 정상적으로 운용을 할 수 없으며 이 경우를 CPU I/O bottleneck현상이라고 하며 num_workers의 수를 높이게 되면 해결된다.


1 Epoch를 진행할 때 위 사진처럼 CPU가 데이터를 GPU에 전송해주는 과정이 존재.

num_workers의 값을 낮게 설정하면 붉은색 선과 같이 시간이 오래 걸려 사이간 GPU를 사용하지 않게 되고
num_workers의 값을 적절히 설정하면 보라색 선과 같이 공백의 시간이 적어 GPU를 온전히 사용할 수 있게 된다.

CPU와 GPU에서 num_workers에 대한 설명 글

nvidia-smi


학습을 수행할 때에는 붉은색 박스 내의 정보처럼 1 Epoch를 제외하고선 학습에 5~6분가량을 사용하고 평가지표에 1분정도를 소요함을 알 수 있다.

0개의 댓글