thefinalboss commited on
Commit
9c2e631
·
verified ·
1 Parent(s): fb739e0

v3_scale: bg1d lancé (PID 838852) — tranches par segment (cm_bg1d_m8.cov.json) + compteur lourds par bot (heavy_checker.sh) + gardes bg1d/div1d

Browse files
v3_scale/scale/cm_bg1d_m8.cov.json ADDED
@@ -0,0 +1,615 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "N": 78364074,
3
+ "segments": [
4
+ {
5
+ "name": "broad_local_v1",
6
+ "byte_start": 0,
7
+ "first_patch": 0,
8
+ "n_patches": 8680605
9
+ },
10
+ {
11
+ "name": "gutenberg_v2",
12
+ "byte_start": 34835259,
13
+ "first_patch": 8680605,
14
+ "n_patches": 69683469
15
+ }
16
+ ],
17
+ "snn": {
18
+ "n_slices": 64,
19
+ "patches": 600000,
20
+ "patches_by_segment": {
21
+ "broad_local_v1": 65625,
22
+ "gutenberg_v2": 534375
23
+ },
24
+ "slices_by_segment": {
25
+ "broad_local_v1": 7,
26
+ "gutenberg_v2": 57,
27
+ "CHEVAUCHE": 0
28
+ },
29
+ "slices_md5": "bab55e5d9d44fea499e9049b52c5af99",
30
+ "byte_offsets_md5": "3a50468e31f7cab3d9b0d4abceed506a",
31
+ "bytes_covered": 2211450,
32
+ "first_last_bytes": [
33
+ [
34
+ 4661151,
35
+ 4703859
36
+ ],
37
+ [
38
+ 290179586,
39
+ 290210348
40
+ ]
41
+ ]
42
+ },
43
+ "am": {
44
+ "n_slices": 64,
45
+ "patches": 1200000,
46
+ "patches_by_segment": {
47
+ "broad_local_v1": 131250,
48
+ "gutenberg_v2": 1068750
49
+ },
50
+ "slices_by_segment": {
51
+ "broad_local_v1": 7,
52
+ "gutenberg_v2": 57,
53
+ "CHEVAUCHE": 0
54
+ },
55
+ "slices_md5": "7276f94960d7bb200b14230955f2c07d",
56
+ "byte_offsets_md5": "26cf65b8a25a17431d2d6571565c9c7b",
57
+ "bytes_covered": 4526250,
58
+ "first_last_bytes": [
59
+ [
60
+ 2570891,
61
+ 2655272
62
+ ],
63
+ [
64
+ 288674578,
65
+ 288735559
66
+ ]
67
+ ]
68
+ },
69
+ "snn_am_disjoint": true,
70
+ "bench_seen": {
71
+ "slice": 32,
72
+ "patch_range": [
73
+ 40215598,
74
+ 40224973
75
+ ],
76
+ "n_patches": 9375,
77
+ "bytes": [
78
+ 153380822,
79
+ 153414962
80
+ ],
81
+ "n_bytes": 34140,
82
+ "segment": "gutenberg_v2",
83
+ "outside_ept_fit_calib_0_2400000": true,
84
+ "outside_fusion_calib_0_60000": true,
85
+ "in_am_slices": false,
86
+ "ids_match_build": true,
87
+ "sha256": "41ff26b784f2614b4789504ab000571bae282223234312210e66096097ac24ff"
88
+ },
89
+ "snn_byte_offsets": [
90
+ [
91
+ 4661151,
92
+ 4703859
93
+ ],
94
+ [
95
+ 10199896,
96
+ 10242465
97
+ ],
98
+ [
99
+ 15735566,
100
+ 15778296
101
+ ],
102
+ [
103
+ 20811473,
104
+ 20841329
105
+ ],
106
+ [
107
+ 25042673,
108
+ 25079787
109
+ ],
110
+ [
111
+ 29553342,
112
+ 29583904
113
+ ],
114
+ [
115
+ 33792551,
116
+ 33820483
117
+ ],
118
+ [
119
+ 38479114,
120
+ 38516880
121
+ ],
122
+ [
123
+ 42846511,
124
+ 42885821
125
+ ],
126
+ [
127
+ 47507622,
128
+ 47539716
129
+ ],
130
+ [
131
+ 52020526,
132
+ 52055819
133
+ ],
134
+ [
135
+ 56629257,
136
+ 56651883
137
+ ],
138
+ [
139
+ 61132303,
140
+ 61162345
141
+ ],
142
+ [
143
+ 65491739,
144
+ 65529941
145
+ ],
146
+ [
147
+ 70189736,
148
+ 70228207
149
+ ],
150
+ [
151
+ 74904914,
152
+ 74942555
153
+ ],
154
+ [
155
+ 78726022,
156
+ 78747244
157
+ ],
158
+ [
159
+ 83041979,
160
+ 83077029
161
+ ],
162
+ [
163
+ 87649342,
164
+ 87684434
165
+ ],
166
+ [
167
+ 92506224,
168
+ 92544180
169
+ ],
170
+ [
171
+ 95860260,
172
+ 95893743
173
+ ],
174
+ [
175
+ 100786039,
176
+ 100824734
177
+ ],
178
+ [
179
+ 105671517,
180
+ 105709584
181
+ ],
182
+ [
183
+ 110619467,
184
+ 110658011
185
+ ],
186
+ [
187
+ 115564726,
188
+ 115602877
189
+ ],
190
+ [
191
+ 120481141,
192
+ 120518641
193
+ ],
194
+ [
195
+ 125417740,
196
+ 125455012
197
+ ],
198
+ [
199
+ 129903316,
200
+ 129933016
201
+ ],
202
+ [
203
+ 134304736,
204
+ 134340886
205
+ ],
206
+ [
207
+ 138821168,
208
+ 138855728
209
+ ],
210
+ [
211
+ 143697600,
212
+ 143731086
213
+ ],
214
+ [
215
+ 148465751,
216
+ 148501464
217
+ ],
218
+ [
219
+ 153380822,
220
+ 153414965
221
+ ],
222
+ [
223
+ 157768698,
224
+ 157805395
225
+ ],
226
+ [
227
+ 162615026,
228
+ 162652898
229
+ ],
230
+ [
231
+ 167575577,
232
+ 167612934
233
+ ],
234
+ [
235
+ 172372376,
236
+ 172411090
237
+ ],
238
+ [
239
+ 177221143,
240
+ 177259522
241
+ ],
242
+ [
243
+ 182207525,
244
+ 182245607
245
+ ],
246
+ [
247
+ 187167439,
248
+ 187204964
249
+ ],
250
+ [
251
+ 192068868,
252
+ 192107179
253
+ ],
254
+ [
255
+ 196975361,
256
+ 197013957
257
+ ],
258
+ [
259
+ 201929058,
260
+ 201967540
261
+ ],
262
+ [
263
+ 206817086,
264
+ 206854830
265
+ ],
266
+ [
267
+ 211753264,
268
+ 211790770
269
+ ],
270
+ [
271
+ 216601348,
272
+ 216637899
273
+ ],
274
+ [
275
+ 221434517,
276
+ 221466057
277
+ ],
278
+ [
279
+ 225475136,
280
+ 225506493
281
+ ],
282
+ [
283
+ 229505602,
284
+ 229536375
285
+ ],
286
+ [
287
+ 233544279,
288
+ 233575369
289
+ ],
290
+ [
291
+ 237596238,
292
+ 237627530
293
+ ],
294
+ [
295
+ 241659330,
296
+ 241690495
297
+ ],
298
+ [
299
+ 245737072,
300
+ 245767749
301
+ ],
302
+ [
303
+ 249778454,
304
+ 249809846
305
+ ],
306
+ [
307
+ 253832910,
308
+ 253863885
309
+ ],
310
+ [
311
+ 257911349,
312
+ 257943813
313
+ ],
314
+ [
315
+ 261994595,
316
+ 262025821
317
+ ],
318
+ [
319
+ 266011266,
320
+ 266042600
321
+ ],
322
+ [
323
+ 270054196,
324
+ 270085125
325
+ ],
326
+ [
327
+ 274077252,
328
+ 274107970
329
+ ],
330
+ [
331
+ 278084137,
332
+ 278114541
333
+ ],
334
+ [
335
+ 282139067,
336
+ 282169557
337
+ ],
338
+ [
339
+ 286168424,
340
+ 286199770
341
+ ],
342
+ [
343
+ 290179586,
344
+ 290210348
345
+ ]
346
+ ],
347
+ "am_byte_offsets": [
348
+ [
349
+ 2570891,
350
+ 2655272
351
+ ],
352
+ [
353
+ 8107954,
354
+ 8193378
355
+ ],
356
+ [
357
+ 13642088,
358
+ 13725858
359
+ ],
360
+ [
361
+ 19189010,
362
+ 19274157
363
+ ],
364
+ [
365
+ 23341427,
366
+ 23415764
367
+ ],
368
+ [
369
+ 27865007,
370
+ 27924864
371
+ ],
372
+ [
373
+ 32255536,
374
+ 32330382
375
+ ],
376
+ [
377
+ 36655964,
378
+ 36729895
379
+ ],
380
+ [
381
+ 41110314,
382
+ 41169156
383
+ ],
384
+ [
385
+ 45876236,
386
+ 45948735
387
+ ],
388
+ [
389
+ 50243341,
390
+ 50315051
391
+ ],
392
+ [
393
+ 54911769,
394
+ 54985092
395
+ ],
396
+ [
397
+ 59467267,
398
+ 59543010
399
+ ],
400
+ [
401
+ 63716962,
402
+ 63792912
403
+ ],
404
+ [
405
+ 68328640,
406
+ 68405486
407
+ ],
408
+ [
409
+ 73052407,
410
+ 73127415
411
+ ],
412
+ [
413
+ 77491885,
414
+ 77552374
415
+ ],
416
+ [
417
+ 81191902,
418
+ 81268618
419
+ ],
420
+ [
421
+ 85908626,
422
+ 85979158
423
+ ],
424
+ [
425
+ 90642726,
426
+ 90718027
427
+ ],
428
+ [
429
+ 94749191,
430
+ 94791298
431
+ ],
432
+ [
433
+ 98903725,
434
+ 98979507
435
+ ],
436
+ [
437
+ 103816924,
438
+ 103892687
439
+ ],
440
+ [
441
+ 108746865,
442
+ 108822448
443
+ ],
444
+ [
445
+ 113687624,
446
+ 113764609
447
+ ],
448
+ [
449
+ 118620827,
450
+ 118697357
451
+ ],
452
+ [
453
+ 123559371,
454
+ 123635577
455
+ ],
456
+ [
457
+ 128420466,
458
+ 128480598
459
+ ],
460
+ [
461
+ 132571234,
462
+ 132643498
463
+ ],
464
+ [
465
+ 137083957,
466
+ 137153092
467
+ ],
468
+ [
469
+ 141843729,
470
+ 141919608
471
+ ],
472
+ [
473
+ 146584615,
474
+ 146661191
475
+ ],
476
+ [
477
+ 151521829,
478
+ 151598991
479
+ ],
480
+ [
481
+ 156078149,
482
+ 156147060
483
+ ],
484
+ [
485
+ 160755919,
486
+ 160831418
487
+ ],
488
+ [
489
+ 165705158,
490
+ 165783081
491
+ ],
492
+ [
493
+ 170644392,
494
+ 170721731
495
+ ],
496
+ [
497
+ 175378152,
498
+ 175452879
499
+ ],
500
+ [
501
+ 180319501,
502
+ 180395370
503
+ ],
504
+ [
505
+ 185284699,
506
+ 185361295
507
+ ],
508
+ [
509
+ 190181814,
510
+ 190257993
511
+ ],
512
+ [
513
+ 195116875,
514
+ 195194373
515
+ ],
516
+ [
517
+ 200051726,
518
+ 200127725
519
+ ],
520
+ [
521
+ 204964345,
522
+ 205038883
523
+ ],
524
+ [
525
+ 209896285,
526
+ 209971124
527
+ ],
528
+ [
529
+ 214807852,
530
+ 214882337
531
+ ],
532
+ [
533
+ 219621117,
534
+ 219696715
535
+ ],
536
+ [
537
+ 223969391,
538
+ 224030774
539
+ ],
540
+ [
541
+ 227994712,
542
+ 228056625
543
+ ],
544
+ [
545
+ 232016673,
546
+ 232079200
547
+ ],
548
+ [
549
+ 236056650,
550
+ 236119008
551
+ ],
552
+ [
553
+ 240119667,
554
+ 240182560
555
+ ],
556
+ [
557
+ 244195500,
558
+ 244259073
559
+ ],
560
+ [
561
+ 248248776,
562
+ 248310002
563
+ ],
564
+ [
565
+ 252308548,
566
+ 252369966
567
+ ],
568
+ [
569
+ 256323790,
570
+ 256388835
571
+ ],
572
+ [
573
+ 260445249,
574
+ 260508269
575
+ ],
576
+ [
577
+ 264495679,
578
+ 264556066
579
+ ],
580
+ [
581
+ 268538320,
582
+ 268600619
583
+ ],
584
+ [
585
+ 272559063,
586
+ 272620479
587
+ ],
588
+ [
589
+ 276575914,
590
+ 276637453
591
+ ],
592
+ [
593
+ 280604816,
594
+ 280666480
595
+ ],
596
+ [
597
+ 284663887,
598
+ 284725739
599
+ ],
600
+ [
601
+ 288674578,
602
+ 288735559
603
+ ]
604
+ ],
605
+ "cov": {
606
+ "arm": "a",
607
+ "N": 78364074,
608
+ "seed": 0,
609
+ "k": 64
610
+ },
611
+ "snn_tokens": 600000,
612
+ "am_tokens": 1200000,
613
+ "train_bin": "/workspace/spira_shared/broad/broad_gutenberg_v1/train.bin",
614
+ "train_bytes": 290810502
615
+ }
v3_scale/scale/eval_bench_v4.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Checker — banc scale v4. Usage : eval_bench_v4.py CKPT CORPUS_NAME TAG env MAXPOS (cap/fenêtre, smoke) WINDOWS HITS OUT
3
+ Fenêtres : seen (corpus propre) + fc2, fresh_en, fresh_fr, neither_code, test20k, queries, test_v3 (octets fixes, identiques pour tous).
4
+ Boucle par position = eval_hits() de checker/eval_ref_v3.py (copie ligne à ligne de SPIRA.eval_stream), importée telle quelle.
5
+ Enregistre wall-time et pic RSS (ru_maxrss) par fenêtre."""
6
+ import os, sys, json, time, resource, hashlib
7
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
8
+ import numpy as np
9
+ from bench_common import *
10
+ ckpt, cname, tag = sys.argv[1:4]; D = os.path.dirname(os.path.abspath(__file__))
11
+ HITS = os.environ.get("HITS", f"{D}/hits_v4"); OUT = os.environ.get("OUT", f"{D}/results_v4.jsonl"); MAXPOS = int(os.environ.get("MAXPOS", "0")); SEL = os.environ.get("WINDOWS")
12
+ src = open(f"{S}/checker/eval_ref_v3.py").read(); g = {"np": np, "fnv1a64": fnv1a64}
13
+ exec(src[src.index("def eval_hits"):src.index("m = SPIRA.load(ckpt)")], g); eval_hits = g["eval_hits"]
14
+ t0 = time.perf_counter(); train = rd(f"{CORPORA[cname]}/train.bin")
15
+ m, kind, saved, cal = load_model(ckpt, train); tload = time.perf_counter() - t0
16
+ SEEN_DEF = "train[2600000:2800000]"; SEEN = train[2_600_000:2_800_000] # Checker 23 h 50 : seen par défaut (inchangé pour les modèles préfixe)
17
+ CJ = ckpt.replace(".npz", ".cov.json") # bg1d/div1d (tranches stratifiées) : seen = octets d'une tranche SNN RÉELLEMENT entraînée (cov_bytes_m8.slice_report)
18
+ if os.path.exists(CJ):
19
+ bs = json.load(open(CJ))["bench_seen"]; w0, w1 = bs["bytes"]; SEEN = train[w0:w1]
20
+ assert hashlib.sha256(SEEN).hexdigest() == bs["sha256"] and bs["n_patches"] > 8000 and bs["outside_ept_fit_calib_0_2400000"], bs
21
+ SEEN_DEF = f"train[{w0}:{w1}] = tranche SNN {bs['slice']} (patches {bs['patch_range']}, segment {bs['segment']}, hors AM)"
22
+ W = {"seen": (SEEN, 8000), **fixed_windows()}; del train, SEEN
23
+ os.makedirs(HITS, exist_ok=True)
24
+ for name, (data, mp) in W.items():
25
+ if SEL and name not in SEL.split(","): continue
26
+ mp = min(mp, MAXPOS) if MAXPOS else mp; t1 = time.perf_counter(); r, H = eval_hits(m, data, max_positions=mp)
27
+ pl = np.fromiter((len(p) for p in m.ept.segment(data)), dtype=np.int64); off = np.concatenate([[0], np.cumsum(pl)])
28
+ n = len(H["fused_hit"]); bb = hashlib.sha256(data).hexdigest() # v4.1 : offsets octets de la cible t+1 → appariement McNemar par octet entre tokenizers différents
29
+ np.savez_compressed(f"{HITS}/{tag}__{name}.npz", **H, tgt_start=off[1:n + 1], tgt_len=pl[1:n + 1], window_sha256=np.array(bb), window_bytes=np.array(len(data)), ept_budget_bits=np.array(float(m.ept.budget_bits)))
30
+ rec = {"tag": tag, "corpus": cname, "ckpt": ckpt, "kind": kind, "window": name, "n_positions": r["n_positions"],
31
+ "fused_invocab_pct": round(100 * r["fused_acc_invocab"], 3), "snn_invocab_pct": round(100 * r["snn_acc_invocab"], 3),
32
+ "vocab_coverage": r["vocab_coverage"], "fusion_saved": saved, "fusion_cal": cal, "load_s": round(tload, 1),
33
+ "eval_s": round(time.perf_counter() - t1, 1), "peak_rss_mb": round(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024, 1),
34
+ "maxpos": MAXPOS, "window_sha256": bb, "window_bytes": len(data), "ept_budget_bits": float(m.ept.budget_bits), "script": "eval_bench_v4.1", **({"seen_def": SEEN_DEF} if name == "seen" else {})}
35
+ open(OUT, "a").write(json.dumps(rec) + "\n"); print(name, rec["fused_invocab_pct"], rec["eval_s"], rec["peak_rss_mb"], flush=True)
v3_scale/scale/gate_bg1d_m8.sh ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Checker 23 h 55 (Toronto) — garde M8 broad_gutenberg_v1 bg1d (64 tranches stratifiées sur TOUT le flux ; diag_m8_coverage_2315.md).
3
+ # COPIE de gate_bg1c_m8_v2.sh ; changements : script train_cm_m8_bg1d.py, sortie cm_bg1d_m8.npz, journaux *_bg1d_*, fichier .ok =
4
+ # logs/bg1d_test.ok (test petit cas PASS : tranches == train_cm_m8_full.py, build bit-identique bg1c, part Gutenberg, pic RSS),
5
+ # PID écrit dans logs/bg1d.pid, pas d'ajout au relais au lancement (section relais unique écrite par le Checker).
6
+ # Prioritaire : gate_ok.sh (motif adapté gate_bg1[cd]/train_cm_m8_bg1[cd]) répond NON aux autres tant que cette garde attend.
7
+ # Lance UNE fois quand : .ok présent ET gate_ok.sh --bg1c = OUI (lourds < 4, MemAvailable >= 4 Go) ET MemAvailable >= 4,5 Go ET pas de sortie.
8
+ # ulimit -v (ULIMIT_KB du .ok, 4 Go) : MemoryError propre plutôt qu'un OOM-kill des autres. nice 10, OMP=1, sleep 60. Ne tue rien.
9
+ export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 TZ=America/Toronto
10
+ D=/workspace/spira_shared/checker/scale; PY=/workspace/SPIRA-venv/bin/python; cd $D
11
+ OUT=$D/cm_bg1d_m8.npz; L=$D/logs/train_cm_bg1d_m8.log; OK=$D/logs/bg1d_test.ok
12
+ log(){ echo "$(TZ=America/Toronto date '+%F %H:%M:%S') $*" >> $D/logs/gate_bg1d_m8.log; }
13
+ log "garde bg1d (seuil 4,5 Go) démarrée pid $$"
14
+ while true; do
15
+ if [ -f "$OUT" ]; then log "sortie $OUT existe déjà : rien à lancer"; exit 0; fi
16
+ g=$(bash /workspace/spira_shared/checker/gate_ok.sh --bg1c); mem=$(awk '/MemAvailable/{print $2}' /proc/meminfo)
17
+ if [ -f "$OK" ] && echo "$g" | grep -q '^OUI' && [ "$mem" -ge 4718592 ]; then
18
+ ULIMIT_KB=$(awk -F= '/^ULIMIT_KB=/{print $2}' "$OK"); [ -n "$ULIMIT_KB" ] || ULIMIT_KB=4194304
19
+ cd $D/logs; ( ulimit -v $ULIMIT_KB; exec nice -n 10 $PY -u $D/train_cm_m8_bg1d.py concat $OUT ) > $L 2>&1 & TP=$!; cd $D
20
+ echo $TP > $D/logs/bg1d.pid
21
+ log "LANCÉ entraînement PID $TP ($g ; mem $((mem/1024)) Mo ; ulimit -v $ULIMIT_KB kB)"
22
+ wait $TP; rc=$?
23
+ pk=$(grep -o 'pic_RSS=[0-9.]*Go' $L | tail -1)
24
+ log "FIN entraînement PID $TP : code $rc, dernier $pk, sortie $( [ -f $OUT ] && echo présente || echo ABSENTE )"
25
+ exit 0
26
+ fi
27
+ log "attente : $g ; mem $((mem/1024)) Mo ; test_ok=$( [ -f $OK ] && echo oui || echo non )"; sleep 60
28
+ done
v3_scale/scale/gate_div1d_m8.sh ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Checker 23 h 40 (Toronto) — garde div1d = COPIE de gate_div1c_m8.sh (garde 725157 arrêtée) ; changements : script train_cm_m8_div1d.py
3
+ # (64 tranches stratifiées sur TOUT corpus_diverse_v1, test petit cas test_div1d/ PASS), attend bg1d (gate_bg1d_m8.sh / train_cm_m8_bg1d.py /
4
+ # cm_bg1d_m8.npz) au lieu de bg1c, sortie cm_div1d_m8.npz, journaux *_div1d_*, .ok = logs/div1d_test.ok, tag div1_m8 déjà dans jobs_v4.tsv.
5
+ # --- en-tête div1c ---
6
+ # Checker 22 h 11 (Toronto) — garde M8 corpus_diverse_v1 (concat) div1c, APRÈS M8 bg1c (prioritaire). nice 10, sleep 60. Ne tue rien. Lance UNE fois quand :
7
+ # 1) bg1c terminé AVEC succès : aucune gate_bg1c_m8.sh ni train_cm_m8_bg1c.py vivante ET cm_bg1c_m8.npz présent
8
+ # (bg1c fini SANS sortie → pas de lancement, journal + relais, exit 1 : décision humaine) ;
9
+ # 2) corpus_diverse_v1/train.bin = sha du manifest ; 3) gate_ok.sh = OUI (lourds < 4, aucune attente prioritaire) ;
10
+ # 4) MemAvailable >= max(6 Go, 2 × pic RSS bg1c) (corpus 530 Mo ≈ 1,8 × bg1c 291 Mo) ; 5) pas de sortie cm_div1c_m8.npz.
11
+ # ulimit -v = 1,8 × ULIMIT_KB de bg1c (heuristique taille corpus, plafonné à MemAvailable − 1 Go) : MemoryError propre plutôt qu'OOM-kill.
12
+ export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 TZ=America/Toronto
13
+ S=/workspace/spira_shared; D=$S/checker/scale; PY=/workspace/SPIRA-venv/bin/python; cd $D
14
+ OUT=$D/cm_div1d_m8.npz; L=$D/logs/train_cm_div1d_m8.log; BG=$D/cm_bg1d_m8.npz; OK=$D/logs/div1d_test.ok
15
+ SHA=$(python3 -c "import json;print(json.load(open('$S/corpus_diverse_v1/manifest.json'))['files']['train.bin']['sha256'])")
16
+ log(){ echo "$(date '+%F %H:%M:%S') $*" >> $D/logs/gate_div1d_m8.log; }
17
+ log "garde div1d démarrée pid $$ (après bg1d)"
18
+ while true; do
19
+ if [ -f "$OUT" ]; then log "sortie $OUT existe déjà : rien à lancer"; exit 0; fi
20
+ nb=$(pgrep -f gate_bg1d_m8.sh | wc -l); nt=$(pgrep -f train_cm_m8_bg1d.py | wc -l)
21
+ if [ "$nb" -gt 0 ] || [ "$nt" -gt 0 ]; then log "attente bg1d (garde $nb, train $nt)"; sleep 60; continue; fi
22
+ if [ ! -f "$BG" ]; then
23
+ if [ -f $D/logs/gate_bg1d_m8.log ] && grep -q "FIN entraînement" $D/logs/gate_bg1d_m8.log; then
24
+ log "bg1d fini SANS cm_bg1d_m8.npz : div1d NON lancé (exit 1)"
25
+ nice -n 10 $PY $D/relay_append_v3.py "## Checker — {H} — M8 div1d NON lancé : bg1d fini sans sortie (voir logs/gate_bg1d_m8.log). Décision humaine requise."
26
+ exit 1
27
+ fi
28
+ log "attente : bg1d pas encore lancé/terminé (pas de cm_bg1d_m8.npz)"; sleep 60; continue
29
+ fi
30
+ g=$(bash $S/checker/gate_ok.sh); mem=$(awk '/MemAvailable/{print $2}' /proc/meminfo)
31
+ pk=$(python3 -c "import json;print(json.load(open('${BG%.npz}.summary.json')).get('peak_rss_kB',0))" 2>/dev/null || echo 0)
32
+ need=$(( 2*pk > 6291456 ? 2*pk : 6291456 ))
33
+ if [ -f "$OK" ] && echo "$g" | grep -q '^OUI' && [ "$mem" -ge "$need" ]; then
34
+ cur=$(sha256sum $S/corpus_diverse_v1/train.bin | cut -d' ' -f1)
35
+ if [ "$cur" != "$SHA" ]; then log "sha corpus_diverse_v1 ≠ manifest ($cur) : NON lancé (exit 1)"; exit 1; fi
36
+ UB=$(awk -F= '/^ULIMIT_KB=/{print $2}' "$OK" 2>/dev/null); [ -n "$UB" ] || UB=4194304
37
+ UL=$(( UB*18/10 )); cap=$(( mem - 1048576 )); [ "$UL" -gt "$cap" ] && UL=$cap
38
+ cd $D/logs; ( ulimit -v $UL; exec nice -n 10 $PY -u $D/train_cm_m8_div1d.py concat $OUT ) > $L 2>&1 & TP=$!; cd $D
39
+ log "LANCÉ entraînement div1d PID $TP ($g ; mem $((mem/1024)) Mo ; besoin $((need/1024)) Mo ; ulimit -v $UL kB)"
40
+ echo $TP > $D/logs/div1d.pid
41
+ nice -n 10 $PY $D/relay_append_v3.py "## Checker — {H} — M8 corpus_diverse_v1 (concat) div1d LANCÉ (après bg1d ; 64 tranches stratifiées)
42
+ - PID $TP (nice 10, OMP_NUM_THREADS=1, ulimit -v $UL kB), sortie checker/scale/cm_div1d_m8.npz, journal checker/scale/logs/train_cm_div1d_m8.log ; job div1_m8 (jobs_v4.tsv) ; part par segment : checker/scale/cm_div1d_m8.cov.json."
43
+ wait $TP; rc=$?
44
+ log "FIN entraînement PID $TP : code $rc, dernier $(grep -o 'pic_RSS=[0-9.]*Go' $L | tail -1), sortie $( [ -f $OUT ] && echo présente || echo ABSENTE )"
45
+ exit 0
46
+ fi
47
+ log "attente : $g ; mem $((mem/1024)) Mo ; besoin $((need/1024)) Mo"; sleep 60
48
+ done
v3_scale/scale/gate_ok.sh ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # gate_ok.sh : imprime OUI/NON. OUI ssi lourds Checker < 4 ET MemAvailable (/proc/meminfo) >= 4 Go ET aucune porte gut1 en attente
3
+ # ET garde M8 broad_gutenberg_v1 bas-mémoire (gate_bg1c_m8.sh) pas en attente (priorité au prochain créneau ;
4
+ # remplace la condition bg1b — 22 h 05 Toronto, bg1b mort OOM 21 h 48). Option --bg1c : appel par gate_bg1c_m8.sh elle-même
5
+ # (ignore sa propre attente bg1c ET l'attente gut1 : priorité à bg1c).
6
+ # Checker 23 h 35 (Toronto) : motif étendu à bg1d (garde gate_bg1d_m8.sh, qui appelle --bg1c) ; sauvegarde scale/logs/gate_ok.sh.bak_2335.
7
+ # Checker 23 h 50 (Toronto) : libellé bg1c_en_attente -> bg1d_en_attente (seule garde bg1 vivante = gate_bg1d_m8.sh ; 756204/756275 arrêtés 23 h 34) ; heavy_checker.sh exclut les process au cwd d'un autre bot ; sauvegarde scale/logs/gate_ok.sh.bak_2350.
8
+ # Checker 23 h 58 (Toronto) : plancher MemAvailable relevé de 4 Gio (4194304 kB) à 4,5 Go décimal (4394532 kB) sur demande Relay 23 h 52 ; sauvegarde scale/logs/gate_ok.sh.bak_2358.
9
+ n=$(bash /workspace/spira_shared/checker/scale/heavy_checker.sh); m=$(awk '/MemAvailable/{print $2}' /proc/meminfo)
10
+ g=$(pgrep -f pipeline_gut1 | wc -l); t=$(pgrep -f "cm_gut1_cov_b" | wc -l)
11
+ w=0; [ "$g" -gt 0 ] && [ "$t" -eq 0 ] && w=1
12
+ b=0; [ $(pgrep -f "gate_bg1[cd]_m8(_v2)?\.sh" | wc -l) -gt 0 ] && [ $(pgrep -f "train_cm_m8_bg1[cd]\.py" | wc -l) -eq 0 ] && b=1 # 23 h 35 : + bg1d (gate_bg1d_m8.sh / train_cm_m8_bg1d.py)
13
+ if [ "$1" = "--bg1c" ]; then w=0; b=0; fi
14
+ if [ "$n" -lt 4 ] && [ "$m" -ge 4394532 ] && [ "$w" -eq 0 ] && [ "$b" -eq 0 ]; then r=OUI; else r=NON; fi
15
+ echo "$r lourds=$n memavail_kB=$m gut1_en_attente=$w bg1d_en_attente=$b"
v3_scale/scale/heavy_checker.sh ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Lourds Checker (corrigé 21 h 30) : TOUT python SPIRA-venv dont la commande OU le cwd touche un dossier Checker
3
+ # (checker/, spira_m8/, corpus_diverse_v1/, corpus_code_multi_v1/), sauf scripts légers (relay_append, verdict*, test_bitident).
4
+ # Option -v : liste les PID. Sauvegarde avant modif 23 h 50 : scale/logs/heavy_checker.sh.bak_2350.
5
+ n=0; L=""
6
+ for p in $(pgrep -f "^/workspace/SPIRA-venv/bin/python"); do
7
+ a=$(tr '\0' ' ' < /proc/$p/cmdline 2>/dev/null) || continue; c=$(readlink /proc/$p/cwd 2>/dev/null)
8
+ echo "$a" | grep -qE "relay_append|verdict|test_bitident" && continue
9
+ # 23 h 50 (Toronto) : règle = max 4 lourds par bot -> un process dont le cwd est dans le dossier d'un AUTRE bot
10
+ # (spira_shared/<autre>, /tmp) n'est PAS Checker même s'il appelle un script Checker (ex. 827525 Hashing : eval_bench_v4.py, cwd hashing_gen/m7_v41).
11
+ case "$c" in /workspace/spira_shared/checker*|/workspace/spira_shared/spira_m8*|/workspace/spira_shared/corpus_diverse_v1*|/workspace/spira_shared/corpus_code_multi_v1*) ;;
12
+ /tmp*|/workspace/spira_shared/?*) continue ;; esac
13
+ echo "$a $c" | grep -qE "spira_shared/(checker|spira_m8|corpus_diverse_v1|corpus_code_multi_v1)|checker/|spira_m8/" || continue
14
+ n=$((n+1)); L="$L $p"
15
+ done
16
+ [ "$1" = -v ] && echo "PIDs:$L"; echo $n