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
}
|