File size: 46,690 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 571 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 19,
"id": "138889b92720ce2e",
"metadata": {
"ExecuteTime": {
"end_time": "2024-04-30T15:08:02.398435Z",
"start_time": "2024-04-30T15:08:02.194901Z"
},
"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>670</th>\n",
" <td>big-run-sampled_full_ind_minhash</td>\n",
" <td>6</td>\n",
" <td>163000</td>\n",
" <td>0.481842</td>\n",
" <td>0.427</td>\n",
" <td>0.393</td>\n",
" <td>0.488</td>\n",
" <td>0.579</td>\n",
" <td>0.242</td>\n",
" <td>0.358</td>\n",
" <td>...</td>\n",
" <td>0.420</td>\n",
" <td>0.397</td>\n",
" <td>0.587</td>\n",
" <td>0.568</td>\n",
" <td>0.885</td>\n",
" <td>0.809</td>\n",
" <td>0.4760</td>\n",
" <td>0.4595</td>\n",
" <td>0.305843</td>\n",
" <td>0.330238</td>\n",
" </tr>\n",
" <tr>\n",
" <th>671</th>\n",
" <td>big-run-sampled_full_ind_minhash</td>\n",
" <td>6</td>\n",
" <td>164000</td>\n",
" <td>0.482727</td>\n",
" <td>0.426</td>\n",
" <td>0.394</td>\n",
" <td>0.487</td>\n",
" <td>0.582</td>\n",
" <td>0.238</td>\n",
" <td>0.360</td>\n",
" <td>...</td>\n",
" <td>0.422</td>\n",
" <td>0.398</td>\n",
" <td>0.575</td>\n",
" <td>0.562</td>\n",
" <td>0.885</td>\n",
" <td>0.827</td>\n",
" <td>0.4745</td>\n",
" <td>0.4625</td>\n",
" <td>0.307377</td>\n",
" <td>0.332317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>672</th>\n",
" <td>big-run-sampled_full_ind_minhash</td>\n",
" <td>6</td>\n",
" <td>165000</td>\n",
" <td>0.482413</td>\n",
" <td>0.423</td>\n",
" <td>0.397</td>\n",
" <td>0.482</td>\n",
" <td>0.573</td>\n",
" <td>0.238</td>\n",
" <td>0.360</td>\n",
" <td>...</td>\n",
" <td>0.409</td>\n",
" <td>0.396</td>\n",
" <td>0.581</td>\n",
" <td>0.569</td>\n",
" <td>0.889</td>\n",
" <td>0.829</td>\n",
" <td>0.4675</td>\n",
" <td>0.4600</td>\n",
" <td>0.308059</td>\n",
" <td>0.331304</td>\n",
" </tr>\n",
" <tr>\n",
" <th>673</th>\n",
" <td>big-run-sampled_full_ind_minhash</td>\n",
" <td>6</td>\n",
" <td>166000</td>\n",
" <td>0.482014</td>\n",
" <td>0.422</td>\n",
" <td>0.391</td>\n",
" <td>0.477</td>\n",
" <td>0.573</td>\n",
" <td>0.230</td>\n",
" <td>0.358</td>\n",
" <td>...</td>\n",
" <td>0.420</td>\n",
" <td>0.400</td>\n",
" <td>0.586</td>\n",
" <td>0.566</td>\n",
" <td>0.883</td>\n",
" <td>0.817</td>\n",
" <td>0.4660</td>\n",
" <td>0.4645</td>\n",
" <td>0.304975</td>\n",
" <td>0.329611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>674</th>\n",
" <td>big-run-sampled_full_ind_minhash</td>\n",
" <td>6</td>\n",
" <td>167000</td>\n",
" <td>0.486587</td>\n",
" <td>0.424</td>\n",
" <td>0.402</td>\n",
" <td>0.490</td>\n",
" <td>0.579</td>\n",
" <td>0.236</td>\n",
" <td>0.360</td>\n",
" <td>...</td>\n",
" <td>0.417</td>\n",
" <td>0.405</td>\n",
" <td>0.585</td>\n",
" <td>0.575</td>\n",
" <td>0.884</td>\n",
" <td>0.832</td>\n",
" <td>0.4760</td>\n",
" <td>0.4715</td>\n",
" <td>0.309503</td>\n",
" <td>0.332197</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>675 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",
"670 big-run-sampled_full_ind_minhash 6 163000 0.481842 \n",
"671 big-run-sampled_full_ind_minhash 6 164000 0.482727 \n",
"672 big-run-sampled_full_ind_minhash 6 165000 0.482413 \n",
"673 big-run-sampled_full_ind_minhash 6 166000 0.482014 \n",
"674 big-run-sampled_full_ind_minhash 6 167000 0.486587 \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",
"670 0.427 0.393 0.488 \n",
"671 0.426 0.394 0.487 \n",
"672 0.423 0.397 0.482 \n",
"673 0.422 0.391 0.477 \n",
"674 0.424 0.402 0.490 \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",
"670 0.579 0.242 0.358 ... 0.420 \n",
"671 0.582 0.238 0.360 ... 0.422 \n",
"672 0.573 0.238 0.360 ... 0.409 \n",
"673 0.573 0.230 0.358 ... 0.420 \n",
"674 0.579 0.236 0.360 ... 0.417 \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",
"670 0.397 0.587 0.568 0.885 \n",
"671 0.398 0.575 0.562 0.885 \n",
"672 0.396 0.581 0.569 0.889 \n",
"673 0.400 0.586 0.566 0.883 \n",
"674 0.405 0.585 0.575 0.884 \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",
"670 0.809 0.4760 0.4595 0.305843 0.330238 \n",
"671 0.827 0.4745 0.4625 0.307377 0.332317 \n",
"672 0.829 0.4675 0.4600 0.308059 0.331304 \n",
"673 0.817 0.4660 0.4645 0.304975 0.329611 \n",
"674 0.832 0.4760 0.4715 0.309503 0.332197 \n",
"\n",
"[675 rows x 22 columns]"
]
},
"execution_count": 19,
"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_ind_unfiltered_comparison.csv\")\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "b610f43caefdf01",
"metadata": {
"ExecuteTime": {
"end_time": "2024-04-30T15:08:02.401852Z",
"start_time": "2024-04-30T15:08:02.399712Z"
},
"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_ind_minhash\": \"FineWeb independent MinHash\",\n",
" \"big-run-sampled_full_filtered_no_dedup\": \"FineWeb filtered only\"\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "initial_id",
"metadata": {
"ExecuteTime": {
"end_time": "2024-04-30T15:08:02.519228Z",
"start_time": "2024-04-30T15:08:02.402938Z"
},
"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": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHHCAYAAABTMjf2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLBElEQVR4nO3deXRN5/7H8U8SMpEBkQEhhCo13qg0hipSKUr1Vg1VCS1tTVWp25pDq6KKq9fMbVHtLar0tjVW8GspNWtras3aSsyJOZI8vz+6cm6PJCRkEPv9Wuus5Tx59t7ffZ59zvnY03EwxhgBAABYkGNBFwAAAFBQCEIAAMCyCEIAAMCyCEIAAMCyCEIAAMCyCEIAAMCyCEIAAMCyCEIAAMCyCEIAAMCyCEKFyNGjR+Xg4KC5c+cWdCm5ojCtT17UOnfuXDk4OOjo0aO5Nk/86b333lOlSpXk5OSkOnXqFHQ5ecbBwUEjR47MtfmtX79eDg4OWr9+fa7NE9kXFBSkbt26FXQZlkMQyiPpX3Lbtm0r6FIsb9q0aYUibBV2Y8aM0RdffFHQZWj16tV644031LBhQ82ZM0djxowp6JIA3MOKFHQBQF6bNm2afHx8+J9WHhszZozat2+vdu3aFWgda9eulaOjoz744AM5OzsXaC0A7n3sEQJwX7hy5Yok6dSpU3Jzc8u1EGSM0dWrV3NlXig4165dU1paWkGXgXsQQSgfdevWTcWLF9fvv/+udu3aqXjx4ipdurQGDhyo1NRUu74XLlxQt27d5OXlJW9vb0VFRenChQuZznf//v1q3769SpYsKVdXV9WrV09ffvmlXZ/0Q3XffvutXn75ZZUqVUqenp6KjIzU+fPnM8xzxYoVaty4sYoVKyYPDw+1bt1ae/bsuefWZ+PGjYqOjlbp0qVVrFgxPf300zp9+rStX1BQkPbs2aP/+7//k4ODgxwcHPTYY49luty8qlWS9uzZo2bNmsnNzU3lypXT6NGjM/1Qzuqcj5vPHcjpeGZm7dq1tjH29vbWU089pX379tn16datm4KCgjJMO3LkSDk4ONjVffnyZc2bN8/2OqfXm953//796tChgzw9PVWqVCn1799f165dyzDvjz/+WCEhIXJzc1PJkiXVqVMnnThxwq7PY489pho1amj79u169NFH5e7uriFDhsjBwUFz5szR5cuXbXWkHxZNSUnR22+/reDgYLm4uCgoKEhDhgzR9evXM7zWTz75pFatWqV69erJzc1NM2fOtJ0/s2jRIo0aNUply5aVh4eH2rdvr8TERF2/fl2vvfaafH19Vbx4cXXv3j3DvL/55hs1atRI3t7eKl68uKpWraohQ4bcdqyuX7+uAQMGqHTp0vLw8FDbtm3122+/Zdr3999/1wsvvCA/Pz+5uLjooYce0ocffpih32+//aZ27dqpWLFi8vX11YABAzLUm/56ZLY39bHHHrN7L6W/PgsXLtSQIUPk7++vYsWKqW3bthnGLzPHjh1T7969VbVqVbm5ualUqVJ69tlnMz2H7sKFCxowYICCgoLk4uKicuXKKTIyUmfOnLGrZcGCBRo2bJjKli0rd3d3JSUlSZI+++wz2zbm4+Oj559/Xr///rvdMuLj49W9e3eVK1dOLi4uCggI0FNPPWVXz7Zt2xQRESEfHx+5ubmpYsWKeuGFF267rsYYjR49WuXKlZO7u7uaNm2a4fNVyvg+S5fZ+YXp2+369ett223NmjVt53stWbJENWvWlKurq0JCQrRz5067eaZ/nh8+fFgREREqVqyYypQpo7feekvGGLu+CxYsUEhIiDw8POTp6amaNWvq/fffv+1636s4NJbPUlNTFRERodDQUI0fP15r1qzRhAkTFBwcrF69ekn6803y1FNPacOGDXrllVdUrVo1LV26VFFRURnmt2fPHjVs2FBly5bVoEGDVKxYMS1atEjt2rXT559/rqefftquf9++feXt7a2RI0fqwIEDmj59uo4dO2b74JCk+fPnKyoqShEREXr33Xd15coVTZ8+XY0aNdLOnTvtvhgLen369eunEiVKKCYmRkePHtWkSZPUt29fLVy4UJI0adIk9evXT8WLF9fQoUMlSX5+flmOT17UGh8fr6ZNmyolJcXWb9asWXJzc8uyjuzKznhmZs2aNWrZsqUqVaqkkSNH6urVq5o8ebIaNmyoHTt2ZBp+bmX+/Pnq0aOH6tevr5deekmSFBwcbNenQ4cOCgoKUmxsrDZv3qx//etfOn/+vD766CNbn3feeUfDhw9Xhw4d1KNHD50+fVqTJ0/Wo48+qp07d8rb29vW9+zZs2rZsqU6deqk559/Xn5+fqpXr55mzZqlLVu26N///rckqUGDBpKkHj16aN68eWrfvr1ef/11/fDDD4qNjdW+ffu0dOlSu1oPHDigzp076+WXX1bPnj1VtWpV299iY2Pl5uamQYMG6eDBg5o8ebKKFi0qR0dHnT9/XiNHjtTmzZs1d+5cVaxYUSNGjJD05/by5JNPqlatWnrrrbfk4uKigwcPauPGjbd9fXv06KGPP/5Yzz33nBo0aKC1a9eqdevWGfolJCTokUcekYODg/r27avSpUtrxYoVevHFF5WUlKTXXntNknT16lU1b95cx48f16uvvqoyZcpo/vz5Wrt27W1ruZ133nlHDg4OevPNN3Xq1ClNmjRJ4eHh2rVr1y23+a1bt+r7779Xp06dVK5cOR09elTTp0/XY489pr1798rd3V2SdOnSJTVu3Fj79u3TCy+8oL/97W86c+aMvvzyS/3222/y8fGxzfPtt9+Ws7OzBg4cqOvXr8vZ2Vlz585V9+7d9fDDDys2NlYJCQl6//33tXHjRrtt7JlnntGePXvUr18/BQUF6dSpU/rmm290/Phx2/MWLVqodOnSGjRokLy9vXX06FEtWbLktq/RiBEjNHr0aLVq1UqtWrXSjh071KJFCyUnJ9/Va3/w4EE999xzevnll/X8889r/PjxatOmjWbMmKEhQ4aod+/ekv7chjt06KADBw7I0fF/+0NSU1P1xBNP6JFHHtG4ceO0cuVKxcTEKCUlRW+99ZakP8N8586d1bx5c7377ruSpH379mnjxo3q37//XdVfYAzyxJw5c4wks3XrVltbVFSUkWTeeustu75169Y1ISEhtudffPGFkWTGjRtna0tJSTGNGzc2ksycOXNs7c2bNzc1a9Y0165ds7WlpaWZBg0amCpVqmSoJyQkxCQnJ9vax40bZySZ//73v8YYYy5evGi8vb1Nz5497WqMj483Xl5edu33wvqEh4ebtLQ0W/uAAQOMk5OTuXDhgq3toYceMk2aNDHZkRe1vvbaa0aS+eGHH2xtp06dMl5eXkaSOXLkiK1dkomJiclQV4UKFUxUVFSG9b/deGalTp06xtfX15w9e9bWtnv3buPo6GgiIyNtbVFRUaZChQoZpo+JiTE3f3wUK1bMrsab+7Zt29auvXfv3kaS2b17tzHGmKNHjxonJyfzzjvv2PX76aefTJEiRezamzRpYiSZGTNmZFheVFSUKVasmF3brl27jCTTo0cPu/aBAwcaSWbt2rW2tgoVKhhJZuXKlXZ9161bZySZGjVq2L3mnTt3Ng4ODqZly5Z2/cPCwuxeu3/+859Gkjl9+nSGmm8lvfbevXvbtT/33HMZtpcXX3zRBAQEmDNnztj17dSpk/Hy8jJXrlwxxhgzadIkI8ksWrTI1ufy5cumcuXKRpJZt26d3euR2bg2adLE7n2V/vqULVvWJCUl2doXLVpkJJn333//luuZXttfbdq0yUgyH330ka1txIgRRpJZsmRJhv7pnwXptVSqVMluvsnJycbX19fUqFHDXL161db+9ddfG0lmxIgRxhhjzp8/bySZ9957L8t6ly5dmuEzPjtOnTplnJ2dTevWre0+u4YMGWIk2b3Wmb3PjPnf+/+vnx3p2+33339va1u1apWRZNzc3MyxY8ds7TNnzswwzumf5/369bO1paWlmdatWxtnZ2fbdtu/f3/j6elpUlJScrTe9zIOjRWAV155xe5548aNdfjwYdvz5cuXq0iRIrY9KpLk5OSkfv362U137tw5rV27Vh06dNDFixd15swZnTlzRmfPnlVERIR+/fXXDLt7X3rpJRUtWtT2vFevXipSpIiWL18u6c+0f+HCBXXu3Nk2vzNnzsjJyUmhoaFat27dPbc+f93z0bhxY6WmpurYsWMZ6syOvKh1+fLleuSRR1S/fn3b9KVLl1aXLl3uqMa/ut14ZubkyZPatWuXunXrppIlS9raa9Wqpccff/yW096NPn362D1Pf03Tl7dkyRKlpaWpQ4cOdtuev7+/qlSpkmHbc3FxUffu3bO17PRlREdH27W//vrrkqRly5bZtVesWFERERGZzisyMtLuNQ8NDZUxJsMhkdDQUJ04cUIpKSmSZNvT8N///jdH56qk1/7qq6/atafv3UlnjNHnn3+uNm3ayBhj9xpGREQoMTFRO3bssM0zICBA7du3t03v7u5u25t3NyIjI+Xh4WF73r59ewUEBNx2u/rr3qIbN27o7Nmzqly5sry9vW11S9Lnn3+u2rVrZ9g7LCnDXtCoqCi7+W7btk2nTp1S79695erqamtv3bq1HnzwQdt2kH6O2fr167M81Jw+nl9//bVu3Lhxy3X7qzVr1ig5OVn9+vWzq/fm8bwT1atXV1hYmO15aGioJKlZs2YqX758hva/fk6n69u3r+3f6XsWk5OTtWbNGkl/rvfly5f1zTff3HW99wqCUD5zdXVV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57M7nplZs2aNadiwoXFzczOenp6mTZs2Zu/evRn6rV692tSoUcM4OzubqlWrmo8//jjTMd6/f7959NFHjZubm91lwOl99+7da9q3b288PDxMiRIlTN++fe0uYU73+eefm0aNGplixYqZYsWKmQcffND06dPHHDhwwNanSZMm5qGHHsp0vbLaLm/cuGFGjRplKlasaIoWLWoCAwPN4MGD7W5/YMyflyG3bt06w/Tp29Znn31m157Vtpi+3umXHcfFxZmnnnrKlClTxjg7O5syZcqYzp07m19++SXT9firq1evmldffdWUKlXKFCtWzLRp08acOHEi09stJCQkmD59+pjAwEBTtGhR4+/vb5o3b25mzZpl1+/YsWOmbdu2xt3d3fj4+Jj+/fublStXZnj/GGPMhAkTTNmyZY2Li4tp2LCh2bZtW5aXz3/66adm8ODBxtfX17i5uZnWrVvbXbqdlfPnz5vu3bsbHx8fU7x4cRMREWH279+f6eX7Z8+eNX379jVly5Y1zs7Oply5ciYqKsp224CsxirdwoULTd26dY2Li4spWbKk6dKli/ntt99sfz9z5ozp06ePefDBB02xYsWMl5eXCQ0NtbvdwI4dO0znzp1N+fLljYuLi/H19TVPPvmk3WdkVlJTU82oUaNMQECAcXNzM4899pj5+eefM13X7du3m9DQUOPs7GzKly9vJk6cmOXl85ltt5JMnz597NqOHDmS4fYA6e+bQ4cOmRYtWhh3d3fj5+dnYmJiTGpqqq3f4sWLTYsWLYyvr6+tppdfftmcPHnytut9r3IwJo/PKsU9If0mYlu3blW9evUKuhzcpcI0niNHjtSoUaN0+vTpLPdsofBbv369mjZtqs8++8zusnwUDt26ddPixYt16dKlgi4l33GOEAAAsCyCEAAAsCyCEAAAsKwCPUfo22+/1Xvvvaft27fbLslt167dLadZv369oqOjtWfPHgUGBmrYsGGZ/jIyAADA7RToHqHLly+rdu3aGe4vkpUjR46odevWatq0qXbt2qXXXntNPXr00KpVq/K4UgAAcD+6Z64ac3BwuO0eoTfffFPLli2zu1lYp06ddOHChUL/WycAACD/FaobKm7atCnDreMjIiJu+au9169ft7vbZVpams6dO6dSpUrl6KcXAABAwTHG6OLFiypTpowcHXPvgFahCkLx8fHy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vvzyywoKCsrt+nId9xECAKDwKRQ3VPz5559Vo0aN3JpdniAIAQBQ+OTV9/dd3+jn4sWLmjVrlurXr6/atWvnRk0AAAD54o6D0LfffquoqCgFBARo/PjxatasmTZv3pybtQEAAOSpHJ0sHR8fr7lz5+qDDz5QUlKSOnTooOvXr+uLL75Q9erV86pGAACAPJHtPUJt2rRR1apV9eOPP2rSpEn6448/NHny5LysDQAAIE9le4/QihUr9Oqrr6pXr16qUqVKXtYEAACQL7K9R2jDhg26ePGiQkJCFBoaqilTpujMmTN5WRsAAECeynYQeuSRRzR79mydPHlSL7/8shYsWKAyZcooLS1N33zzjS5evHjHRUydOlVBQUFydXVVaGiotmzZkq3pFixYIAcHB7Vr1+6Olw0AAKwrx1eNFStWTC+88II2bNign376Sa+//rrGjh0rX19ftW3bNscFLFy4UNHR0YqJidGOHTtUu3ZtRURE6NSpU7ec7ujRoxo4cKAaN26c42UCAABId3kfoapVq2rcuHH67bff9Omnn97RPCZOnKiePXuqe/fuql69umbMmCF3d3d9+OGHWU6TmpqqLl26aNSoUapUqdKdlg8AACzurm+oKElOTk5q166dvvzyyxxNl5ycrO3btys8PPx/BTk6Kjw83PZL9pl566235OvrqxdffPG2y7h+/bqSkpLsHgAAAFIuBaE7debMGaWmpsrPz8+u3c/PT/Hx8ZlOs2HDBn3wwQeaPXt2tpYRGxsrLy8v2yMwMPCu6wYAAPeHAg1COXXx4kV17dpVs2fPlo+PT7amGTx4sBITE22PEydO5HGVAACgsMjRnaVzm4+Pj5ycnJSQkGDXnpCQIH9//wz9Dx06pKNHj6pNmza2trS0NElSkSJFdODAAQUHB9tN4+LiIhcXlzyoHgAAFHYFukfI2dlZISEhiouLs7WlpaUpLi5OYWFhGfo/+OCD+umnn7Rr1y7bo23btmratKl27drFYS8AAJAjBbpHSJKio6MVFRWlevXqqX79+po0aZIuX76s7t27S5IiIyNVtmxZxcbGytXVVTVq1LCb3tvbW5IytAMAANxOgQehjh076vTp0xoxYoTi4+NVp04drVy50nYC9fHjx+XoWKhOZQIAAIWEgzHGFHQR+SkpKUleXl5KTEyUp6dnQZcDAACyIa++v9nVAgAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALOueCEJTp05VUFCQXF1dFRoaqi1btmTZd/bs2WrcuLFKlCihEiVKKDw8/Jb9AQAAslLgQWjhwoWKjo5WTEyMduzYodq1aysiIkKnTp3KtP/69evVuXNnrVu3Tps2bVJgYKBatGih33//PZ8rBwAAhZ2DMcYUZAGhoaF6+OGHNWXKFElSWlqaAgMD1a9fPw0aNOi206empqpEiRKaMmWKIiMjb9s/KSlJXl5eSkxMlKen513XDwAA8l5efX8X6B6h5ORkbd++XeHh4bY2R0dHhYeHa9OmTdmax5UrV3Tjxg2VLFky079fv35dSUlJdg8AAACpgIPQmTNnlJqaKj8/P7t2Pz8/xcfHZ2seb775psqUKWMXpv4qNjZWXl5etkdgYOBd1w0AAO4PBX6O0N0YO3asFixYoKVLl8rV1TXTPoMHD1ZiYqLtceLEiXyuEgAA3KuKFOTCfXx85OTkpISEBLv2hIQE+fv733La8ePHa+zYsVqzZo1q1aqVZT8XFxe5uLjkSr0AAOD+UqB7hJydnRUSEqK4uDhbW1pamuLi4hQWFpbldOPGjdPbb7+tlStXql69evlRKgAAuA8V6B4hSYqOjlZUVJTq1aun+vXra9KkSbp8+bK6d+8uSYqMjFTZsmUVGxsrSXr33Xc1YsQI/ec//1FQUJDtXKLixYurePHiBbYeAACg8CnwINSxY0ed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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",
"\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/ind_dedup_better\"\n",
"files = {}\n",
"for metric in metrics:\n",
" datas = {}\n",
" for name, group in grouped.groupby(\"runname\"):\n",
" group = group[[\"steps\", metric]].sort_values(by=\"steps\")\n",
" group = group.set_index(\"steps\")\n",
" rolling_avg = group\n",
" # rolling_avg = group.rolling(wjjjjjjjjjjjjjindow=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\": \"Independent dedup outperforms dedup across dumps\"\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",
" \n",
"\n",
" \n",
"# Add labels and legend\n",
"plt.xlabel('Training tokens (billions)')\n",
"plt.ylabel('Agg Score')\n",
"plt.title('Independent dedup outperforms dedup across dumps')\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:08:02.522543Z",
"start_time": "2024-04-30T15:08:02.520569Z"
},
"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
}
|