ixxi-dante/nw2vec

View on GitHub
projects/behaviour/memory-time.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Analyse time and memory consumption of AN2VEC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "from collections import defaultdict\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sb\n",
    "\n",
    "plt.style.use('bmh')\n",
    "sb.set_context('paper', font_scale=1.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "datapath = '../../data/behaviour/memory-time'\n",
    "basename = ('git=0335ce8eed-'\n",
    "            'l=50,100,200,500,1000,2000,5000,10000-k=10-'\n",
    "            'diml1enc=100-diml1dec=100-'\n",
    "            'dimxiadj=16-dimxifeat=16-overlap=0,8,16-'\n",
    "            'bias=false-sharedl1=false-decadjdeep=true,false-'\n",
    "            'nepochs=200')\n",
    "basepath = datapath + '/' + basename"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute time"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Read the recorded job data from the csv file saved by GNU Parallel, and process its contents to extract:\n",
    "- `JobRunime` / `Full script time`: the time it takes for the an2vec script to run *in full*\n",
    "- `ComputeTime` / `Training time`: the time it takes for the actual training to run (so excluding data loading, pre-compilation, etc.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "time = pd.read_csv(basepath + '.csv')\n",
    "\n",
    "time_pattern = re.compile('Time: ([0-9]+:[0-9]+:[0-9]+)')\n",
    "def parse_time(s):\n",
    "    match = re.search(time_pattern, s)\n",
    "    if match is None:\n",
    "        assert \"OutOfMemory\" in s\n",
    "        return np.nan\n",
    "    parts = match.groups()[0].split(':')\n",
    "    return int(parts[-1]) + 60 * int(parts[-2]) + 3600 * int(parts[-3])\n",
    "\n",
    "time['ComputeTime'] = time.Stderr.map(parse_time)\n",
    "time = time[['Seq', 'JobRuntime', 'decadjdeep', 'l', 'k', 'dimxi', 'ComputeTime']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Make a helper to format our log axis ticks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def format_logtick(n):\n",
    "    exponent = int(np.log10(n))\n",
    "    factor = int(n / 10**exponent)\n",
    "    assert factor == n / 10**exponent\n",
    "    if exponent == 0:\n",
    "        return str(factor)\n",
    "    times = r'{} \\times '.format(factor) if factor > 1 else ''\n",
    "    return r'$\\mathregular{' + times + '10^{}'.format(exponent) + '}$'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot training time and full script run time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Ev3v1O/7O8tJb9AOlVRy3YINTb6+rErx+NKdDqdfcF1vYsMDHU5/yy23cOedd1Z/buwfualceumlvPHGGwwaNIiRI0dy8cUXM3ToUAA2bdrEaaed1uD43SmnnNLoPfr164e/v3/159NOO42PPvqo+eLrwN7g2lqa3bt3rz4WFxfHwYMHAcjMzKSkpKTa2IHWBS8tLfWqaBeuYEfWQVbc8ihtdu+k90ez6HjO6XpLcoqT3qBFhQaw4LreDqXdkl/EMyt21WihBfsLU89NqrOFVllVSYB/zSKOCnWuyKOioujcufMJx/38/E6YiausPLGlaW9AGqJDhw789ddfLF26lOXLl3Pttddyww03MGPGDJRSjc5ouXJQ3hXOpIGBxx8aNu21j9lar7ZlTN999131+szKykoCAgKIjo5utpbm0LFjR4/d67dVm9hz96PEhgQxbOn7tOzY1mP3dhUnvUHz9xOHW0xDw6O4oHssP20tqD52QXIMQzrVPbZQWSkOD8o7S2xsLAUFBVRVVVUbreYOYoeHh3PZZZdx2WWXMWzYMCZNmsSMGTPo2bMnX331FWVlZc2aZU1LS6ux6HvdunV07doVOD55UdXImsCAgADKysqarKEukpOTCQoKYt++fZx33nnAcYOmN44OGTQHpRSfzV9G4JMzaXlaH86f9xSBEe5feO8OzEkBJ5k4NJFnRnVh4tD2PDOqCxOG1h8i2Z0+RKeddhpKKZ577jl27tzJ22+/zapVq05I15iBsLFgwQI++ugjtmzZwvbt2/nuu++qjY1tQuCOO+4gPT2dbdu2MWfOHIqLi53SXFhYyNSpU9m2bRvz58/nq6++4vbbbwcgISGBkJAQfv75Z3Jzc+vNOzExkfXr15OVlVXdZWwukZGR3H777UyePJlvvvmG3bt3s3r1ap588km2bt3qkns0lays+iedXEFppYV3HplL+NQnib3+ci769AWvNWbghQZNROJEpFBExuqloVerCM5PjqVXqwi9JBAbG8trr73GJ598wjnnnMOGDRu49dZbm5xfZGQk7733Hueddx4jR46ksLCQd955B9DcTz7//HOKi4sZNWoU559/PsuWLXN6kfbFF1+MUooRI0bw9NNP89RTT1VPQgQEBDBt2jRmzpxJv379ePXVV+vM44YbbiA6OprBgwfTrVu3Jn/f2kybNo2xY8fy73//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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "compute_job_times = time[time.decadjdeep == True]\\\n",
    "    .groupby('l')['JobRuntime', 'ComputeTime']\\\n",
    "    .mean()\\\n",
    "    .dropna()\\\n",
    "    .rename(columns={'ComputeTime': 'Training time', 'JobRuntime': 'Full script time'})\n",
    "# Convert index from `l` to `#nodes`\n",
    "k = time.k.unique().item()\n",
    "\n",
    "compute_job_times.index = compute_job_times.index * k\n",
    "compute_job_times.index.names = ['#nodes']\n",
    "\n",
    "ax = compute_job_times.plot(marker='o', logx=True, logy=True, figsize=(4, 3))\n",
    "nticks = np.array(list(filter(np.isfinite, time.dropna().l.unique()))) * k\n",
    "yticks = np.array([1e2, 1e3, 1e4])\n",
    "ax.set(xticks=nticks,\n",
    "       xticklabels=list(map(format_logtick, nticks)),\n",
    "       xlabel='#nodes',\n",
    "       yticks=yticks,\n",
    "       yticklabels=list(map(format_logtick, yticks)),\n",
    "       ylabel='Time (seconds)')\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)\n",
    "\n",
    "ax.figure.savefig(basepath + '-time.pdf', bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Memory consumption"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Preprocessing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import and parse the data logged by `top`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def parse_with_units(s):\n",
    "    if s[-1] == 't':\n",
    "        return float(s[:-1]) * 1e9\n",
    "    if s[-1] == 'g':\n",
    "        return float(s[:-1]) * 1e6\n",
    "    if s[-1] == 'm':\n",
    "        return float(s[:-1]) * 1e3\n",
    "    else:\n",
    "        return float(s)\n",
    "\n",
    "memory = defaultdict(list)\n",
    "whitespace = re.compile(' +')\n",
    "with open(basepath + '.memory.log', 'r') as f:\n",
    "    for line in f:\n",
    "        parts = whitespace.split(line.strip())\n",
    "        try:\n",
    "            memory['virtual'].append(parse_with_units(parts[4]))\n",
    "            memory['resident'].append(parse_with_units(parts[5]))\n",
    "            memory['shared'].append(parse_with_units(parts[6]))\n",
    "            memory['%cpu'].append(float(parts[8]))\n",
    "            memory['%mem'].append(float(parts[9]))\n",
    "        except IndexError:\n",
    "            break\n",
    "\n",
    "memory = pd.DataFrame(memory)\n",
    "memory_cols = ['virtual', 'resident', 'shared']\n",
    "percentage_cols = ['%cpu', '%mem']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Have a look at the memory and cpu usages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f112517db00>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "memory.iloc[:100000].plot(y=percentage_cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f1124e11ac8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "memory.plot(y=memory_cols, logy=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define the ranges of line numbers (in the `top` lop) that correspond to each network size. This is done manually by zooming into areas in the plot right abev (plot of memory usage over time)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "memory['l'] = np.nan\n",
    "memory.l[0:225] = 50\n",
    "memory.l[250:525] = 100\n",
    "memory.l[550:1000] = 200\n",
    "memory.l[1100:2300] = 500\n",
    "memory.l[2500:6500] = 1000\n",
    "memory.l[7000:20000] = 2000\n",
    "memory.l[20000:90000] = 5000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "memory_per_nodes = memory.groupby('l').max()\n",
    "memory_per_nodes.index = memory_per_nodes.index * k\n",
    "memory_per_nodes.index.names = ['#nodes']\n",
    "\n",
    "ax = memory_per_nodes.plot(marker='o', y='resident', logy=True, logx=True, legend=False, figsize=(4, 3))\n",
    "\n",
    "yticks = np.array([1e6, 1e7, 1e8])\n",
    "ax.set(xticks=nticks,\n",
    "       xticklabels=list(map(format_logtick, nticks)),\n",
    "       xlabel='#nodes',\n",
    "       yticks=yticks,\n",
    "       yticklabels=list(map(format_logtick, yticks * 1e-6)),\n",
    "       ylabel='Peak resident memory\\nusage (Gibibyte)')\n",
    "ax.set_xticklabels(ax.get_xticklabels(), rotation=30)\n",
    "\n",
    "ax.figure.savefig(basepath + '-memory.pdf', bbox_inches='tight')"
   ]
  }
 ],
 "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.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}