musabc commited on
Commit
84c6753
·
verified ·
1 Parent(s): fd87777

upload 04b_make_val.py

Browse files
Files changed (1) hide show
  1. 04b_make_val.py +133 -0
04b_make_val.py ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ 3 stage .bin dosyasının her birinden val kesimi yapar.
3
+
4
+ Her stage'in son %X'ini val olarak ayırır → ana train .bin'i kısaltır.
5
+ Tüm val parçalarını tek bir v5_val.bin'de birleştirir (training script bunu kullanır).
6
+ Ayrıca per-stage val dosyalarını da bırakır (debug/inceleme için).
7
+
8
+ Cikti:
9
+ data/v5_stage1.bin (kısaltıldı)
10
+ data/v5_stage2.bin (kısaltıldı)
11
+ data/v5_stage3.bin (kısaltıldı)
12
+ data/v5_val_stage1.bin
13
+ data/v5_val_stage2.bin
14
+ data/v5_val_stage3.bin
15
+ data/v5_val.bin (3'ünün birleşimi — training kullanır)
16
+
17
+ Kullanim:
18
+ python 04b_make_val.py # %1 val (varsayilan)
19
+ python 04b_make_val.py --val-ratio 0.005 # %0.5
20
+ python 04b_make_val.py --dry-run # sadece raporla, dosya degistirme
21
+ """
22
+
23
+ import argparse
24
+ from pathlib import Path
25
+
26
+ import numpy as np
27
+
28
+ DATA_DIR = Path(__file__).parent / "data"
29
+ STAGES = [1, 2, 3]
30
+
31
+
32
+ def fmt(n):
33
+ if n >= 1e9:
34
+ return f"{n/1e9:.2f}B"
35
+ if n >= 1e6:
36
+ return f"{n/1e6:.1f}M"
37
+ if n >= 1e3:
38
+ return f"{n/1e3:.1f}K"
39
+ return str(n)
40
+
41
+
42
+ def split_stage(stage: int, val_ratio: float, dry_run: bool):
43
+ src = DATA_DIR / f"v5_stage{stage}.bin"
44
+ val_out = DATA_DIR / f"v5_val_stage{stage}.bin"
45
+
46
+ if not src.exists():
47
+ print(f" ! {src.name} yok, atlandı")
48
+ return None
49
+
50
+ data = np.memmap(src, dtype=np.uint16, mode="r")
51
+ n_total = len(data)
52
+ n_val = int(n_total * val_ratio)
53
+ n_train = n_total - n_val
54
+
55
+ print(f"\nStage {stage}: {src.name}")
56
+ print(f" Toplam: {fmt(n_total)} token")
57
+ print(f" Val: {fmt(n_val)} token ({val_ratio*100:.1f}%)")
58
+ print(f" Train: {fmt(n_train)} token (kalan)")
59
+
60
+ if dry_run:
61
+ print(f" [dry-run] dosya degistirilmedi")
62
+ # Memmap'i kopyala (ana .bin'i etkilemeden)
63
+ val_chunk = np.array(data[-n_val:], dtype=np.uint16)
64
+ return val_chunk
65
+
66
+ # Önce val parçasını ayrı dosyaya yaz
67
+ val_chunk = np.array(data[-n_val:], dtype=np.uint16)
68
+ train_chunk = np.array(data[:n_train], dtype=np.uint16)
69
+
70
+ # Memmap'i kapat
71
+ del data
72
+
73
+ # Val ve train'i yaz (train üzerine yazıyoruz, atomik değil ama tek seferlik)
74
+ val_chunk.tofile(val_out)
75
+ print(f" → {val_out.name} yazıldı ({fmt(len(val_chunk))} token)")
76
+
77
+ # Train'i geri yaz (yeniden boyutlandırılmış)
78
+ train_chunk.tofile(src)
79
+ print(f" → {src.name} kısaltıldı ({fmt(len(train_chunk))} token)")
80
+
81
+ return val_chunk
82
+
83
+
84
+ def main():
85
+ parser = argparse.ArgumentParser()
86
+ parser.add_argument("--val-ratio", type=float, default=0.01,
87
+ help="Her stage'den val'a ayırılacak oran (varsayılan 0.01 = %%1)")
88
+ parser.add_argument("--dry-run", action="store_true",
89
+ help="Sadece raporla, dosyaları değiştirme")
90
+ parser.add_argument("--no-merge", action="store_true",
91
+ help="v5_val.bin birleşik dosyasını yapma")
92
+ args = parser.parse_args()
93
+
94
+ print(f"{'='*60}")
95
+ print(f"V5 VAL KESIMI (ratio={args.val_ratio*100:.1f}%)")
96
+ print(f"{'='*60}")
97
+
98
+ val_chunks = []
99
+ for stage in STAGES:
100
+ chunk = split_stage(stage, args.val_ratio, args.dry_run)
101
+ if chunk is not None:
102
+ val_chunks.append(chunk)
103
+
104
+ if not val_chunks:
105
+ print("\n! Hiçbir stage işlenmedi")
106
+ return
107
+
108
+ if args.dry_run:
109
+ total_val = sum(len(c) for c in val_chunks)
110
+ print(f"\n[dry-run] toplam val: {fmt(total_val)} token (yazılmadı)")
111
+ return
112
+
113
+ # Birleşik val dosyası
114
+ if not args.no_merge:
115
+ merged_path = DATA_DIR / "v5_val.bin"
116
+ merged = np.concatenate(val_chunks).astype(np.uint16)
117
+ merged.tofile(merged_path)
118
+ print(f"\n{'='*60}")
119
+ print(f"Birleşik val: {merged_path.name}")
120
+ print(f" Toplam: {fmt(len(merged))} token "
121
+ f"({merged.nbytes/1e6:.1f} MB)")
122
+ print(f"{'='*60}")
123
+
124
+ print(f"\n[OK] Val kesimi tamam.")
125
+ print(f" Training script bu dosyaları bekliyor:")
126
+ print(f" data/v5_stage1.bin (kısaltıldı)")
127
+ print(f" data/v5_stage2.bin (kısaltıldı)")
128
+ print(f" data/v5_stage3.bin (kısaltıldı)")
129
+ print(f" data/v5_val.bin (3 stage'in karışımı)")
130
+
131
+
132
+ if __name__ == "__main__":
133
+ main()