From 3b368ffbdb12ceff49fdab2de9c32041d998768c Mon Sep 17 00:00:00 2001 From: Kobi Felton Date: Thu, 15 Feb 2024 18:53:14 +0000 Subject: [PATCH] Plot scaling behavior --- notebooks/plot_model_performance_wandb.ipynb | 136 ++++++++++++++++++- 1 file changed, 132 insertions(+), 4 deletions(-) diff --git a/notebooks/plot_model_performance_wandb.ipynb b/notebooks/plot_model_performance_wandb.ipynb index 8e5f330..6086144 100644 --- a/notebooks/plot_model_performance_wandb.ipynb +++ b/notebooks/plot_model_performance_wandb.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -12,9 +12,24 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-02-15 18:34:04.848950: I external/local_tsl/tsl/cuda/cudart_stub.cc:31] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2024-02-15 18:34:05.045881: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-02-15 18:34:05.046076: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-02-15 18:34:05.080429: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2024-02-15 18:34:05.171618: I external/local_tsl/tsl/cuda/cudart_stub.cc:31] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2024-02-15 18:34:05.173946: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2024-02-15 18:34:06.325180: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" + ] + } + ], "source": [ "from condition_prediction.run import ConditionPrediction\n", "import wandb\n", @@ -30,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -39,6 +54,23 @@ "wandb_project=\"orderly\"" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "filter = {\n", + " \"config.output_folder_path\": \"models/no_trust_no_map\"\n", + "}\n", + "ids = [\"wwk85mpo\", \"6igi3f5x\", \"cw27b6c5\", \"2p28v0kz\"]\n", + "runs = api.runs(f\"{wandb_entity}/{wandb_project}\", filters=filter)\n", + "for run in runs:\n", + " if run.id in ids:\n", + " run.config[\"dataset_version\"] = \"v6\"\n", + " run.update()" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -112,6 +144,102 @@ "print(\"\\\\\\\\ \\n\".join(lines) + \"\\\\\\\\\")" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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EP369UOVKlWwfPlyWFhY4LvvvkOVKlWMGpsQAhGRW6HL/Ke5IiK3FIvpc4iIiKh4MevEDsiZu+/06dMYOXIknJycsG/fPuzatQtWVlZ44403cOLECbz77rtGjyspNaHAu181ERB49vIRklMTDRAVERERlWRmffNErgYNGmDNmjWmDkNFWkZqkdqnZqTA0V6mp2iIiIjIHJj9GbviytamaIOA2tnY6ykS/eClYSIiIu0Z6nuTiZ2JONrJUMbVB5ICR65TJYEEZVx94GBn+KnMtGFhkfMSys7ONnEkREREJUfu92bu96i+MLEzEYlEgoDmQYW4dQIIaD6g2EyhZW1tDWtra5U7jomIiCh/crlc+R2qT0zsTMi/QTdIraVan7WTSCSwsZbCv0FXA0emPYlEAicnJyQkJCA1tWj9BomIiEqD1NRUJCYmwsnJSe8nakrFzRPFlYOtE94L/gxLfp8BiPznnZD8+++9QfPgYOtkxCgL5uHhgdTUVNy/fx/Ozs5wcnKCpaVlsTmrSEREZGpCCGRnZ0MulyMxMRFSqRQeHh56345EsNe7znSZjFcbuXPFZmSmA1BN8HLP5tlYS/HeoHnwq9qsyNszhOzsbMTFxUEulyMzM9PU4RARERVL1tbWcHJygoeHBywtLbVqo0vewcSuEPSd2AE504sduxCOiMgtKuPblXH1QUDzAWjToBvsbR31si1DEkIgMzMTCoXC1KEQEREVKxYWFrC2ttb5ihYTOwMzRGKXSwiB5NREpGakwM7GHg52zrykSUREVIrpknewj10xI5FI4Ggv4+DDREREpDPeFUtERERkJpjYEREREZkJJnZEREREZoKJHREREZGZYGJHREREZCaY2BERERGZCQ53Ugi5Q/8lJiaaOBIiIiIyd7n5hjZDDzOxKwS5XA4AqFChgokjISIiotJCLpdDJst/nFvOPFEICoUCjx49gpOTk0FmhUhMTESFChXw4MEDvc9sQcULj3XpwWNduvB4lx7GONZCCMjlcvj4+MDCIv9edDxjVwgWFhYoX768wbfj7OzMD4RSgse69OCxLl14vEsPQx/rgs7U5eLNE0RERERmgokdERERkZlgYlcMSaVSzJ49G1Kp1NShkIHxWJcePNalC4936VHcjjVvniAiIiIyEzxjR0RERGQmmNgRERERmQkmdnp048YNLF26FCNHjoSf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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "DATASETS = [\"no_trust_no_map\"]\n", + "LABELS = {\n", + " \"with_trust_with_map\": r\"Labelling, rare $\\rightarrow$ other\",\n", + " \"with_trust_no_map\": r\"Labelling, rare $\\rightarrow$ delete rxn\",\n", + " \"no_trust_with_map\": r\"Reaction string, rare $\\rightarrow$ other\",\n", + " \"no_trust_no_map\": r\"Reaction string, rare $\\rightarrow$ delete rxn\",\n", + "}\n", + "TRAIN_FRACS = [0.2, 0.4, 0.6, 0.8, 1.0]\n", + "fig, ax = plt.subplots(1)\n", + "markers = [\"o\", \"d\", \"s\", \"^\"]\n", + "top_n = 3\n", + "colors = {\n", + " \"no_trust_with_map\": \"#5C4682\",\n", + " \"no_trust_no_map\": \"#5e813f\",\n", + "}\n", + "for i, dataset in enumerate(DATASETS):\n", + " overall_accuracies = []\n", + " n_train = []\n", + " for train_fraction in TRAIN_FRACS:\n", + " filters = {\n", + " \"state\": \"finished\",\n", + " \"config.output_folder_path\": f\"models/{dataset}\",\n", + " # \"config.random_seed\": {\"$in\": [12345, 54321, 98765]},\n", + " \"config.random_seed\": 12345,\n", + " \"config.train_fraction\": train_fraction,\n", + " \"config.train_mode\": 0, # Teacher forcing\n", + " \"config.dataset_version\": {\"$in\": [\"v6\"]}\n", + " }\n", + " runs = api.runs(\n", + " f\"{wandb_entity}/{wandb_project}\",\n", + " filters=filters\n", + " )\n", + " run = runs[0]\n", + " if len(runs)>0:\n", + " for r in runs:\n", + " if run.config[\"dataset_version\"] == \"v5\":\n", + " run = r\n", + " break\n", + "\n", + " # Get overall accuracy\n", + " acc_local = []\n", + " for run in runs:\n", + " overall_accuracy = run.summary[f\"test_best\"][f\"overall_accuracy_top{top_n}\"]\n", + " fi_overall_accuracy = run.summary[f\"frequency_informed_overall_accuracy_top_{top_n}\"]\n", + " overall_improvement = (overall_accuracy-fi_overall_accuracy)/(1-fi_overall_accuracy)\n", + " acc_local.append(overall_improvement)\n", + " overall_accuracies.append(np.mean(overall_improvement)*100)\n", + " n_train.append(run.config[\"n_train\"])\n", + " \n", + " # Add line to plot\n", + " label = LABELS[dataset]\n", + " ax.plot(\n", + " # TRAIN_FRACS,\n", + " np.array(n_train)/ 1e3, \n", + " overall_accuracies, \n", + " label=label, \n", + " linewidth=3.5, \n", + " marker=markers[i], \n", + " markersize=10,\n", + " color=colors[dataset]\n", + " )\n", + "\n", + "# Formatting\n", + "axis_fontsize = 16\n", + "heading_fontsize = 18\n", + "ax.legend(loc=\"lower right\", fontsize=axis_fontsize)\n", + "ax.set_xlabel(\"Train set size (thousands)\", fontsize=heading_fontsize)\n", + "ax.set_ylabel(\"Overall AIB (%)\", fontsize=heading_fontsize)\n", + "# ax.set_xticks(TRAIN_FRACS)\n", + "# ax.set_xticklabels(ax.gefontsize=axis_fontsize)\n", + "ax.tick_params(labelsize=axis_fontsize)\n", + "# ax.ticklabel_format( style='sci',scilimits=(4,4))\n", + "ylabels = np.arange(8, 22, 2)\n", + "ax.set_yticks(ylabels)\n", + "ax.set_yticklabels([f\"{ylabel:.0f}\" for ylabel in ylabels], fontsize=axis_fontsize)\n", + "fig.tight_layout()\n", + "fig.savefig(\"scaling_behavior.png\", dpi=300)" + ] + }, { "attachments": {}, "cell_type": "markdown",