저자:
(1) Iason Ofeidis, 뉴헤이븐 소재 예일대학교 전기공학과 및 예일 네트워크 과학 연구소 {동등 기여};
(2) Diego Kiedanski, 뉴헤이븐 소재 예일대학교 전기공학과 및 예일 네트워크 과학 연구소 {동등 기여};
(3) Leandros TassiulasLevon Ghukasyan, Activeloop, Mountain View, CA, USA, 전기 공학과, Yale University, New Haven의 네트워크 과학 연구소.
딥 러닝 모델을 훈련하는 과정에서 데이터 세트는 모델에 입력으로 전달되기 전에 메모리에서 읽어 사전 처리되어야 합니다. 이 작업을 수행하려면 데이터를 메모리에 한꺼번에 로드해야 합니다. 대부분의 경우, 특히 대규모 데이터 세트의 경우 시스템에서 사용할 수 있는 메모리 양이 제한되어 메모리 부족이 발생하고 이로 인해 시스템 응답 시간도 저하됩니다. 이러한 병목 현상은 소위 데이터로더를 사용하여 딥 러닝 라이브러리에서 해결되는 경우가 많습니다. 이 구조는 병렬 처리, 프리페칭, 일괄 처리 및 기타 기술을 활용하여 데이터 로딩 시간과 메모리 오버헤드를 최대한 줄여 데이터 세트를 반복하는 방법을 제공합니다(Paszke et al., 2019).
데이터로더의 주요 목표는 모델에 공급할 샘플 배치를 형성하기 위해 저장 위치에서 훈련용 처리 장치와 함께 위치한 메모리로 데이터 샘플을 전송하는 작업을 수행하는 것입니다. 이러한 작업은 스토리지 시스템의 대역폭, 특히 I/O 성능에 의해 제한됩니다. 따라서 시스템의 하드웨어 사양, 이를 제공하는 파일 시스템, 컴퓨팅 장치와의 링크 처리량에 따라 훈련을 완료하는 데 필요한 총 시간에 막대한 영향을 미칠 수 있습니다.
데이터로더 구성 요소의 다음 사양은 주로 PyTorch(torch.DataLoader()(PyTorch Core Team))에 초점을 맞춘 반면, TensorFlow 대응 요소(tf.Dataset()(Abadi et al., 2015))는 동일하지는 않지만, 큰 유사점을 가지고 있습니다.
데이터 로더를 사용할 때 입력용 데이터 세트를 제공하는 것 외에도 사용자는 자신의 요구 사항과 리소스에 맞게 다양한 하이퍼 매개 변수를 구성할 수 있습니다. 모든 데이터로더에서 사용할 수 있는 공통적인 것은 배치 크기입니다. 이는 앞에서 언급한 것처럼 내부 모델 매개변수를 업데이트하기 전에 사용될 샘플 수를 정의합니다. 이 매개변수는 확률적 경사하강법(Hinton et al., 2012)의 "미니 배치" 개념과 본질적으로 연결되어 있으므로 더 나은 훈련 결과를 달성해야 할 때 일반적으로 미세 조정을 거치는 첫 번째 매개변수 중 하나입니다. .
둘째, 사용자는 데이터 세트에서 샘플을 추출하여 배치에 삽입하는 전략을 결정하는 샘플링 접근 방식을 정의할 수 있습니다. 여기에는 확률 분포뿐만 아니라 특정 기준에 따라 샘플을 선택하는 것도 포함될 수 있습니다. 이 단계에는 일반적으로 훈련 모델의 일반화를 개선하는 것을 목표로 모든 데이터세트 반복 전에 샘플을 재배열할 수 있는 셔플링 옵션이 있습니다. 또 다른 매개변수는 훈련 모델에 입력으로 제공될 단일 요소를 형성하기 위해 배치 내의 모든 개별 샘플을 함께 연결하는 프로세스(벡터를 텐서에 쌓는 것을 생각해 보세요)를 본질적으로 지정하는 대조/패딩 기능입니다. . 또한 가져온 데이터 샘플을 고정(페이지 잠금) 메모리에 자동으로 저장하도록 데이터로더를 구성할 수 있으므로 CUDA 지원 장치로 더 빠른 데이터 전송이 가능합니다.
데이터 로더에는 데이터 전송 프로세스를 최적화하는 것이 목적인 작업자라는 구성 요소가 함께 제공됩니다. 작업자는 비동기 방식으로 데이터 로드를 수행하는 하위 프로세스로 정의됩니다. 데이터로더의 인스턴스를 생성할 때 사용자는 생성되어 이 작업을 제어할 작업자 수를 지정할 수 있습니다. 작업자 수가 0이면 하위 프로세스가 생성되지 않습니다. 이는 데이터 가져오기가 동일한 프로세스에서 동기적으로 발생하므로 컴퓨팅 장치(GPU)가 데이터 로드를 기다려야 함을 의미합니다. 완료 예정(PyTorch Core Team) 반대로 작업자 수와 동일한 하위 프로세스가 생성되어 데이터 로드 시 계산 코드가 차단되는 것을 방지할 수 있습니다. 이는 필요할 때 준비할 수 있도록 향후 배치를 미리 미리 가져오는 방식으로 수행됩니다.
이 문서는 CC 4.0 라이선스에 따라 arxiv에서 볼 수 있습니다.