File size: 1,587 Bytes
20423e7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # stream_data.py - rolling-shard streaming tokenizer (v13/v15 Stage 0).
# Streams Cosmopedia + FineWeb-Edu, tokenizes with the project BPE, writes rolling
# shards of SHARD_TOK tokens each; keeps at most KEEP shards on disk (delete oldest).
# UNIQUE tokens forever - never re-reads (measured overfit wall, v12 8.2).
import numpy as np, itertools, sys
from pathlib import Path
from datasets import load_dataset
from tokenizers import Tokenizer
OUT=Path('/root/dna/data'); OUT.mkdir(parents=True,exist_ok=True)
tok=Tokenizer.from_file('/root/dna/fineweb-tokenizer.json')
SHARD_TOK=25_000_000
KEEP=40
def streams():
fw=load_dataset('HuggingFaceFW/fineweb-edu','sample-100BT',split='train',streaming=True)
co=load_dataset('HuggingFaceTB/cosmopedia','web_samples_v2',split='train',streaming=True)
fi=iter(fw); ci=iter(co)
while True:
for _ in range(3):
yield next(fi)['text']
try: yield next(ci)['text']
except Exception: pass
def main():
it=streams(); si=0; buf=np.empty(SHARD_TOK,np.uint16); n=0; total=0
for txt in it:
ids=tok.encode(txt).ids
for x in ids:
buf[n]=x; n+=1
if n==SHARD_TOK:
tmp=OUT/f'shard_{si:05d}.tmp'; buf.tofile(tmp)
tmp.rename(OUT/f'shard_{si:05d}.u16')
total+=n; print(f'SHARD {si} done total_tokens {total:,}',flush=True)
si+=1; n=0
old=sorted(OUT.glob('shard_*.u16'))
while len(old)>KEEP:
old[0].unlink(); old=old[1:]
if __name__=='__main__': main()
|