샘플을 그대로 쌓을 수 없을 때
기본 묶음 구성 함수는 각 샘플의 모든 필드를 텐서로 쌓아. 이미지 배치나 고정된 수의 특징을 가진 회귀처럼 모든 샘플의 모양이 같을 때 잘 작동해. 시퀀스 길이가 다르거나, 항목별 메타데이터를 함께 옮기거나, 배치 구조를 직접 정해야 할 때는 별도의 함수가 필요해.
사용자 정의 묶음 구성
묶음 구성 함수는 List[Sample]을 받아 하나의 배치를 반환해. 가장 흔한 예는 가변 길이 시퀀스를 현재 배치에서 가장 긴 시퀀스에 맞춰 패딩하는 거야.
IterableDataset: 스트리밍 데이터
거대한 텍스트 말뭉치, 네트워크로 들어오는 데이터, 온라인 센서 스트림처럼 인덱스로 다루기 어렵거나 디스크에 한 번에 담기 힘든 데이터에는 Dataset 대신 IterableDataset을 구현해. __iter__(self)만 정의하면 PyTorch가 그 반복자에서 샘플을 받아 배치를 구성해.
여러 작업 프로세스로 IterableDataset을 사용할 때는 주의해야 해. 스트림을 직접 나누지 않으면 모든 작업 프로세스가 전체 반복자를 받아 같은 샘플을 중복해서 읽어. __iter__ 안에서 torch.utils.data.get_worker_info()를 사용해 작업 프로세스 ID별로 스트림을 분할해.