데이터가 디스크보다 크면 스트리밍부터 생각해
FineWeb이나 RedPajama처럼 수 TB에 이르는 데이터셋은 streaming=True로 열어야 해. 반환되는 IterableDataset는 전체를 만들지 않고 Parquet shard에서 필요한 예제를 그때그때 읽어.
len()과ds[i]는 쓸 수 없고 앞에서부터 순서대로 순회해.map은 미리 굽지 않고 순회하는 순간 변환해.filter도 지연 실행되므로 99%를 버리는 조건이면 I/O 역시 99% 낭비돼.shuffle(buffer_size=N)은 크기 N인 버퍼 안에서 섞을 뿐 전체 순서를 완전히 뒤섞지는 않아.
작업자마다 다른 shard를 맡겨
ds.shard(num_shards=8, index=worker_id)로 각 DataLoader 작업자에게 다른 shard를 배분할 수 있어. 분산 학습에서 중복 표본을 막으려면 순회 전에 이 분할 계약을 확인해야 해.