File size: 47,079 Bytes
77ba698
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "138889b92720ce2e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T15:07:36.238754Z",
     "start_time": "2024-04-30T15:07:35.974657Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>runname</th>\n",
       "      <th>seed</th>\n",
       "      <th>steps</th>\n",
       "      <th>agg_score</th>\n",
       "      <th>commonsense_qa/acc</th>\n",
       "      <th>commonsense_qa/acc_norm</th>\n",
       "      <th>hellaswag/acc</th>\n",
       "      <th>hellaswag/acc_norm</th>\n",
       "      <th>openbookqa/acc</th>\n",
       "      <th>openbookqa/acc_norm</th>\n",
       "      <th>...</th>\n",
       "      <th>siqa/acc</th>\n",
       "      <th>siqa/acc_norm</th>\n",
       "      <th>winogrande/acc</th>\n",
       "      <th>winogrande/acc_norm</th>\n",
       "      <th>sciq/acc</th>\n",
       "      <th>sciq/acc_norm</th>\n",
       "      <th>arc/acc</th>\n",
       "      <th>arc/acc_norm</th>\n",
       "      <th>mmlu/acc</th>\n",
       "      <th>mmlu/acc_norm</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>big-run-sampled_full_filtered_no_dedup</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>0.330893</td>\n",
       "      <td>0.186</td>\n",
       "      <td>0.233</td>\n",
       "      <td>0.272</td>\n",
       "      <td>0.258</td>\n",
       "      <td>0.166</td>\n",
       "      <td>0.286</td>\n",
       "      <td>...</td>\n",
       "      <td>0.367</td>\n",
       "      <td>0.362</td>\n",
       "      <td>0.516</td>\n",
       "      <td>0.497</td>\n",
       "      <td>0.209</td>\n",
       "      <td>0.202</td>\n",
       "      <td>0.2195</td>\n",
       "      <td>0.2510</td>\n",
       "      <td>0.230294</td>\n",
       "      <td>0.250147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>big-run-sampled_full_filtered_no_dedup</td>\n",
       "      <td>6</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.360520</td>\n",
       "      <td>0.254</td>\n",
       "      <td>0.260</td>\n",
       "      <td>0.290</td>\n",
       "      <td>0.281</td>\n",
       "      <td>0.138</td>\n",
       "      <td>0.256</td>\n",
       "      <td>...</td>\n",
       "      <td>0.362</td>\n",
       "      <td>0.400</td>\n",
       "      <td>0.517</td>\n",
       "      <td>0.524</td>\n",
       "      <td>0.573</td>\n",
       "      <td>0.515</td>\n",
       "      <td>0.2675</td>\n",
       "      <td>0.2895</td>\n",
       "      <td>0.239489</td>\n",
       "      <td>0.251660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>big-run-sampled_full_filtered_no_dedup</td>\n",
       "      <td>6</td>\n",
       "      <td>2000</td>\n",
       "      <td>0.373315</td>\n",
       "      <td>0.285</td>\n",
       "      <td>0.278</td>\n",
       "      <td>0.315</td>\n",
       "      <td>0.323</td>\n",
       "      <td>0.138</td>\n",
       "      <td>0.272</td>\n",
       "      <td>...</td>\n",
       "      <td>0.365</td>\n",
       "      <td>0.395</td>\n",
       "      <td>0.509</td>\n",
       "      <td>0.490</td>\n",
       "      <td>0.677</td>\n",
       "      <td>0.596</td>\n",
       "      <td>0.3075</td>\n",
       "      <td>0.3235</td>\n",
       "      <td>0.250318</td>\n",
       "      <td>0.261019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>big-run-sampled_full_filtered_no_dedup</td>\n",
       "      <td>6</td>\n",
       "      <td>3000</td>\n",
       "      <td>0.388201</td>\n",
       "      <td>0.294</td>\n",
       "      <td>0.291</td>\n",
       "      <td>0.327</td>\n",
       "      <td>0.341</td>\n",
       "      <td>0.152</td>\n",
       "      <td>0.298</td>\n",
       "      <td>...</td>\n",
       "      <td>0.371</td>\n",
       "      <td>0.396</td>\n",
       "      <td>0.512</td>\n",
       "      <td>0.504</td>\n",
       "      <td>0.712</td>\n",
       "      <td>0.621</td>\n",
       "      <td>0.3220</td>\n",
       "      <td>0.3390</td>\n",
       "      <td>0.255646</td>\n",
       "      <td>0.266605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>big-run-sampled_full_filtered_no_dedup</td>\n",
       "      <td>6</td>\n",
       "      <td>4000</td>\n",
       "      <td>0.393412</td>\n",
       "      <td>0.306</td>\n",
       "      <td>0.307</td>\n",
       "      <td>0.337</td>\n",
       "      <td>0.360</td>\n",
       "      <td>0.172</td>\n",
       "      <td>0.284</td>\n",
       "      <td>...</td>\n",
       "      <td>0.380</td>\n",
       "      <td>0.402</td>\n",
       "      <td>0.522</td>\n",
       "      <td>0.510</td>\n",
       "      <td>0.729</td>\n",
       "      <td>0.612</td>\n",
       "      <td>0.3100</td>\n",
       "      <td>0.3385</td>\n",
       "      <td>0.253048</td>\n",
       "      <td>0.266798</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>501</th>\n",
       "      <td>big-run-fineweb-cross-dedup-fixed</td>\n",
       "      <td>6</td>\n",
       "      <td>163000</td>\n",
       "      <td>0.466306</td>\n",
       "      <td>0.391</td>\n",
       "      <td>0.371</td>\n",
       "      <td>0.459</td>\n",
       "      <td>0.547</td>\n",
       "      <td>0.210</td>\n",
       "      <td>0.344</td>\n",
       "      <td>...</td>\n",
       "      <td>0.401</td>\n",
       "      <td>0.388</td>\n",
       "      <td>0.564</td>\n",
       "      <td>0.562</td>\n",
       "      <td>0.884</td>\n",
       "      <td>0.807</td>\n",
       "      <td>0.4535</td>\n",
       "      <td>0.4450</td>\n",
       "      <td>0.300475</td>\n",
       "      <td>0.320448</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>502</th>\n",
       "      <td>big-run-fineweb-cross-dedup-fixed</td>\n",
       "      <td>6</td>\n",
       "      <td>164000</td>\n",
       "      <td>0.468313</td>\n",
       "      <td>0.395</td>\n",
       "      <td>0.374</td>\n",
       "      <td>0.459</td>\n",
       "      <td>0.548</td>\n",
       "      <td>0.208</td>\n",
       "      <td>0.350</td>\n",
       "      <td>...</td>\n",
       "      <td>0.402</td>\n",
       "      <td>0.395</td>\n",
       "      <td>0.559</td>\n",
       "      <td>0.561</td>\n",
       "      <td>0.876</td>\n",
       "      <td>0.795</td>\n",
       "      <td>0.4540</td>\n",
       "      <td>0.4445</td>\n",
       "      <td>0.299279</td>\n",
       "      <td>0.321007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>503</th>\n",
       "      <td>big-run-fineweb-cross-dedup-fixed</td>\n",
       "      <td>6</td>\n",
       "      <td>165000</td>\n",
       "      <td>0.468639</td>\n",
       "      <td>0.397</td>\n",
       "      <td>0.374</td>\n",
       "      <td>0.450</td>\n",
       "      <td>0.548</td>\n",
       "      <td>0.208</td>\n",
       "      <td>0.358</td>\n",
       "      <td>...</td>\n",
       "      <td>0.400</td>\n",
       "      <td>0.391</td>\n",
       "      <td>0.552</td>\n",
       "      <td>0.556</td>\n",
       "      <td>0.876</td>\n",
       "      <td>0.787</td>\n",
       "      <td>0.4490</td>\n",
       "      <td>0.4420</td>\n",
       "      <td>0.298460</td>\n",
       "      <td>0.319108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>504</th>\n",
       "      <td>big-run-fineweb-cross-dedup-fixed</td>\n",
       "      <td>6</td>\n",
       "      <td>166000</td>\n",
       "      <td>0.465767</td>\n",
       "      <td>0.412</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.458</td>\n",
       "      <td>0.552</td>\n",
       "      <td>0.214</td>\n",
       "      <td>0.348</td>\n",
       "      <td>...</td>\n",
       "      <td>0.403</td>\n",
       "      <td>0.398</td>\n",
       "      <td>0.551</td>\n",
       "      <td>0.553</td>\n",
       "      <td>0.877</td>\n",
       "      <td>0.802</td>\n",
       "      <td>0.4465</td>\n",
       "      <td>0.4345</td>\n",
       "      <td>0.298333</td>\n",
       "      <td>0.318637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>505</th>\n",
       "      <td>big-run-fineweb-cross-dedup-fixed</td>\n",
       "      <td>6</td>\n",
       "      <td>167000</td>\n",
       "      <td>0.469262</td>\n",
       "      <td>0.399</td>\n",
       "      <td>0.377</td>\n",
       "      <td>0.459</td>\n",
       "      <td>0.550</td>\n",
       "      <td>0.220</td>\n",
       "      <td>0.348</td>\n",
       "      <td>...</td>\n",
       "      <td>0.406</td>\n",
       "      <td>0.401</td>\n",
       "      <td>0.564</td>\n",
       "      <td>0.560</td>\n",
       "      <td>0.882</td>\n",
       "      <td>0.798</td>\n",
       "      <td>0.4480</td>\n",
       "      <td>0.4405</td>\n",
       "      <td>0.297617</td>\n",
       "      <td>0.319592</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>506 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    runname  seed   steps  agg_score  \\\n",
       "0    big-run-sampled_full_filtered_no_dedup     6       0   0.330893   \n",
       "1    big-run-sampled_full_filtered_no_dedup     6    1000   0.360520   \n",
       "2    big-run-sampled_full_filtered_no_dedup     6    2000   0.373315   \n",
       "3    big-run-sampled_full_filtered_no_dedup     6    3000   0.388201   \n",
       "4    big-run-sampled_full_filtered_no_dedup     6    4000   0.393412   \n",
       "..                                      ...   ...     ...        ...   \n",
       "501       big-run-fineweb-cross-dedup-fixed     6  163000   0.466306   \n",
       "502       big-run-fineweb-cross-dedup-fixed     6  164000   0.468313   \n",
       "503       big-run-fineweb-cross-dedup-fixed     6  165000   0.468639   \n",
       "504       big-run-fineweb-cross-dedup-fixed     6  166000   0.465767   \n",
       "505       big-run-fineweb-cross-dedup-fixed     6  167000   0.469262   \n",
       "\n",
       "     commonsense_qa/acc  commonsense_qa/acc_norm  hellaswag/acc  \\\n",
       "0                 0.186                    0.233          0.272   \n",
       "1                 0.254                    0.260          0.290   \n",
       "2                 0.285                    0.278          0.315   \n",
       "3                 0.294                    0.291          0.327   \n",
       "4                 0.306                    0.307          0.337   \n",
       "..                  ...                      ...            ...   \n",
       "501               0.391                    0.371          0.459   \n",
       "502               0.395                    0.374          0.459   \n",
       "503               0.397                    0.374          0.450   \n",
       "504               0.412                    0.375          0.458   \n",
       "505               0.399                    0.377          0.459   \n",
       "\n",
       "     hellaswag/acc_norm  openbookqa/acc  openbookqa/acc_norm  ...  siqa/acc  \\\n",
       "0                 0.258           0.166                0.286  ...     0.367   \n",
       "1                 0.281           0.138                0.256  ...     0.362   \n",
       "2                 0.323           0.138                0.272  ...     0.365   \n",
       "3                 0.341           0.152                0.298  ...     0.371   \n",
       "4                 0.360           0.172                0.284  ...     0.380   \n",
       "..                  ...             ...                  ...  ...       ...   \n",
       "501               0.547           0.210                0.344  ...     0.401   \n",
       "502               0.548           0.208                0.350  ...     0.402   \n",
       "503               0.548           0.208                0.358  ...     0.400   \n",
       "504               0.552           0.214                0.348  ...     0.403   \n",
       "505               0.550           0.220                0.348  ...     0.406   \n",
       "\n",
       "     siqa/acc_norm  winogrande/acc  winogrande/acc_norm  sciq/acc  \\\n",
       "0            0.362           0.516                0.497     0.209   \n",
       "1            0.400           0.517                0.524     0.573   \n",
       "2            0.395           0.509                0.490     0.677   \n",
       "3            0.396           0.512                0.504     0.712   \n",
       "4            0.402           0.522                0.510     0.729   \n",
       "..             ...             ...                  ...       ...   \n",
       "501          0.388           0.564                0.562     0.884   \n",
       "502          0.395           0.559                0.561     0.876   \n",
       "503          0.391           0.552                0.556     0.876   \n",
       "504          0.398           0.551                0.553     0.877   \n",
       "505          0.401           0.564                0.560     0.882   \n",
       "\n",
       "     sciq/acc_norm  arc/acc  arc/acc_norm  mmlu/acc  mmlu/acc_norm  \n",
       "0            0.202   0.2195        0.2510  0.230294       0.250147  \n",
       "1            0.515   0.2675        0.2895  0.239489       0.251660  \n",
       "2            0.596   0.3075        0.3235  0.250318       0.261019  \n",
       "3            0.621   0.3220        0.3390  0.255646       0.266605  \n",
       "4            0.612   0.3100        0.3385  0.253048       0.266798  \n",
       "..             ...      ...           ...       ...            ...  \n",
       "501          0.807   0.4535        0.4450  0.300475       0.320448  \n",
       "502          0.795   0.4540        0.4445  0.299279       0.321007  \n",
       "503          0.787   0.4490        0.4420  0.298460       0.319108  \n",
       "504          0.802   0.4465        0.4345  0.298333       0.318637  \n",
       "505          0.798   0.4480        0.4405  0.297617       0.319592  \n",
       "\n",
       "[506 rows x 22 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from matplotlib.figure import Figure\n",
    "\n",
    "df = pd.read_csv(\"../src_data/cross_dedup_refinedweb_filtered.csv\")\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b610f43caefdf01",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T15:07:36.242016Z",
     "start_time": "2024-04-30T15:07:36.239657Z"
    },
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "runs_mapping = {\n",
    "    \"big-run-refinedweb\": \"RefinedWeb\",\n",
    "    \"big-run-fineweb-cross-dedup-fixed\": \"FineWeb full MinHash\",\n",
    "    \"big-run-sampled_full_filtered_no_dedup\": \"FineWeb filtered only\"\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "initial_id",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T15:07:36.360665Z",
     "start_time": "2024-04-30T15:07:36.242724Z"
    },
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
     ]
    },
    {
     "data": {
      "image/png": "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ERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsMQgRERGRbDEIERERkWwxCBEREZFsGTwIzZ07F+7u7jAzM4OPjw+OHz/+3v6zZs1ChQoVYG5uDldXVwwZMgSvXr3Ko2qJiIioMDFoEFqzZg3CwsIQHh6O06dPo1q1aggICMCjR4+09v/9998xfPhwhIeH4/Lly1iyZAnWrFmD77//Po8rJyIiosLAoEFoxowZ6NWrF7p16wYvLy8sWLAAFhYW+PXXX7X2P3LkCOrWrYtOnTrB3d0dTZs2RceOHT+4FYmIiIhIG4MFodTUVJw6dQr+/v7/K8bICP7+/oiKitI6TZ06dXDq1Ckp+Ny6dQvbt29HixYtslxOSkoKEhMTNW5EREREAGBiqAXHxcUhPT0djo6OGu2Ojo64cuWK1mk6deqEuLg41KtXD0IIpKWloU+fPu/dNRYREYFx48blau1ERERUOBj8YGldHDhwAJMmTcK8efNw+vRpbNiwAdu2bcP48eOznGbEiBFISEiQbvfv38/DiomIiCg/M9gWIXt7exgbGyM2NlajPTY2Fk5OTlqnGT16NLp06YKePXsCAKpUqYKkpCT07t0bI0eOhJFR5lynUqmgUqlyfwWIiIiowDPYFiGlUglvb29ERkZKbWq1GpGRkfD19dU6TXJycqawY2xsDAAQQuivWCIiIiqUDLZFCADCwsIQEhKCmjVronbt2pg1axaSkpLQrVs3AEBwcDBcXFwQEREBAGjVqhVmzJiBGjVqwMfHBzdu3MDo0aPRqlUrKRARERERZZdBg1BQUBAeP36MMWPGICYmBtWrV8fOnTulA6jv3bunsQVo1KhRUCgUGDVqFB48eAAHBwe0atUKEydONNQqEBERUQGmEDLbp5SYmAgbGxskJCTA2tra0OUQERFRNujr+7tAnTVGRERElJsYhIiIiEi2GISIiIhIthiE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l9qMjIzg7++PqKiobM0jOTkZr1+/RtGiRbU+npKSgsTERI0bEREREWDgIBQXF4f09HQ4OjpqtDs6OiImJiZb8xg2bBhKlCihEabeFhERARsbG+nm6ur60XUTERFR4WDwY4Q+xuTJk7F69Wps3LgRZmZmWvuMGDECCQkJ0u3+/ft5XCURERHlVyaGXLi9vT2MjY0RGxur0R4bGwsnJ6f3Tjtt2jRMnjwZe/fuRdWqVbPsp1KpoFKpcqVeIiIiKlwMukVIqVTC29sbkZGRUptarUZkZCR8fX2znG7KlCkYP348du7ciZo1a+ZFqURERFQIGXSLEACEhYUhJCQENWvWRO3atTFr1iwkJSWhW7duAIDg4GC4uLggIiICAPDjjz9izJgx+P333+Hu7i4dS2RpaQlLS0uDrQcREREVPAYPQkFBQXj8+DHGjBmDmJgYVK9eHTt37pQOoL537x6MjP634Wr+/PlITU3Fl19+qTGf8PBwjB07Ni9LJyIiogLO4NcRymu8jhAREVHBUyivI0RERERkSAxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFsMQkRERCRbDEJEREQkWwxCREREJFv5IgjNnTsX7u7uMDMzg4+PD44fP/7e/n/++ScqVqwIMzMzVKlSBdu3b8+jSomIiKgwMXgQWrNmDcLCwhAeHo7Tp0+jWrVq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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "import json\n",
    "import os\n",
    "from matplotlib import pyplot as plt\n",
    "metrics = ['agg_score', 'commonsense_qa/acc_norm', 'hellaswag/acc_norm', 'openbookqa/acc_norm', 'piqa/acc_norm',\n",
    "                   'siqa/acc_norm', 'winogrande/acc_norm', 'arc/acc_norm', 'mmlu/acc_norm']\n",
    "\n",
    "def normalize_runname(runname):\n",
    "    return runname.replace(\"/\", \"_\")\n",
    "\n",
    "grouped = (\n",
    "    df.groupby([\"runname\", \"steps\"])\n",
    "    .agg(\n",
    "        {\n",
    "            key: \"mean\" for key in metrics\n",
    "        }\n",
    "    )\n",
    "    .reset_index()\n",
    ")\n",
    "\n",
    "file_id=\"../assets/data/plots/all_dumps_bad\"\n",
    "files = {}\n",
    "for metric in metrics:\n",
    "    datas = {}\n",
    "    for name, group in grouped.groupby(\"runname\"):\n",
    "        # if name not in runs_mapping:\n",
    "        #     continue\n",
    "        group = group[[\"steps\", metric]].sort_values(by=\"steps\")\n",
    "        group = group.set_index(\"steps\")\n",
    "        rolling_avg = group\n",
    "        # rolling_avg = group.rolling(window=5).mean()\n",
    "        datas[name] = {\n",
    "            \"x\": (rolling_avg.index * 2048 * 1024 * 1e-9).tolist(),\n",
    "            \"y\": rolling_avg[metric].tolist(),\n",
    "            \"label\": runs_mapping[name],\n",
    "        }\n",
    "    # Sort the datata based on the steps\n",
    "    datas = {k: v for k, v in sorted(datas.items(), key=lambda x: -x[1][\"y\"][-1])}\n",
    "    # Create a folder\n",
    "    os.makedirs(f\"{file_id}\", exist_ok=True)\n",
    "    with open(f\"{file_id}/{normalize_runname(metric)}.json\", \"w\") as f:\n",
    "        json.dump({\n",
    "            \"data\": datas,\n",
    "            \"layout\": {\n",
    "                \"title\": {\n",
    "                    \"text\": \"Dedup across all dumps does not improve performance\"\n",
    "                },\n",
    "            }\n",
    "        }, f)\n",
    "    files[metric] = {\"file\": f\"{normalize_runname(metric)}.json\"}\n",
    "# Create index\n",
    "with open(f\"{file_id}/index.json\", \"w\") as f:\n",
    "    json.dump({\n",
    "        \"files\": files,\n",
    "        \"settings\": {\n",
    "            \"defaultMetric\": \"agg_score\",\n",
    "            \"slider\":{\"min\":0,\"max\":30,\"default\":5}\n",
    "        }\n",
    "    }, f)\n",
    "# Add labels and legend\n",
    "plt.xlabel('Training tokens (billions)')\n",
    "plt.ylabel('Agg Score')\n",
    "plt.title('Dedup across all dumps does not improve performance')\n",
    "plt.legend()\n",
    "\n",
    "# Show the plot\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "af28ebbd054cdc33",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-30T15:07:36.363849Z",
     "start_time": "2024-04-30T15:07:36.362222Z"
    },
    "collapsed": false
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}