0527 Data Loader

이나겸·2022년 5월 30일
0
post-thumbnail

1. 학습내용

Data Loader

딥러닝을 하면서 '데이터 로더는 어떻게 만들건가' 라는 고민을 하게 된다.
방법은 여러가지가 있다.
tensorflow, pytorch, keras, caffe 등 방식에 맞게끔 데이터로더를 만들어야하고,
데이터가 많은 경우에는 어떻게 처리해야하고, 데이터가 적으면 어떻게 처리해야하는지 고려한다.

좋은 데이터 로더?

  1. 여러 파일로 쪼개져서 저장 / 읽기 가능
    샤딩을 보고 만든게 배치 사이즈다. 그게 맞다고 정의를 할 순 없다.
    아이디어 착안은 DB 분산처리의 샤딩을 가져와서 착안했다고 볼 수 있다.
    병렬처리이기 때문에 유리한 구조고 가급적 여러 파일 형태를 그대로 유지한다.
    파이토치에 데이터 셔플 구조가 있는 것을 확인했다.

  2. key, value 구조
    빅O의 1에 가까운 접근시간을 가져서 빠르다.
    대신에 메모리는 많이 먹는다.

  3. IO 병목
    병목현상 : 여러 데이터가 한번에 들어가는데 시간 지체가 걸리는 것
    캐시메모리는 접근할때 빠르게 다이렉트로 접근할 수 있기 때문에
    데이터를 캐시 메모리에 올리거나 데이터 로더로 읽은 것을 캐시메모리로 가져와서
    캐시 메모리를 읽으면 속도가 빨라서 그렇게 하기도 한다.

데이터 로더 성능

많은 데이터가 있고 데이터를 빠르게 돌리고 싶다면,
torchvision 보다는 albumentations를 쓰는게 좀 더 빠르다.
CPU 기준에서도 차기 많이나지만 GPU는 성능따라 더 많이 차이난다.
torchvision과 albumentations는 compose 함수로 묶어서 처리할 수 있기 때문에
필요한 augmentation만 넣을 수 있다.


2. 중요내용

좋은 데이터 로더 요약

  • 여러 파일로 쪼개서 저장/읽기 가능 = Batch, Mini-Batch
  • key-value 구조 = dictionary
    단점 : 메모리를 많이 잡아 먹는다.
    오늘날은 메모리에 대해서 크게 영향을 받지 않는다. 용량 큰 것들이 많다.
  • Lazy Data Loading
  • IO 병목
  • 유연하게 적용하는 방법

3. 학습소감

이번주는 데이터 셋과 데이터 로더에 대한 학습을 진행했다.
추가적으로 구글링을 하면서 공부를 해보니 학습을 시킬 때 데이터 셋과 데이터 로더의 역할이 많이 중요하다고 생각되어 수업시간에 했던 기본적인 구조에 대해서 더 공부해야겠단 생각이 들었다.

0개의 댓글