- 분산 처리 데이터베이스에서는 데이터를 partition(분할) 또는 shard(조각)로 나누어 저장한다. 이는 병령 처리에 유리한 구조이기 때문에 가급적 여러 파일인 형태를 그대로 유지하는 것이 좋다(repartition에도 시간 비용이 들어가기 때문) 또한 data shuffle이 제공되어야 한다.
- 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법을 의미합니다.
- pandas나 Spark, h5의 경우 column과 데이터 타입 조회가 쉽다. tfrecord는 직렬화되어 있기 때문에 feature key 값과 데이터 타입 조회가 어렵다.
- Key value 구조의 장점은 명확하다. 개발적으로는 데이터 집합 내의 요소들을 key로 구분하여 알아보기 쉽게 해주며, 자료구조적으로는 O(1)에 가까운 접근 시간을 가진다. 즉 알아보기도 쉽고 사용하기도 쉬우면서 심지어 매우 빠르다.
- 메모리가 TB급이 아니라면 학습 데이터 전체를 메모리에 업로드하는 것이 불가능하다. 따라서 학습에 필요한 부분만 로드하는기능이 필요하다.
-모든 데이터를 메모리에 로드하고 사용할 수 없기 때문에 반드시 학습 중간에 IO 로딩을 거쳐야 한다. 이 과정에서 IO 로딩 속도 문제로 병목이 발생하므로 IO 로딩 병렬화와 캐시 기능이 제공되어야 한다.
- 데이터 변형에는 문자열 형식의 label을 정수형인 index로 바꾸는 정적인 변환 뿐만 아니라 image augmentation, NLP token masking 같은 동적인 변환도 존재한다.
- 데이터 로더를 만드는 과정에서 동적 변환이 쉽게 지원되도록 구현해야 한다.
- Google : TensorFlow - tfrecord, tf.data API
- Facebook : Pytorch - torch.utils.data API
- Uber : Petastorm
Nvidia : Dali
- albumentations는 numpy, opencv 기반으로 구현된 image transform 라이브러리이다. 사용법은 torchvision.transforms과 유사하며 torchvision보다 약 2~15배 빠른 속도를 나타낸다.
- torchvision.transforms과 albumentations은 여러 변환 기법을 compose 함수로 묶어
처리할 수 있기 때문에 하나의 객체로 관리할 수 있다.
- CPU는 복잡한 계산을 빠르게 할 수 있지만 직렬 처리
- GPU는 간단한 계산을 빠르게 할 수 있고, 많은 연산을 병렬 처리 가능