C.W.K.
Stream
Lesson 05 of 08 · published

Streaming Datasets 와 IterableDataset

~26 min · datasets, streaming

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Streaming 이 유일한 옵션일 때

디스크보다 큰 데이터셋 — FineWeb, RedPajama, common-crawl 파생 셋 — streaming=True 필수. 돌아오는 IterableDataset 은 절대 materialize 안 됨; 밑단 Parquet shard 에서 on-demand 로 examples pull.

뭐가 바뀌나

  • len() X, ds[i] X. Forward-only iteration.
  • map 동작하지만 lazy (pre-bake 아니라 iteration 시 변환).
  • filter 동작하지만 rejection rate 가 중요 — 99% filter 면 I/O 99% 낭비.
  • shuffle(buffer_size=N) 가 size N reservoir sample 사용, 글로벌 shuffle X.

분산 학습용 multi-shard sharding

iter_dataset = ds.shard(num_shards=8, index=worker_id) 가 다른 shard 를 다른 DataLoader worker 에. load_dataset(..., streaming=True)distributed hint 가 DDP 셋업에서 PyTorch DataLoader 로 wrap 할 때 자동 처리.

Code

Streaming + map + shuffle·python
from datasets import load_dataset

ds = load_dataset(
    "HuggingFaceFW/fineweb",
    name="sample-10BT",
    streaming=True,
    split="train",
)

# Filter, then map, then shuffle (with a buffer)
ds = ds.filter(lambda ex: len(ex["text"]) > 500)
ds = ds.map(lambda ex: {"upper_first_word": ex["text"].split(" ")[0].upper()})
ds = ds.shuffle(buffer_size=10000, seed=42)

for i, ex in enumerate(ds):
    if i >= 3: break
    print(ex["upper_first_word"], ex["text"][:80])
PyTorch DataLoader 용 streaming 데이터셋 wrap·python
from datasets import load_dataset
from torch.utils.data import DataLoader

ds = load_dataset("HuggingFaceFW/fineweb", name="sample-10BT", streaming=True, split="train")
ds = ds.with_format("torch")

loader = DataLoader(ds, batch_size=4, num_workers=2)
for i, batch in enumerate(loader):
    if i >= 2: break
    print(type(batch), list(batch.keys()))

External links

Exercise

FineWeb sample-10BT 의 처음 1k 행 stream. 영어 같은 텍스트 (cheap heuristic — text.isascii() 비율) 만 keep 하는 filter, buffer_size=1000 shuffle. 전체 파이프라인 시간 측정. 풀 sample-10BT 다운로드 후 같은 거 오프라인 비교.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.