이번 포스팅의 주제는 오랜만에 머신러닝과 직접적으로 관련된 이야기이다.
코드의 실행 속도를 높이는 것과 관련된 것으로 하이퍼파라미터의 최적화를 통한 빠른 학습과 관련되어 있다.
이 글은 하이퍼 파라미터 중 num_workers
에 대한 내용을 살펴보자.
num_workers
을 설정할 때 4의 배수로 설정하라는 소리는 어디선가 들어봤을 것이다.
num_workers
가 무엇이고 어떻게 설정하면 좋은지 알아보자.
num_workers
이란
DataLoader(dataset, num_workers=8)
PyTorch의 DataLoader
클래스는 대규모 데이터셋을 효율적으로 로딩하고 전처리하기 위한 강력한 도구이다.
대용량 데이터셋을 다룰 때 데이터 로딩은 훈련 과정에서 중요한 병목 현상이 될 수 있다.
이때 num_workers
매개변수가 중요한 역할을 수행한다.
num_workers
매개변수는 데이터 로딩에 사용할 서브프로세스의 개수를 결정한다.
이 값의 디폴트는 0으로 설정되어 있다.
이제 num_workers
값을 높이면 데이터 로딩을 병렬화하여 여러 CPU 코어를 활용하고 모델의 트레이닝 속도를 향상시킬 수 있다.
num_workers
값을 증가시키면 PyTorch는 동시에 데이터를 로딩할 수 있는 여러 워커 프로세스를 생성한다.
이러한 워커 프로세스는 메인 프로세스가 모델을 트레이닝하는 동안 독립적으로 데이터를 로딩하며 작동한다.
이러한 병렬화는 특히 디스크에서 데이터를 읽는 등 퍼포먼스가 I/O에 의해 제한되는 작업에서 데이터 로딩에 걸리는 시간을 크게 줄일 수 있다.
num_workers
매개변수를 설정하여 트레이닝 속도를 최적화하려면 몇 가지 요소를 고려해야 한다.
num_workers
의 최적값은 사용하는 시스템의 특성에 따라 다르다.
CPU 코어 개수, 메모리 용량, 디스크 I/O 속도 등을 고려해야 한다.
사용 가능한 리소스를 최대한 활용하고 다른 프로세스들을 방해하지 않도록 균형을 잡는 것이 중요하다.
이제 num_workers
에 적합한 값을 결정하기 위한 몇 가지 팁을 살펴보자.
num_workers
값 설정하기
1. 시스템 리소스:
사용 가능한 CPU 코어 수를 고려해야한다.
일반적인 규칙으로는 num_workers
를 CPU 코어 수x4와 동일하게 설정하거나 약간 줄여서 다른 프로세스에도 충분한 리소스를 남겨두는 것이 좋을 수 있다.
2. 메모리 사용량:
각 워커 프로세스는 데이터 배치를 메모리에 로딩한다.
제한된 메모리 리소스가 있는 경우 num_workers
를 높게 설정하면 메모리 부족 오류가 발생할 수 있다.
시스템이 증가된 데이터 로딩을 처리할 수 있도록 충분한 메모리가 있는지 확인하자.
3. 디스크 I/O 속도:
데이터가 하드 디스크 드라이브(HDD)와 같은 느린 저장 장치에 저장된 경우 워커 수를 늘리는 것은 보통 드라마틱한 성능 향상을 가져오지 않는다.
이 경우 디스크 I/O 속도가 결국 제한적인 요인이 되며, num_workers
를 특정 값 이상으로 키워도 속도가 빨라지지 않는다.
4. 실험과 프로파일링:
num_workers
의 최적값을 결정하는 가장 좋은 방법은 실험과 프로파일링을 통해 확인하는 것이다.
보통 2 또는 4로 시작하여 트레이닝 과정의 성능을 모니터링하면서 점진적으로 값을 증가시킨다. (보통 짝수)
CPU 및 메모리 사용량, 트레이닝 속도, 전체적인 시스템 반응과 같은 요소를 모니터링하며 값을 점점 키워가며 실험해 최적의 num_workers
값을 찾을 수 있다.
시스템 리소스가 필요 이상으로 사용되지 않으면서 데이터를 로딩하는 속도를 극대화하는 최적의 값을 찾는 것이 중요하다.
이러한 요소들을 고려하고 몇 번의 실험을 통해 DataLoader
구성에서 num_workers
의 최적값을 찾을 수 있다.
이를 통해 데이터 로딩 속도를 빠르게 하고 딥러닝 모델의 트레이닝의 속도를 키울 수 있다.
하지만 num_workers
의 최적화는 전체적인 성능을 향상시키기 위한 한 가지 요소에 불과하다.
모델 아키텍처, 배치 사이즈, 데이터 전처리와 같은 다른 요소들도 트레이닝 속도와 성능에 영향을 준다.
따라서 여러 요소들을 종합하여 다양한 방식을 고려하는 것이 중요하다.