diff --git a/README/Frontier-cmake.md b/Notes/Frontier-cmake.md similarity index 100% rename from README/Frontier-cmake.md rename to Notes/Frontier-cmake.md diff --git a/README/Frontier_deepspeed.md b/Notes/Frontier_deepspeed.md similarity index 100% rename from README/Frontier_deepspeed.md rename to Notes/Frontier_deepspeed.md diff --git a/README/Frontier_pytorch.md b/Notes/Frontier_pytorch.md similarity index 100% rename from README/Frontier_pytorch.md rename to Notes/Frontier_pytorch.md diff --git a/summit/JupyterOnSummit.md b/Notes/JupyterOnSummit.md similarity index 100% rename from summit/JupyterOnSummit.md rename to Notes/JupyterOnSummit.md diff --git a/README/README-holly.ipynb b/Notes/README-holly.ipynb similarity index 100% rename from README/README-holly.ipynb rename to Notes/README-holly.ipynb diff --git a/preface.py b/Notes/README.matplotlib.md similarity index 91% rename from preface.py rename to Notes/README.matplotlib.md index 7547d3e..04a2be3 100755 --- a/preface.py +++ b/Notes/README.matplotlib.md @@ -1,3 +1,8 @@ + +## setup matplotlib + + +``` %matplotlib inline import numpy as np import pandas as pd @@ -11,4 +16,5 @@ mpl.rcParams['font.monospace']='Fira Code' mpl.rcParams['font.size']=14.0 mpl.rcParams['figure.figsize']=[8,6] +``` diff --git a/README/README.md b/Notes/README.md similarity index 100% rename from README/README.md rename to Notes/README.md diff --git a/summit/Summit-deepspeed.md b/Notes/Summit-deepspeed.md similarity index 100% rename from summit/Summit-deepspeed.md rename to Notes/Summit-deepspeed.md diff --git a/summit/Summit.md b/Notes/Summit.md similarity index 100% rename from summit/Summit.md rename to Notes/Summit.md diff --git a/README/crusher-pytorch.md b/Notes/crusher-pytorch.md similarity index 100% rename from README/crusher-pytorch.md rename to Notes/crusher-pytorch.md diff --git a/README/frontier_rocmTorch_table.png b/Notes/frontier_rocmTorch_table.png similarity index 100% rename from README/frontier_rocmTorch_table.png rename to Notes/frontier_rocmTorch_table.png diff --git a/summit/olcf-jupyterhub.md b/Notes/olcf-jupyterhub.md similarity index 100% rename from summit/olcf-jupyterhub.md rename to Notes/olcf-jupyterhub.md diff --git a/units.py b/Notes/units.py similarity index 100% rename from units.py rename to Notes/units.py diff --git a/andes/Andes.md b/andes/Andes.md deleted file mode 100755 index 971b907..0000000 --- a/andes/Andes.md +++ /dev/null @@ -1,37 +0,0 @@ - - -## Request a GPU node for 24 hrs - -``` -salloc -A stf008 -p gpu -N 4 -t: 24:00:00 -module load miniconda3 -``` - -Currently, it shows 4 GPU available from the partition nodes. - -## Access to external resources - -This applies to all NCCS compute cluster - -``` -export all_proxy=socks://proxy.ccs.ornl.gov:3128/ -export ftp_proxy=ftp://proxy.ccs.ornl.gov:3128/ -export http_proxy=http://proxy.ccs.ornl.gov:3128/ -export https_proxy=http://proxy.ccs.ornl.gov:3128/ -export no_proxy='localhost,127.0.0.0/8,*.ccs.ornl.gov -``` - -## Fast compression - -It appears to be faster than the default `z` option. Decompression is even more so. The ratio for plain text is roughly 2:1 - -``` - tar cvf - core-EN | lz4 > core-EN.tar.lz4 -``` - - -To unzip: - -``` -lz4 -dc < core-EN.tar.lz4 | tar xvf - -``` diff --git a/dl-notebooks/Llama.ipynb b/jupyter-notebooks/Llama.ipynb similarity index 100% rename from dl-notebooks/Llama.ipynb rename to jupyter-notebooks/Llama.ipynb diff --git a/dl-notebooks/NLP-rnn.ipynb b/jupyter-notebooks/NLP-rnn.ipynb similarity index 100% rename from dl-notebooks/NLP-rnn.ipynb rename to jupyter-notebooks/NLP-rnn.ipynb diff --git a/dl-notebooks/NLP-tweet.ipynb b/jupyter-notebooks/NLP-tweet.ipynb similarity index 100% rename from dl-notebooks/NLP-tweet.ipynb rename to jupyter-notebooks/NLP-tweet.ipynb diff --git a/dl-notebooks/NLP-word-embeddings.ipynb b/jupyter-notebooks/NLP-word-embeddings.ipynb similarity index 100% rename from dl-notebooks/NLP-word-embeddings.ipynb rename to jupyter-notebooks/NLP-word-embeddings.ipynb diff --git a/dl-notebooks/NLP-word2vec.ipynb b/jupyter-notebooks/NLP-word2vec.ipynb similarity index 100% rename from dl-notebooks/NLP-word2vec.ipynb rename to jupyter-notebooks/NLP-word2vec.ipynb diff --git a/jupyter-notebooks/Summit-Frontier-Capability.ipynb b/jupyter-notebooks/Summit-Frontier-Capability.ipynb new file mode 100755 index 0000000..195e5d2 --- /dev/null +++ b/jupyter-notebooks/Summit-Frontier-Capability.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a17d84dc-0750-4fcb-83da-263bbe9813b0", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "# Summit System Capability" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "0677a012-b3a4-4eb1-9ebb-0e901e57321a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Total number of Summit node hours per year: 32,292,864'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# system node hours, assume 20% overhead\n", + "node_hours_yr=int(4608*24*365*0.8)\n", + "f\"Total number of Summit node hours per year: {node_hours_yr:,}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7b8cd4d9-5513-4e60-91bd-0da1a4eb8e18", + "metadata": {}, + "source": [ + "## Per Node Capability" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "497731d3-7e8c-4de3-a018-5e9b31fce563", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'flops per node-hour: 324 peta flops'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# at smaller scale\n", + "# each GPU can do 40TFlops\n", + "# \n", + "flops_per_node_max = 6 * 40\n", + "\n", + "# at 13B, a few hundreds scale, JY said it is 15 Tflops\n", + "\n", + "flops_per_node_avg = 6 * 15 \n", + "\n", + "# one node hour can provision\n", + "\n", + "tera_flops_per_node_hour = 6 * 15 * (3600)\n", + "peta_flops_per_node_hour = tera_flops_per_node_hour/1000\n", + "\n", + "f\"flops per node-hour: {peta_flops_per_node_hour:.0f} peta flops\"\n" + ] + }, + { + "cell_type": "markdown", + "id": "80bdae47-7eab-4299-ae35-3c18a033e31a", + "metadata": {}, + "source": [ + "## Model size: 13B" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "e1181208-90b6-4a18-a74d-eb4b153af1f7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Training 13B model on 460 summit node takes: 7.09 days'" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# flops needed, 20:1 ratio\n", + "flops_13B=120*(13*1e9)**2\n", + "\n", + "# per GPU flops, JY\n", + "flops_per_gpu = 15*1e12*0.8\n", + "\n", + "# 10% Summit, 460*6\n", + "flops_460_nodes = 460*6*flops_per_gpu\n", + "\n", + "# days needed\n", + "\n", + "f\"Training 13B model on 460 summit node takes: {(flops_13B/flops_460_nodes)/(24*3600):.2f} days\"" + ] + }, + { + "cell_type": "markdown", + "id": "c00619df-68aa-4f63-8b5f-69cc39f54ef3", + "metadata": { + "tags": [] + }, + "source": [ + "# Frontier System Capability" + ] + }, + { + "cell_type": "markdown", + "id": "2cddbe3e-a793-4665-8f3e-3016ee3a1f6e", + "metadata": {}, + "source": [ + "## Node capability" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "69dcd9cd-6278-43de-ad42-d50bd1f5e3ed", + "metadata": {}, + "outputs": [], + "source": [ + "## At scale, Sajal measured capability is 37 tera flops per GCD\n", + "\n", + "flops_per_node = 37 * 6 \n" + ] + }, + { + "cell_type": "markdown", + "id": "5d51ba88-95bb-4bf7-ace3-691b815f8237", + "metadata": {}, + "source": [ + "## 1T model: measured days vs. roofline days" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c333382b-7660-4c24-a025-1fcad3224d6d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "token_data_ratio = np.arange(1,101)\n", + "flops_1T=6*token_data_ratio*(1e12)**2\n", + "gcd_flops = 37*(1e12)\n", + "frontier_flops = 9000*4*2*gcd_flops\n", + "t_days = t_secs/(3600*24)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "c212309a-fdbd-4b5a-9daf-56a659911f23", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHGCAYAAACVcJQUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABuEklEQVR4nO3dd3wUdf7H8ddms+kktIQaeq9JiCgoKEgTKRZAiAUU5e4URVGOoqKADSwoyHnngcBxFCliaIKgaABRISH0FnovgfS2ZX5/8CNnpCYkbLL7fj4ePEjmOzvz+e5swpv5zszXZBiGgYiIiIgb83B2ASIiIiLOpkAkIiIibk+BSERERNyeApGIiIi4PQUiERERcXsKRCIiIuL2FIhERETE7SkQiYiIiNtTIBIRERG3p0Ak4iQJCQk88cQTnDlzxtmlSBG78847ueOOO5xdRrGj90WKEwUikZvw7bffYjKZrvvnm2++ydc2jx8/zuzZs8nMzCyiqm/NgAEDcvvm7+9PixYtGDduHOnp6be03ZycHM6dO1dIVd7YTz/9lOc4+fv7c9dddzFz5sxb2m5++mE2mzGbzbe0v+KsoD8frv6+SMni6ewCREqCjh07sn///tzvH3/8cQBmz56du6xKlSq3va6iVrlyZX7++Weys7PZunUrr7/+OtHR0cTExODn51egbQ4aNIjDhw/z008/FW6xN/Df//6XO++8k7S0NJYtW8YzzzzDxYsXefnllwu0vfz045dffinQPkqKgv58uPr7IiWLApHITfD396dOnTq53/v6+gLkWeaKLBZLbh8bN25Mq1ataNiwIZ988glvvPGGk6vLnypVquT2JSwsjO3btzNx4sQCByL5H3f9+RDXoiEzkSJw8OBBunfvTkBAAH5+fnTu3Jndu3ff8HXffPMNnp6ejBkzJs/yc+fO8fjjjxMUFISfnx/du3fnyJEjedaZMWMGjRo1Ij4+ns6dO+Pj40OFChWYMmVKofWrZs2a9OjRg1mzZuUuS05Opnfv3lSpUgVPT0+Cg4MZNGjQFUNrl4fgZs6cyc8//5w7lPLggw/mWe9mt3erateuzbFjx4qsHwDly5fPM2x0+PDhq9ZS0M/L1YSHh9OnT58rlg8cOJBmzZrlWbZu3Tratm2Lr68vFouFRo0aMX78eLKysgq075t1o/fl8OHD+Pn5sWDBAsqWLUvNmjVZv3497du3x9vbm9deey3P+jfz8yFyIwpEIoUsJSWFe++9l4yMDNasWcPatWux2Wy0a9eOCxcuXPN1K1eupG/fvgwfPpy33nord3l2djYdOnTg8OHDLFu2jJ9//hmr1UrHjh2v+Ifr6NGj9OnTh/79+xMXF8eDDz7IkCFDCvXC7cjISPbt20dGRgYAQUFBdOvWjUWLFrFz507+85//sGbNGoYNG5bndePHj2f//v08/PDDtGzZkv3797N//36mT5+eZ72b3d6tOnr0KDVq1Mj3fm+2HwCbNm1i//79/Pe//71mHQX9vFxLv379WL58ee7xAbDZbCxevDh3KAsuhYguXboQEhLC+vXriY+PZ8SIEaxfvx673Z7v/ebHzbwvmZmZzJkzh9WrVxMcHMyDDz7IgAED+PLLL5k4cWJuUM3Pz4fIdRkikm/33nuvce+991617bPPPjPMZrNx5syZ3GVnz541zGazMWHChNxla9euNQDj0KFDxtq1aw0fHx9j2LBhV2zvyy+/NCwWS57tJSUlGX5+fsacOXNyl02fPt0AjL179+Yui4uLMwAjJiYm333s37+/Ub169SuW//vf/zYA49ixY9d87euvv27Uq1fvmtu91ntXkO3dyOX3ee3atYZhGEZmZqbxn//8x7BYLMaUKVMKvN/89OOPx/rPbvbzcrOOHj1qmEwmY+HChbnLVq1aZZhMJuPIkSO5yzZs2GAAxoIFC/K9jxu53s/HH13rfTl06JABGAkJCYZhGMZTTz1lPPHEE4ZhGMbBgwcNwDh8+LBhGDf/8yFyIzpDJFLI1q1bR8OGDQkJCcldFhwcTKNGjdi4ceMV6//66690796dQYMGMWHChCva16xZQ/369fNsLygoiEaNGvHbb79dsX69evVyvy5dujRAkf+Pf9asWbRt25Zy5crh4+PDBx98QHZ2drHZHkCnTp3w8fHB19eXESNGMGnSJJ5//vki3++N5PfzciOhoaHcc889LFy4MHfZokWLaNOmDdWqVctdFh4eTv369Xn22WcZPnz4bTkzlF+X70AzmUx5vgYwDAPI/8+HyLUoEIkUssTERMqUKXPF8tKlS5OUlHTF8oMHD5KWlkbNmjWvur1z586xc+dOfHx88vyJjY0lOTn5urVc/sejMJ06dQqTyUT58uUB+Oyzz3jqqado1aoV3333HfHx8fz1r38t8PYLe3uXTZ06lV9//ZWQkBC6d+9+xTaLar83kt/Py82Iiopi2bJlZGZmYrfbrxgug0sXPm/atIk333yTX375hfbt21O9enX+85//FGifznIrPx8if6S7zEQKWZkyZfLcgnzZxYsXadCgwRXLo6KiMJlMDB06lCpVqtC7d+887eXKlaNp06Z8/fXXV7z28hmg22nDhg00bdoUHx8fAL766ivuv/9+xo8fn7vO5bBUEIW9vcuqVatGWFgYkyZNom/fvjz66KN07NixyPd7I/n9vNyM3r178+KLL7Jq1SqCgoJITk6mV69eV6xXqlQpXn31VV599VUuXrzIiBEj6N+/P82aNSMsLKxA+77ditvPh5RcOkMkUsjuvvtudu3axdmzZ3OXnT17lt27d9OmTZurvmbkyJE899xzPPnkk/z888952u677z4SEhIIDg6mQYMGef5UrFixSPvyZ3FxcaxevZoBAwbkLrNarVec4UhMTLzmNjw9PbFarddsz+/28uuxxx6je/fuPPvss6SkpBR4vzfqx80qyOflRsqVK0enTp1YuHAhCxcupGvXrpQtW/aK9RwOR+7XZcqUYciQIQDs2LGjQPt1huL08yElmwKRSCF75plnCAkJoV+/fvz222/89ttv9OvXj0qVKuUJEn82ZcoUOnTowEMPPZTnH6Snn36a0NBQunXrxg8//MDu3buZPXs2vXv3Ji0trUj7YrVaSUhIYOfOnXzxxRd07tyZNm3a8MILL+Su07FjR1asWMHixYvZsWMHb7/9NrNnz+bcuXNXvc28bdu2bNq0ifnz57Nnzx7mz5/Pvn37Cry9gpgyZQoXL17k1VdfLbJ+wKXpWRISEjhx4gRw6XbyhISEPHf9FfTzciNRUVEsXbqUb775hqioqCvaJ02aRKtWrVi4cCG7d+9mw4YNDBs2DG9vb1q3bl3g/d6Mm3lfbpYzfz7ExTj7qm6RkuhGd9Hs3bvX6NKli+Hr62v4+voaXbt2zb1j5rKr3WGTmppqtGjRwggNDc1zF9epU6eMJ554wihTpoxhNpuNxo0bGxMnTjRycnJy17l8l9kfXb5b5/IdVvnRv39/AzAAw8vLywgLCzMmTJhgZGVl5VkvLS3NeOKJJwx/f3+jVKlSxuOPP24cOXLE6NKli/HFF19csV2Hw2GMHj3aqFChgmE2m42GDRsa33zzTYG3dyN/vsvssilTphiAsWrVqiLph2EYue/fn//0798/z3o383nJr9TUVMPPz88oVaqUkZmZeUX7iRMnjL/+9a9GlSpVDA8PD6N06dJG586djfXr19/Sfg3jxj8fN3pfLn9uL/9s9O/f/5pthnFzPx8iN2IyjP+/VF9ERETETWnITERERNyeApGIiIi4PQUiERERcXsKRCIiIuL2FIhERETE7SkQiYiIiNvT1B03weFwcPLkSUqVKlUkc0OJiIhI4TMMg9TUVCpXroyHx/XPASkQ3YSTJ08SGhrq7DJERESkAI4dO0bVqlWvu44C0U0oVaoUcOkNDQwMvO66VquV77//nk6dOmGxWG5HeU6hfroWt+hnejpUrgyA9cgRLC468adbHEvUT1dTVP1MSUkhNDQ099/x61EgugmXh8kCAwNvKhD5+fkRGBjo8h9e9dN1uEU/zebcL62BgVhu8LNcUrnFsUT9dDVF3c+budxFF1WLiIiI21MgEhEREbenITMRcQ+enjiefJLjx49TyVO/+kQkL/1WEBH34O2Nfdo0tqxYQSVvb2dXIyLFjIbMRERExO0pEImIezAMSE/HnJV16WsRkT/QkJmIuIeMDCxlytANsF68CF5ezq5IRIoRnSESERERt6dAJCIiIm6vWASi1NRUnn/+eTw8PDh8+HCettjYWMLCwvD09CQsLIzNmzfnac/MzKR///74+fkRHBzMhAkTrtj+rFmzqFq1Kl5eXnTv3p1z584VZXdERESkhHF6IPrhhx9o0qQJ6enpGH+60DEzM5OePXvSs2dPLl68SGRkJD169CAjIyN3nVGjRrFjxw4SEhJYvHgxw4cPJzo6Orc9Pj6e5557jn/961+cOXOGw4cP89xzz922/omIiEjx5/RAZLfbmTZtGjNnzryibfny5dhsNkaPHo2/vz+7d+/Gw8ODFStW5L52+vTpjBs3jsqVKxMTE0OzZs2YOnVq7jamTp1K9+7defDBB0lJScHb25slS5Zw9uzZ29ZHERERKd6cfpdZp06drtkWGxtLREQEZrOZxYsX06FDB2JjY4mNjaVXr14kJCSQnJxMZGQkWVlZLFmyhJEjR/LKK6/k2cbDDz8MwCeffMKHH35I9+7d2bJlC507d77qfrOzs8nOzs79PiUlBbg0+ZzVar1ufy6332i9kk79dC1u0U+rFUvu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EXF7CkQiIiLi9hSIRERExO0pEImIiIjbUyASERERt6dAJCK3ZO/evRw/ftzZZYiI3BIFIhG5JX/5y19Ys2aNs8uQP9mwYQMBAQFs2LDB2aWIlAgKRCJu6u2338ZkMl31T5cuXZxdXr4MGDAAk8mE2WymSpUqPP744xw6dCjf24mNjeXuu+8uggov+eN77u/vT6tWrVixYkW+t7N06VL69Olz3XVKly5No0aNKF26dAGrFXEvCkQibmr06NFYrVasVitvvvkmbdu2zf1++fLlzi4v35588kmysrL47bffCA4OpnXr1pw7dy5f20hNTeXEiRNFVOEll9/nM2fO8Pzzz/PQQw+xa9eufG0jMTGRs2fPXnedxo0b8/vvv9O4ceNbKVfEbSgQibgpDw8PPD098fT0xMPDA5PJlPv9Hycl/umnn2jatCmenp40bNiQlStXXnObdrudhx56iLvvvpuMjIzc5d9//z0NGzbE09OTFi1asHnz5ty2w4cPU6tWLZYsWULDhg2xWCw8+uijuRPQ5qc/FouFqlWr8umnn1K9enUmT56c2z527FiqVq2K2WymevXq/Pe//83z+tKlS9OuXTuOHDmSexZn/vz5ue2GYdCzZ0/KlCmDxWIhIiKCuLi4fNUI5L7PAQEBPPnkkzRp0oTvvvsut/1vf/sbISEhue/3999/n9uWlJSEyWTi6aef5ueff86t8/fff8+zj4CAgNy2GTNmXFHDsWPH6NSpE97e3lSsWJEJEybkux8irkaBSESu6dSpU3Tv3p2XXnqJpKQkhg8fziOPPMKxY8euuv6LL77IgQMHWLZsGX5+fgDs37+f/v37M2XKFFJSUnj++efp1q1bnsB07Ngx/v3vf7Ny5Ur27NnD999/z48//nhLtT/44IP89NNPud/37NmT9evXk5aWxuTJkxk4cCBnzpzJbT9//jxr1qyhWrVquWfKevfundtuMpkYNmwY+/btIzExkQceeIABAwbcUo1wKWj9cUrJp59+mvj4eFJSUnjppZfo27cvVqsVuBTarFYrU6dOzXNG74477sizzaSkJKxWK23btr3q/h555BGqVavG6dOnWbJkCR988AGLFi265b6IlGQKRCJyTXPnzqVOnTo899xzBAQEMGDAABo0aJDnzMll7777Lt999x0rV66kTJkyucv//e9/06tXL9q3b4+fnx8DBw4kJCSEmJiY3HVsNhvz58+nevXq1K5dmyZNmnDq1Klbqr1SpUqcPHky9/vmzZtTo0YNfH196dGjByEhIezduze3/fKZsT+eKTOZTHm2ec899xAcHExgYCDPPPMMO3bsuKUalyxZwp49e+jZs2fuspYtW1K5cmX8/PwYNGgQFy9ezPNe3Eyd11oOsGXLFmJjY/nwww8pU6YMLVu2ZMCAAVc9kyTiTjydXYCIFF979+6lYcOGeZY1aNCAffv25Vn2448/MmvWLGJjY6lSpUqetq1bt7JhwwYWLFiQu+zChQt5zs4A+Pr65n7t7e2d56xJQTgcjjyBYP369YwfP57t27eTlZXFuXPncDgc+drm9OnTmTZtGocPHyY7O7tANf7yyy9UrFiRrKwsQkJCiI6Opm7durnty5Yt47PPPmPv3r3k5OTk9qWw7N27l4oVK+YJrQ0aNCiR142JFCadIRKRW9amTRvuvfde3njjDex2+xXtzzzzDPHx8bl/jh49esO7pG7V0aNHqVq1KgAHDx7k/vvv56677uKHH34gPj6eypUr52t7s2fPZsiQIQwZMoSNGzcW6O4wgMjISOLj47nrrrto164dnTp1ym3bsGEDDz/8ML179yYmJob4+PgC7UNE8k+BSESuqX79+uzZsyfPsj179tCoUaM8yywWCwsXLmT37t38/e9/z9PWuHFj9u/fT8WKFfP8+eMZocJmt9v55ptv6NixIwAbN26kbNmyvP7669SuXZuKFSvmuXD8MpPJdM2zPj/99BMPPvggvXv3JjQ0lODg4ALV5uXlRcWKFfnyyy+ZN29enguqf/rpJyIjIxk0aBA1atSgYsWKV93G9eq8kfr163P69GmSkpJyl13tmIq4GwUiEbmmvn37snfvXmbMmEFaWhozZswgISHhqmd3ypcvz7Jly/jyyy/56quvcpcPGjSItWvX8u9//5v09HRiY2N5/fXXC71Wh8OB1Wrl0KFDDBgwgIyMDJ5//nkA6taty7lz51i/fj2pqal88sknnDhx4opb7GvXrs3p06f57bffSE9Pz3M3XN26ddm0aRNHjx7l9OnTjB49GpPJVODb9KtVq8aHH37IwIEDSUxMzN3Hnj172LNnDxcvXmTYsGGYzeYr9lGvXj127NjBvn37SElJueJMks1mw2azYRgGdrsdm82WO+wWHh5OWFgYI0aMICkpid9//50ZM2bw7LPPFqgfIq5CgUhErqly5cosXbqUDz/8kNKlS/Pxxx+zZMkSKlWqdNX1GzduzOzZs3n++ef5+eefgUvXpyxdupRJkyZRunRpevXqRWBgYKFeFwMwa9YsvLy8aNWqFRaLhfXr1+c+lLBly5a88cYbdOvWjapVq3LixAmmT59OdHR0nm1UrVqVyZMn06NHD8qVK8fIkSNz7/B64YUXCAsLo27dutxxxx106NCBF198ka+//rrANT/33HM0btw4N7g9+uijPPbYY0RERFCvXj2Cg4P54IMPWLhwYZ7XtWrVihdffJE777yTihUr8tFHH+W2ZWVlYbFYsFgsxMTE8Oyzz2KxWJg0aRJw6ezS4sWLSUhIICQkhIcffpixY8fy4IMPFrgfIq7AZNzqlYsiIiIiJZzOEImIiIjbUyASERERt6dAJCIiIm5PgUhERETcngKRiIiIuD0FIhEREXF7CkQiIiLi9hSIRERExO0pEImIiIjbUyASERERt6dAJCIiIm5PgUhERETc3v8BZlhobbgWK/QAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# Given data\n", + "token_data_ratio = np.arange(1, 41)\n", + "flops_1T = 6 * token_data_ratio * (1e12)**2\n", + "gcd_flops = 37 * (1e12)\n", + "frontier_flops = 9408 * 4 * 2 * gcd_flops\n", + "t_secs = flops_1T / frontier_flops\n", + "t_days = t_secs / (3600 * 24)\n", + "\n", + "# Create the plot\n", + "plt.figure()\n", + "plt.plot(token_data_ratio, t_days)\n", + "\n", + "# Add vertical line when token_data_ratio=20\n", + "plt.axvline(x=20, color='r', linestyle='--')\n", + "t_value_at_20 = t_days[np.where(token_data_ratio == 20)][0]\n", + "plt.annotate(f\"{int(round(t_value_at_20))}\", xy=(20, t_value_at_20), xytext=(25, t_value_at_20),\n", + " arrowprops=dict(facecolor='blue', arrowstyle='->', lw=2))\n", + "\n", + "# Set plot properties\n", + "plt.xlabel('Token Data Ratio')\n", + "plt.ylabel('Time (days)')\n", + "plt.title('Token Data Ratio vs Time')\n", + "plt.grid(True)\n", + "plt.xticks(fontname=\"Fira Code\")\n", + "plt.yticks(fontname=\"Fira Code\")\n", + "\n", + "# Show the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "924bde60-970d-437c-8f86-276859bce1dc", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "\n", + "# Your given data and calculations\n", + "token_data_ratio = np.arange(1,41)\n", + "flops_1T=6*token_data_ratio*(1e12)**2\n", + "measured_gcd_flops = 37*(1e12)\n", + "roofline_gcd_flops=193*(1e12)\n", + "measured_frontier_flops = 9408*4*2*measured_gcd_flops\n", + "roofline_frontier_flops = 9408*4*2*roofline_gcd_flops\n", + "measured_days = flops_1T/(measured_frontier_flops*3600*24)\n", + "roofline_days = flops_1T/(roofline_frontier_flops*3600*24)\n", + "\n", + "# Create the plot\n", + "plt.figure()\n", + "\n", + "# Plot measured_days vs token_data_ratio\n", + "plt.plot(token_data_ratio, measured_days, label='Measured Days')\n", + "\n", + "# Plot roofline_days vs token_data_ratio as a dotted line\n", + "plt.plot(token_data_ratio, roofline_days, 'r--', label='Roofline Days')\n", + "\n", + "# Add a vertical line at token_data_ratio=20\n", + "plt.axvline(x=20, color='g', linestyle='--')\n", + "\n", + "# Annotate the cross point with value of measured_days and roofline_days\n", + "index_20 = np.where(token_data_ratio == 20)[0][0]\n", + "measured_value = int(round(measured_days[index_20]))\n", + "roofline_value = int(round(roofline_days[index_20]))\n", + "\n", + "plt.annotate(f'{measured_value}', xy=(20, measured_days[index_20]), xytext=(20+2, measured_days[index_20]), arrowprops=dict(facecolor='blue', arrowstyle='->', lw=2))\n", + "plt.annotate(f'{roofline_value}', xy=(20, roofline_days[index_20]), xytext=(20+2, roofline_days[index_20]), arrowprops=dict(facecolor='blue', arrowstyle='->', lw=2))\n", + "\n", + "# Setting font to Fira Code\n", + "plt.rcParams['font.family'] = 'Fira Code'\n", + "\n", + "# Add labels and title\n", + "plt.xlabel('Token Data Ratio')\n", + "plt.ylabel('Days')\n", + "plt.title('Measured Days and Roofline Days vs Token Data Ratio')\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e59faad-91bc-46d1-8aec-ec8357975287", + "metadata": {}, + "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.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/dl-notebooks/ml-PCA.ipynb b/jupyter-notebooks/ml-PCA.ipynb similarity index 100% rename from dl-notebooks/ml-PCA.ipynb rename to jupyter-notebooks/ml-PCA.ipynb diff --git a/dl-notebooks/ml-SVM.ipynb b/jupyter-notebooks/ml-SVM.ipynb similarity index 100% rename from dl-notebooks/ml-SVM.ipynb rename to jupyter-notebooks/ml-SVM.ipynb diff --git a/dl-notebooks/ml-activation.ipynb b/jupyter-notebooks/ml-activation.ipynb similarity index 100% rename from dl-notebooks/ml-activation.ipynb rename to jupyter-notebooks/ml-activation.ipynb diff --git a/dl-notebooks/ml-autograd.ipynb b/jupyter-notebooks/ml-autograd.ipynb similarity index 100% rename from dl-notebooks/ml-autograd.ipynb rename to jupyter-notebooks/ml-autograd.ipynb diff --git a/dl-notebooks/ml-basics.ipynb b/jupyter-notebooks/ml-basics.ipynb similarity index 100% rename from dl-notebooks/ml-basics.ipynb rename to jupyter-notebooks/ml-basics.ipynb diff --git a/dl-notebooks/ml-bayesian.ipynb b/jupyter-notebooks/ml-bayesian.ipynb similarity index 100% rename from dl-notebooks/ml-bayesian.ipynb rename to jupyter-notebooks/ml-bayesian.ipynb diff --git a/dl-notebooks/ml-chain-rule.ipynb b/jupyter-notebooks/ml-chain-rule.ipynb similarity index 100% rename from dl-notebooks/ml-chain-rule.ipynb rename to jupyter-notebooks/ml-chain-rule.ipynb diff --git a/dl-notebooks/ml-cnn.ipynb b/jupyter-notebooks/ml-cnn.ipynb similarity index 100% rename from dl-notebooks/ml-cnn.ipynb rename to jupyter-notebooks/ml-cnn.ipynb diff --git a/dl-notebooks/ml-gd_1.ipynb b/jupyter-notebooks/ml-gd_1.ipynb similarity index 100% rename from dl-notebooks/ml-gd_1.ipynb rename to jupyter-notebooks/ml-gd_1.ipynb diff --git a/dl-notebooks/ml-gd_2.ipynb b/jupyter-notebooks/ml-gd_2.ipynb similarity index 100% rename from dl-notebooks/ml-gd_2.ipynb rename to jupyter-notebooks/ml-gd_2.ipynb diff --git a/dl-notebooks/ml-gd_3.ipynb b/jupyter-notebooks/ml-gd_3.ipynb similarity index 100% rename from dl-notebooks/ml-gd_3.ipynb rename to jupyter-notebooks/ml-gd_3.ipynb diff --git a/dl-notebooks/ml-gradient-descent.ipynb b/jupyter-notebooks/ml-gradient-descent.ipynb similarity index 100% rename from dl-notebooks/ml-gradient-descent.ipynb rename to jupyter-notebooks/ml-gradient-descent.ipynb diff --git a/dl-notebooks/ml-kmeans.ipynb b/jupyter-notebooks/ml-kmeans.ipynb similarity index 100% rename from dl-notebooks/ml-kmeans.ipynb rename to jupyter-notebooks/ml-kmeans.ipynb diff --git a/dl-notebooks/ml-linear-regression.ipynb b/jupyter-notebooks/ml-linear-regression.ipynb similarity index 100% rename from dl-notebooks/ml-linear-regression.ipynb rename to jupyter-notebooks/ml-linear-regression.ipynb diff --git a/dl-notebooks/ml-logistic.ipynb b/jupyter-notebooks/ml-logistic.ipynb similarity index 100% rename from dl-notebooks/ml-logistic.ipynb rename to jupyter-notebooks/ml-logistic.ipynb diff --git a/dl-notebooks/ml-neural-network.ipynb b/jupyter-notebooks/ml-neural-network.ipynb similarity index 100% rename from dl-notebooks/ml-neural-network.ipynb rename to jupyter-notebooks/ml-neural-network.ipynb diff --git a/dl-notebooks/ml-normal-equation.ipynb b/jupyter-notebooks/ml-normal-equation.ipynb similarity index 100% rename from dl-notebooks/ml-normal-equation.ipynb rename to jupyter-notebooks/ml-normal-equation.ipynb diff --git a/dl-notebooks/ml-propgation.ipynb b/jupyter-notebooks/ml-propgation.ipynb similarity index 100% rename from dl-notebooks/ml-propgation.ipynb rename to jupyter-notebooks/ml-propgation.ipynb diff --git a/dl-notebooks/ml-regularization.ipynb b/jupyter-notebooks/ml-regularization.ipynb similarity index 100% rename from dl-notebooks/ml-regularization.ipynb rename to jupyter-notebooks/ml-regularization.ipynb diff --git a/dl-notebooks/ml-softmax.ipynb b/jupyter-notebooks/ml-softmax.ipynb similarity index 100% rename from dl-notebooks/ml-softmax.ipynb rename to jupyter-notebooks/ml-softmax.ipynb diff --git a/dl-notebooks/ml-transfer-learning.ipynb b/jupyter-notebooks/ml-transfer-learning.ipynb similarity index 100% rename from dl-notebooks/ml-transfer-learning.ipynb rename to jupyter-notebooks/ml-transfer-learning.ipynb diff --git a/nlp-model-scaling.ipynb b/jupyter-notebooks/nlp-model-scaling.ipynb old mode 100755 new mode 100644 similarity index 99% rename from nlp-model-scaling.ipynb rename to jupyter-notebooks/nlp-model-scaling.ipynb index 988fe22..b72f665 --- a/nlp-model-scaling.ipynb +++ b/jupyter-notebooks/nlp-model-scaling.ipynb @@ -249,9 +249,9 @@ ], "metadata": { "kernelspec": { - "display_name": "pt-cuda11", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "pt-cuda11" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -263,7 +263,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/dl-notebooks/pytorch-Autograd.ipynb b/jupyter-notebooks/pytorch-Autograd.ipynb similarity index 100% rename from dl-notebooks/pytorch-Autograd.ipynb rename to jupyter-notebooks/pytorch-Autograd.ipynb diff --git a/dl-notebooks/pytorch-Tensors.ipynb b/jupyter-notebooks/pytorch-Tensors.ipynb similarity index 100% rename from dl-notebooks/pytorch-Tensors.ipynb rename to jupyter-notebooks/pytorch-Tensors.ipynb diff --git a/dl-notebooks/pytorch-basics.ipynb b/jupyter-notebooks/pytorch-basics.ipynb similarity index 100% rename from dl-notebooks/pytorch-basics.ipynb rename to jupyter-notebooks/pytorch-basics.ipynb diff --git a/dl-notebooks/pytorch-vision.ipynb b/jupyter-notebooks/pytorch-vision.ipynb similarity index 100% rename from dl-notebooks/pytorch-vision.ipynb rename to jupyter-notebooks/pytorch-vision.ipynb diff --git a/metrics.ipynb b/metrics.ipynb deleted file mode 100755 index 5e1dbef..0000000 --- a/metrics.ipynb +++ /dev/null @@ -1,130 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The following notes taken for DL_pytorch slide deck \"Metrics\" section." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "from sklearn.metrics import confusion_matrix\n", - "from sklearn.metrics import ConfusionMatrixDisplay\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "y_true = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", - "y_pred = [0, 0, 1, 1, 0, 1, 1, 1, 1, 0]\n", - "cm = confusion_matrix(y_true, y_pred)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(3, 2, 1, 4)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def split_confusion_matrix(cm):\n", - " # actual negatives go in the top row\n", - " actual_negative = cm[0]\n", - "\n", - " # predicted negatives go in the first column\n", - " tn = actual_negative[0]\n", - "\n", - " # predicted positives go in the second column\n", - " fp = actual_negative[1]\n", - "\n", - " # actual positives go in the bottom row\n", - " actual_positive = cm[1]\n", - "\n", - " # predicted negatives go in the first column\n", - " fn = actual_positive[0]\n", - "\n", - " # predicted positives go in the second column\n", - " tp = actual_positive[1]\n", - "\n", - " return tn, fp, fn, tp \n", - "\n", - "split_confusion_matrix(cm)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.8, 0.4)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def tpr_fpr(cm):\n", - " tn, fp, fn, tp = split_confusion_matrix(cm)\n", - " tpr = tp / (tp + fn)\n", - " fpr = fp / (fp + tn)\n", - " return tpr, fpr \n", - "\n", - "tpr_fpr(cm)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "d61e67d4406f83661a218a7594034be74564666d0640d3900a3e99845865d0f0" - }, - "kernelspec": { - "display_name": "Python 3.9.12 ('torch')", - "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.9.12" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/sfmono.py b/sfmono.py deleted file mode 100755 index 334d990..0000000 --- a/sfmono.py +++ /dev/null @@ -1,46 +0,0 @@ -import pandas as pd -import numpy as np -import altair as alt - -def sfmono(): - font = "SFMono-Regular" - - return { - "config" : { - "title": { - 'font': font, - 'fontSize': 13 - }, - "axis": { - "titleFont": font, - "titleFontSize": 12, - "labelFont": font, - "labelFontSize": 11 - }, - "view": { - 'width': 500, - 'height': 400 - }, - "legend": { - "titleFont": font, - "titleFontSize": 12, - "labelFont": font, - "labelFontSize": 11 - }, - "text": { - "font": font, - "fontSize": 12, - }, - "header": { - "titleFont": font, - "titleFontSize": 11, - "labelFont": font, - "labelFontSize": 11 - } - } # config - } # return - -alt.themes.register('sfmono', sfmono) -alt.themes.enable('sfmono') - -