{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# More on views\n", "\n", "In this notebook, we compare `DirectView` with `LoadBalancedView`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Local setup\n", "\n", "Some modules required for plotting and data organization. Since they won't be used by the parallel task, we only need to import locally." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import operator\n", "import numpy as np\n", "import pandas as pd\n", "\n", "# plotting\n", "import matplotlib as mpl\n", "from matplotlib import pyplot as plt\n", "import seaborn as sns\n", "%matplotlib inline\n", "sns.set_style('white')\n", "sns.set_context('talk')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parallel setup" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.parallel import Client\n", "rc = Client()\n", "rc.ids" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Client.load_balanced_view()` return a new type of view that help balance the work load between engines." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dview = rc[:]\n", "lbview = rc.load_balanced_view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We here define a dummy task that sleeps for different amount of time. For this we need to import some built-in modules" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%px --local\n", "from time import sleep\n", "from datetime import datetime\n", "import os\n", "pid = os.getpid() # every engines will be different" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the engines' pid to track which task is executed by which process.\n", "\n", "Note that if you are working with load-balanced view only, then using `asyncresult.metadata` will be sufficient." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "engines_pid = dview.get('pid')\n", "pid_id_map = {pid: id for pid, id in zip(engines_pid, rc.ids)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task definition - target to troll directview.map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a deliberately setup task, which determines each task's work load by argument `i`. Light load takes 200ms while havy one takes a second. However we only that the first bunch of `i`s to be heavy load.\n", "\n", "In this case, when tasks are mapped acrossed engines, engine 0 will eat up all heavy tasks.\n", "\n", "When each task finishes, the pid, start/end time are returned." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "num_engines = len(rc.ids)\n", "total_works = num_engines * 12 + 2\n", "\n", "def high_variated_work(i):\n", " start_time = datetime.now()\n", " base_workload = 10\n", " if i < (total_works // num_engines):\n", " base_workload *= 5\n", " # so short task: 200ms long task: 1s\n", " sleep(base_workload * 20 / 1000)\n", " end_time = datetime.now()\n", " return pid, start_time, end_time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we test light/heavy task. The following line equals to `(end_t - start_t).total_seconds()`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.006497" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operator.sub(*high_variated_work(1)[:0:-1]).total_seconds()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.203177" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operator.sub(*high_variated_work(14)[:0:-1]).total_seconds()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run and measure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember to spread all needed variable to remote engines." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dview['num_engines'] = num_engines\n", "dview['total_works'] = total_works" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# lb: load balance, ar: async result\n", "lb_ar = lbview.map_async(high_variated_work, range(total_works))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 146/146 tasks finished after 3 s\n", "done\n" ] } ], "source": [ "lb_ar.wait_interactive()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# d: direct\n", "d_ar = dview.map_async(high_variated_work, range(total_works))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 12/12 tasks finished after 12 s\n", "done\n" ] } ], "source": [ "d_ar.wait_interactive()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Speedup for load-blanced and direct view (ideal: 12x): 11.23 and 3.23\n" ] } ], "source": [ "speedup = lambda ar: ar.serial_time / ar.wall_time\n", "print(\n", " 'Speedup for load-blanced and direct view (ideal: {:d}x): {:.2f} and {:.2f}'\n", " .format(num_engines, *map(speedup, [lb_ar, d_ar]))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Collect and analyze meta" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def parse_async_meta(async_result):\n", " \"\"\"Parse async result as pandas.DataFrame\"\"\"\n", " meta_df = pd.DataFrame(async_result.get(), columns=['engine_pid', 'started', 'completed'])\n", " meta_df['engine_id'] = meta_df['engine_pid'].map(pid_id_map)\n", " return meta_df" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def make_rel_time(meta_df):\n", " \"\"\"Convert exact timestamp relative to start time and sort.\"\"\"\n", " def compute_rel_time(col):\n", " \"\"\"Relative time elapse compared with start time in seconds\"\"\"\n", " return [(val - start_time).total_seconds() for val in col]\n", " \n", " ## Make all time data relative to the start time in seconds\n", " # create empty dataframe\n", " df_rel_sec = meta_df[['engine_id']].copy()\n", " rel_columns = ['rel_started', 'rel_completed']\n", " for col in rel_columns:\n", " df_rel_sec[col] = np.empty(len(df_rel_sec), np.float)\n", " \n", " # get the earliest start time\n", " start_time = meta_df.started.min()\n", " abs_time_data = meta_df[['started', 'completed']]\n", " rel_time_data = abs_time_data.apply(compute_rel_time, axis=0).values\n", " df_rel_sec.loc[:, rel_columns] = rel_time_data\n", " \n", " # sort by relative start time and given order, \n", " # grouped by different engines\n", " sorted_df = df_rel_sec.sort(['engine_id', 'rel_started', 'rel_completed'])\n", " sorted_df['order'] = np.empty(len(sorted_df), np.int)\n", " for grp_key, grp_df in sorted_df.groupby(['engine_id']):\n", " sorted_df.loc[grp_df.index, 'order'] = np.arange(len(grp_df))\n", " \n", " return sorted_df" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Functional style\n", "lb_ar_df, d_ar_df = map(make_rel_time, map(parse_async_meta, [lb_ar, d_ar]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def get_color_pal(max_jobs_per_engines):\n", " color_pal = sns.cubehelix_palette(\n", " n_colors=max_jobs_per_engines,\n", " start=2.3, rot=0.8, gamma=0.6, hue=0.8, \n", " light=0.9, dark=0.3, \n", " reverse=True\n", " )\n", " return color_pal\n", "\n", "\n", "def plot_meta_df(meta_df, figsize=None):\n", " # some boundaries required for plotting\n", " max_jobs_per_engines = meta_df['order'].max() + 1\n", " num_engines = len(np.unique(meta_df['engine_id']))\n", " color_pal = get_color_pal(max_jobs_per_engines)\n", " \n", " if figsize is not None:\n", " fig = plt.figure(figsize=figsize)\n", " else:\n", " fig = plt.figure(figsize=(max_jobs_per_engines * 6 * 2 / 12, 6))\n", " ax = plt.axes()\n", " bar_height = 0.8\n", " for ix, row in meta_df.iterrows():\n", " plt.bar(\n", " bottom=int(row.engine_id) , left=row.rel_started, \n", " width=row.rel_completed - row.rel_started, height=bar_height,\n", " color=color_pal[int(row['order'])], axes=ax\n", " )\n", " plt.xlabel('Time (second)')\n", " plt.ylabel('Engine')\n", " plt.yticks(\n", " np.arange(num_engines) + bar_height / 2, \n", " ['%2d' % ix for ix in np.arange(num_engines)]\n", " )\n", " return fig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`get_color_pal(num_palettes)` is a function to produce a series of color specs which can be used to tell how many task each engine consumes.\n", "\n", "At any time point, if engines' tasks has different color imply they are of different order." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAABGCAYAAADrXt2EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAvBJREFUeJzt3E9OU1EYxuGvt8XbllIkURNWwAqcmOByZOh63I4aJ6yA\ngWPSMPIfCCnWAZo0KJ0dzsfheUakZ/J2cE9/CYXBarUKAADIqKs9AAAA7iJWAQBIS6wCAJCWWAUA\nIC2xCgBAWqO7Dg4ODvqIeBkRpxFxfW+LAAB4bIYRsR8RxycnJ5frB3fGatyE6oeSqwAAYM1hRHxc\nf2FTrJ5GRLx+dRTTyW7JUdW8eDKpPaGo5/1W7QlF7Y0HtScUNZ+0/T+Qt7fbfX/9rPaCskaztp+9\nbqftu7Ob9bUnFNVN2/5sH052ak8oYrE4izdHbyP+9Oe6TbF6HRExnezG9nSv0LS65v127QlF7Y3b\nvnCfTdr+yvXThmMuImI2+1V7QjHjee0FZW3N2372unnbd2c3H9eeUFQ3a/uzfTRt/IL5z1dP275x\nAAB40MQqAABpiVUAANISqwAApCVWAQBIS6wCAJCWWAUAIC2xCgBAWmIVAIC0xCoAAGmJVQAA0hKr\nAACkJVYBAEhLrAIAkJZYBQAgLbEKAEBaYhUAgLTEKgAAaYlVAADSEqsAAKQlVgEASEusAgCQllgF\nACAtsQoAQFpiFQCAtMQqAABpiVUAANISqwAApCVWAQBIS6wCAJCWWAUAIC2xCgBAWmIVAIC0xCoA\nAGmJVQAA0hKrAACkJVYBAEhLrAIAkJZYBQAgLbEKAEBaYhUAgLTEKgAAaYlVAADSEqsAAKQlVgEA\nSEusAgCQllgFACAtsQoAQFpiFQCAtMQqAABpiVUAANISqwAApDXacDaMiDi/+HJPU+7f1+XP2hOK\n6pdbtSeUtRzUXlDU1XJVe0JRPxp+f/2y9oKyRldtP3vdZdt3Z3fR155QVPfte+0JRQ0n57UnFLFY\nnP39cXj7bFOs7kdEvP/0rsAkAAD4x35EfF5/YVOsHkfEYUScRsR1wVEAADxuw7gJ1ePbB4PVqt1f\nxQEA8LD5AysAANISqwAApCVWAQBIS6wCAJDWbyEhPRf1ogzXAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(get_color_pal(12))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plot_meta_df(lb_ar_df)\n", "plt.title('Load balanced IPython parallel job timetable')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fig.savefig(\"../../slides/pics/task_exe_history_load_balanced.svg\", dpi=\"150\", frameon=False, bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nvb29qdnTp08DsH79+mXJtXrM85VdSesHGBkZobu7O1dWkiRJTzQ1NcXu3bsByjHGI3mftyqOSGzb\nto2BgYFWlyFJkiQ9ZThHQpIkSVLTbCQkSZIkNW1VnNo0NjbGzMxMasY5Eiuj1vO1fudSSJIkLa9V\n0Uhce/VeujovTc0cmriD0uWDbOwZTM3dc+gA5d5++nsKmeu9a3yU8oZNFDYUU3Oj9+6n0tdHqS89\nB7B3bD+VzX0Mbcpe/y13j1Ie2MiW/uzsjXeOUi70US2kZ284MEqxtJlqMbvW6/fto1geYLhSysxe\nd+vtFCsFqkPl9DFvvo3SUIXhaiV7zBtuobRliOHhamru4MFxAHbt2pU5piRJkvJZFY1Eb0+BS7ov\nS83Mzk2xsWeQwb70nc4Ts0fp7ylQ3jycud5jJ2sUNhSpDqRnazM1Sn0FRgazxzxSrzG0aZAritnZ\nw9M1tvQPsr2SnT10rEa1UODKLenZ8aM1qsUiO0L2mOOTkwxXSuzYGrKzE5NUh8rs3L41PXffBMPV\nCjt3bMsc8+D4YYaHqzzzmVdmZiVJkrS8nCMhSZIkqWk2EpIkSZKaZiMhSZIkqWk2EpIkSZKa1paN\nRAjhT0II72p1HZIkSZLOrK0aiRDC5SGEa4BfB+ZbXI4kSZKks2irRgK4Ffg68DdAR4trkSRJknQW\n7dZIvCDG+MvAl1tdiCRJkqSza6tGIsZYb3UNkiRJkrK1VSMhSZIkaWWwkZAkSZLUtHZtJJxoLUmS\nJLWxdm0k5vHyr5IkSVLburjVBZxJjPHlra5BkiRJ0tm16xEJSZIkSW3MRkKSJElS02wkJEmSJDXN\nRkKSJElS02wkJEmSJDXNRkKSJElS09ry8q/NOjlb46HOB1Izpx6c4cTazsyx5k7VObb2onzrPVWn\nti773nn1+6fpXpfvthjH56bp6syXnZqts7YrX/boTJ2Lu3Lk6nXWdOXrL2vT03R05XuvJqeOw7rs\nza02dZw1nTkKBWpHp1jTmf07PXhwnF27NuQaU5IkSfl0zM+v3Pu+hRBKwMSePXvo7e1NzZ4+fRqA\n9evXL0uu1WOer+xqXf/IyAjd3d2ZOUmSpKeaqakpdu/eDVCOMR7J+7xVcURi27ZtDAwMtLoMSZIk\n6SnDORKSJEmSmmYjIUmSJKlpq+LUprGxMWZmZlpdxjlr5pz/dreaXgusvtcDq+81+Xram6+nvfl6\n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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plot_meta_df(d_ar_df)\n", "plt.title('Direct view IPython parallel job timetable')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fig.savefig(\"../../slides/pics/task_exe_history_direct.svg\", dpi=\"150\", frameon=False, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So it is apparent that we successfully *trolled* the direct view mapping mechanism. In real world this scenario is rare actually." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task definition - random work load\n", "\n", "Here we use decorator to specify function to be parallelized." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "@lbview.parallel(block=False)\n", "def lb_randomized_work(work_load):\n", " start_time = datetime.now()\n", " sleep(work_load * 100 / 1000)\n", " end_time = datetime.now()\n", " return pid, start_time, end_time\n", "\n", "@dview.parallel(block=False)\n", "def d_randomized_work(work_load):\n", " start_time = datetime.now()\n", " sleep(work_load * 100 / 1000)\n", " end_time = datetime.now()\n", " return pid, start_time, end_time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Techinal detail here, we simulate the work load using [Gamma distribution](http://en.wikipedia.org/wiki/Gamma_distribution). Its probability distribution spans only on positive numbers and has long tail on larger number. This means this task tend to have some long running tasks.\n", "\n", "We use `RandomState` to make sure every time we execute the random tasks are the same." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "rs = np.random.RandomState(seed=9527)\n", "rand_work_load = rs.gamma(shape=7.5, scale=0.5, size=num_engines * 15)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, axarr = plt.subplots(2, sharex=True)\n", "axarr[0].hist(rand_work_load, bins=16)\n", "axarr[1].hist(rs.gamma(shape=7.5, scale=0.5, size=1000), bins=16)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 180/180 tasks finished after 5 s\n", "done\n" ] } ], "source": [ "lb_ar = lb_randomized_work.map(rand_work_load)\n", "lb_ar.wait_interactive()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 12/12 tasks finished after 6 s\n", "done\n" ] } ], "source": [ "d_ar = d_randomized_work.map(rand_work_load)\n", "d_ar.wait_interactive()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lb_ar_df, d_ar_df = map(make_rel_time, map(parse_async_meta, [lb_ar, d_ar]))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrh5ev4aBM89g1Wj57wO1rlWjNbrjDFauq9ZxMvK79Rx7/OGvZ+3G9TzohMNfz9Fi+doaDz11HsvX\nrCk7SsuojY4y5fhy+mfWrBuFE47uP+7LVw1zStcAy1asmvS2a2tHeNDxx016u82wbNlKznlMb9kx\n2saUvXur+5/JiOgHVl933XVs27at7Dj3q7e3l1qtWv+JmahW2sZWyLJr1y4Apk6dWmqOVtdu+6kV\njj21vioeJ0fqvdpu7/nJUMXjpZnKPIY8fgtlHZPttv/nzp3LSSedVHaMljUyMsJTnvIUgFmZOXyw\nedvi66YTTzyROXPmlB3jkHR0dJQdoelaaRtbKYuOLh57OhQeJ5oIjxe1Go9JtRKvsZUkSZIkVZqF\nrSRJkiSp0triVOQlS5awcePGSW/X610Kk7Uf2u2ainZR9utSdvuHogoZNXFVfF3b7e9WFV6DKmRs\nhqN1uw/V0bx/2u1zqAxel3tgbVHYfvTDV9M1Y2hS2xzbNMKFL3kU3/3GHczo6JnUtlvJhrG1nH/h\nWfz06iV0dTR3VLffrFhE78O66J7u6HGtZHEuom96J73T+0ppf9Fdt9E/o5P+znLaPxQ/X3Ibs7o6\nmd3lsdtObv7NIvpnzmBgZjVe15Xrasx43Dzuvn0Jc7qrkfn+3LR4EX09nQz2tO72/OgXi+jrm8lg\nX+t+RjXDjQsX0td3GkOzjq7tPlQ//NlC+mb1MDi7v+wok2r5qmGWdg2wfazG0JzZZceppH0jUS9Y\nsKDkJK2nLQrbh57aReeMgVLantHRQ3dnNQauaqaujl76uwab2sboWI3u6b0MzJzcLzF0cCO/q9E7\nvY+h7nJel9rGGv2dvcztad3jYnh9jdldPZzR17oZNXGrRmsMzOzh4bOq87ruAOZ09zJ/oLmf15Nl\nxUiNwZ5e5g+27muwfG2Nwb4+zozWzdgMy9esYWhWH2eeHmVHaUnLV69hcHY/Z82bW3aUSbd+FwzN\nmc1Z808vO4rajNfYSpIkSZIqzcJWkiRJklRpFraSJEmSpEqzsJUkSZIkVVpLDB4VEW8E3gScAnwb\neHVm7iw3lSRJkiSpCkrvsY2IZ1IUtU8EeoBpwOVlZpIkSZIkVUfphS1wEfBfmbkiM7cBbwcuiogp\nJeeSJEmSJFVAKxS2AdzZ8HgZ8GDgtHLiSJIkSZKqpBUK25OBxutp9/1+UglZJEmSJEkV0wqF7U5g\n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\nSZIkSZX2f+i/fqoLq48YAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plot_meta_df(lb_ar_df)\n", "plt.title('Load balanced IPython parallel job timetable')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fig.savefig(\"../../slides/pics/task_random_load_balanced.svg\", dpi=\"150\", frameon=False, bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRvVm2D9B5dy+6bQWfVlWLfpeRWW2d+1VLCVJTcrCT5KUJp+ncjjip6jcADvtsnjYzNupXK3yF65y\nv0BJUhPxUE9JkiRJyrimnvGrXlr9K6hcSW3TNz6WJEmSpCZ1A9ANfDzG+M/rrdTUhR+Vou9K9weS\nJEmSpOvBvwL+br1fNnvhNwfwnve8h66urqSzSJIkSVJDzc/P84M/+INQrY3W0+yF3xcBurq66O3t\nTTqLJEmSJCXliqe+eQN3SZIkScq4Zp/xA+DYsWMsLi4mHSMRly5dAmDnzp3XRfvXW3+vlfmaVz6f\np1xuvnuAp/U5TWuu9TRb3vU0ez+aPf+1ymJ/692nkZEROjo66rJtqd4yUfj9l3f8Bd2dpaRjJGLq\n5MP03dRL566+RNo/PnWU/K4edufyDWnv0clxCrlu+nL9DWlvraMTRyjmuujvTKb9qzl8/AjFri6K\nXenMd+jYEYrdnQx0N2Z/aRYn5sp0f/0oZ48cY6inucbmvkfGKfR1MdyXrtz3Hh2nP9/NcH+6cq3n\n3sPj5Au7KRXT+drdqAOHDlMo9jE8WEg6yqbcc/Ah8gP9lIYGko7SEAfue5DCQJFSaTDpKDVz4MAD\nFIYGKZWGa77tiYlJAMbGxmq+bakRMlH4veDLuunqzM6b1rVYOjdL564+eruGEml/YWmG3bk8he7a\nv8FezpmlMn25fgZ7kin0Z86W6e/MU+pN5xcN0wtlil15bsmnM9/J+TID3b2MFtKZL0mXgKGePLcN\nNNfYTJ0uM9yX5/ahdOWemikz3J9nTyldudYzOV2mVOxnz0hIOsqWTJ6aZniwwN5bR5KOsimTJ05R\nGhpg7223JB2lISamTlIqDbJ3z2jSUWpmYvJxSqVh7rjj9qSjSKnjOX6SJEmSlHEWfpIkSZKUcRZ+\nkiRJkpRxFn6SJEmSlHGJFn4hhK8MIZxes+yFIYQTIYRbk8olSZIkSVmSyFU9QwgtwKuAdwKfW7X8\n64A/AJr7etaSJEmSlCJJzfj9EvBa4C1ACzxd9P058J9WlkmSJEmSti6pwu/OGOMdwNFVy/4RKMQY\n/yShTJIkSZKUSYkc6hljnL/MsotJZJEkSZKkrPOqnpIkSZKUcRZ+kiRJkpRxFn6SJEmSlHFpKPyW\nN7hMkiRJkrQJiVzcZUWM8X7g5sssv6HxaSRJkiQpm9Iw4ydJkiRJqiMLP0mSJEnKOAs/SZIkSco4\n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\nDxYa1mY93XPwIfID/ZSGBmq63QP3PUhhoEipNFjT7V62rQMPUBgapFQarntbzW5iYhKAsbGxhJNI\n2ZSJwi+3K8+NHTclHWNTls7N0rmrj96uocQyLCzNsDuXp9Dd/P8pnVkq05frZ7CnlHSUTZs5W6a/\nM0+pt3Z9mF4oU+zKc0s+neNycr7MQHcvo4V05tuKE3Nlhnry3DaQjr5NnS4z3Jfn9qHG5ZmaKTPc\nn2dPKR1j0CiT02VKxX72jITGtXlqmuHBAntvHWlYm/U0eeIUpaEB9t52S023OzF1klJpkL17Rmu6\n3cu2Nfk4pdIwd9xxe93bkqQr8Rw/SZIkSco4Cz9JkiRJyjgLP0mSJEnKOAs/SZIkScq4xC/uEkK4\nAfht4PuAHcAR4DUxxpOJBpMkSZKkjEjDjN+/Bb4NuAPYBUwBf5hoIkmSJEnKkDQUfk9QydEK3AA8\nBXwm0USSJEmSlCGJF34xxg8Ah4AZ4NPAdwKvSTSUJEmSJGVI4oVfCOH1wFcBw8CXAR8G3p9oKEmS\nJEnKkMQLP+AHgbfFGB+PMX4aeC3wlSGE0YRzSZIkSVImpKHw+yyVq3mueKr65wvJxJEkSZKkbEn8\ndg7A+4CfDyH8LTAHvBV4LMYYk40lSZIkSdmQhsJvP/A84H7gS4AHge9KMpAkSZIkZUnihV+McRl4\nS/WPJEmSJKnG0nCOnyRJkiSpjiz8JEmSJCnjLPwkSZIkKeMs/CRJkiQp4yz8JEmSJCnjLPwkSZIk\nKeMSv51DLZxdKvNk+4WkY2zKxScWWWhtSzTD+YsLnGnNxK7A0oV5Zlpbko6xJQsX5uhoXa7pNufO\nz7GjrbbbrKUz5+Zob3sq6Rh1Mbs0T2t70imeMbM4zw0NzlNemKelvblfl5sxMzdPS3tjv1+dPj1H\nS1s23s8ByrNnoG177bc7M8u27bXf7mXbmp5l2/YUvQmk2MTEJGNjNycdQ8qsluXl9H4YvJoQQgE4\nuX//fnK5XNJxNuXSpUsA7Ny587rOUCtZ6Es9+pD2cUl7vq1IW9+SyJO2MWgUx3rr6tWfRo5T1p6T\nehsZGaGjoyPpGFJTmZ2dZd++fQDFGOOp9dbLxNeCo6Oj9Pb2Jh1DkiRJklLJc/wkSZIkKeMs/CRJ\nkiQp4zJxqOexY8dYXFxMOkZDbeacgSycZ9DsfWj2/Emp5bhdr8/B9djvZuxzM2bejEb1M+nxTLr9\n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\n+4WkY1yTi08sstDaVpdtn7+4wJnW5J7apQvzzLS2JNZ+LSxcmKOj9fq4peTc+Tl2tF0ffd2MM+fm\naG97KrH2Z5fmaW1PrPlNmVmc54YmyywoL8zT0t7c793NbGZunpb29H8fP316jpa25v74WJ49A23b\nk45RU+WZWbZtb54+ladn2ba9sf9RTExMMjZ2fd81rmV5uXk/8IUQCsDJ/fv3k8vlko5zTS5dugTA\nzp07m2rbzdB+LWShDxt1PfV1M5Ien6Tb34xmzCyft6Q1y/g3S84ryUIf1mq2PiWVd2RkhI6Ojoa2\n2Qizs7Ps27cPoBhjPLXees39lU3V6Ogovb29SceQJEmSpFRK/zEFkiRJkqQtsfCTJEmSpIyz8JMk\nSZKkjMvEOX7Hjh1jcXEx6Rh11Wwn7a4njf1IY6bNqFU/sjIeW+U4rM+xqa8sjm+W+tSovqRxzNKY\naauy2KfNapaxyOoFWhohE4Xf3Xc+xI725yUdo66mTj5M3029dO7qSzrKlhyfOkp+Vw+7c/mkozzt\n0clxCrlu+nL9SUfZkqMTRyjmuujv3Fo/Dh8/QrGri2JXc4/HVh06doRidycD3enZV9Pi4GPjFHq6\nGOpxbOrhvkfGKfR1MdyXnfG99+g4/fluhvubv0/3Hh4nX9hNqVjf98gDhw5TKPYxPFioazvX4p6D\nD5Ef6Kc0NJB0lJo5cN+DFAaKlEqDSUdJ3IEDD1AYGqRUGk46yromJiYBGBsbSzhJc8pE4ZfblefG\njpuSjlFXS+dm6dzVR2/XUNJRtmRhaYbduTyF7vS8qZxZKtOX62ewp5R0lC2ZOVumvzNPqXdr/Zhe\nKFPsynNLvrnHY6tOzpcZ6O5ltHB9j8PlnJgrM9ST57YBx6Yepk6XGe7Lc/tQdsZ3aqbMcH+ePaXm\n79PkdJlSsZ89I6G+7ZyaZniwwN5bR+razrWYPHGK0tAAe2+7JekoNTMxdZJSaZC9e0aTjpK4icnH\nKZWGueOO25OOojrxHD9JkiRJyjgLP0mSJEnKOAs/SZIkScq4xM/xCyG0A78DfDfQBtwP/ESM8UyS\nuSRJkiQpK9Iw4/dGYAQoATngHPB7iSaSJEmSpAxJQ+H3q8C3xhgvAs8HvhQ4m2wkSZIkScqOxA/1\njDE+BXw2hPAmKkXgaeDFyaaSJEmSpOxIw4zfircBNwL/A/hwCCHxolSSJEmSsiA1hV+M8Z9jjJ8F\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plot_meta_df(d_ar_df)\n", "plt.title('Direct view IPython parallel job timetable')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fig.savefig(\"../../slides/pics/task_random_direct.svg\", dpi=\"150\", frameon=False, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "In random tasks, their difference gets smaller. Though in this case the load-balanced case works more efficiently." ] } ], "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }