Last active
July 19, 2019 12:37
-
-
Save willirath/2170e47fdb711b5f74a10a3f3134bb06 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Manage a long-running model simulation with Dask.distributed actors\n", | |
"\n", | |
"During an [E-CAM](https://www.e-cam2020.eu) workshop, we discussed how to best use [Dask.distributed](https://distributed.dask.org) to run dynamical model simulations (like the movement of a set of particles) and analyses (like statistics across all the particle positions at a given time) concurrently. As simulations often need a lot of internal information that is expensive to tear down / set up repeatedly, we want to spawn analyses of the state of the simulation without interrupting it.\n", | |
"\n", | |
"There's [Actors](https://en.wikipedia.org/wiki/Actor_model) which are relatively new [in Dask.distributed](https://distributed.dask.org/en/latest/actors.html). Actors are meant to manage state that lives on workers." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## The dynamical model: A normally distributed random walk\n", | |
"\n", | |
"As a mock-up dynamical simulation, we chose $N$ particles at positions $(x_n, y_n)$ for $n=0,…,N-1$ which are moved by normally distributed random steps without interacting with each other. As a simple analysis, we calculate the center of mass of all the $N$ particles." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"\n", | |
"class Particles:\n", | |
" def __init__(self, N=100_000, seed=0):\n", | |
" \"\"\"Seed RNG and initialize positions.\"\"\"\n", | |
" np.random.seed(seed)\n", | |
" self.xy = np.random.normal(size=(N, 2))\n", | |
" \n", | |
" def move(self, steps=1):\n", | |
" \"\"\"Move particles.\"\"\"\n", | |
" for step in range(steps):\n", | |
" self.xy += np.random.normal(size=self.xy.shape)\n", | |
" \n", | |
" def calc_center_of_mass(self):\n", | |
" \"\"\"Find position of center of mass.\"\"\"\n", | |
" return self.xy.mean(axis=0)\n", | |
" \n", | |
" def calc_number_particles(self):\n", | |
" \"\"\"Get number of particles.\"\"\"\n", | |
" return self.xy.shape[0]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Run and plot position of center of mass\n", | |
"\n", | |
"We initialize the experiment and in alternating order, move particles and diagnose the center of mass. Then, we plot the center of mass every two movements." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%matplotlib inline\n", | |
"from matplotlib import pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"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": [ | |
"particles = Particles()\n", | |
"\n", | |
"center_of_mass = []\n", | |
"for n in range(100):\n", | |
" center_of_mass.append(particles.calc_center_of_mass())\n", | |
" particles.move(2)\n", | |
" \n", | |
"center_of_mass = np.stack(center_of_mass)\n", | |
"\n", | |
"plt.plot(*tuple(center_of_mass.T), 'o-', alpha=0.5);\n", | |
"plt.xlabel(\"x\")\n", | |
"plt.ylabel(\"y\")\n", | |
"plt.title(f\"center of mass for {particles.calc_number_particles()} particles every 2 steps\");" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Run with Actor\n", | |
"\n", | |
"We spin up a Dask cluster and submit the experiment with an actor that can be used to change and inspect the state of the experiment living on a worker. Then, we use the Actor to do the same as above: Move particles and get the center of mass. In the end, we plot, getting the same figure as above." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table style=\"border: 2px solid white;\">\n", | |
"<tr>\n", | |
"<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
"<h3>Client</h3>\n", | |
"<ul>\n", | |
" <li><b>Scheduler: </b>tcp://127.0.0.1:38821\n", | |
" <li><b>Dashboard: </b><a href='/user/dask-dask-examples-8w3ohx51/proxy/8787/status' target='_blank'>/user/dask-dask-examples-8w3ohx51/proxy/8787/status</a>\n", | |
"</ul>\n", | |
"</td>\n", | |
"<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
"<h3>Cluster</h3>\n", | |
"<ul>\n", | |
" <li><b>Workers: </b>1</li>\n", | |
" <li><b>Cores: </b>1</li>\n", | |
" <li><b>Memory: </b>400.00 MB</li>\n", | |
"</ul>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<Client: scheduler='tcp://127.0.0.1:38821' processes=1 cores=1>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"from dask.distributed import Client, Actor\n", | |
"\n", | |
"client = Client(n_workers=1, threads_per_worker=1, memory_limit=400e6)\n", | |
"client" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"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": [ | |
"particles = client.submit(Particles, actor=True, pure=False).result()\n", | |
"\n", | |
"center_of_mass_on_worker = []\n", | |
"\n", | |
"for n in range(100):\n", | |
" center_of_mass_on_worker.append(\n", | |
" particles.calc_center_of_mass().result()\n", | |
" )\n", | |
" particles.move(2).result() # .result() is important!\n", | |
" \n", | |
"center_of_mass_on_worker = np.stack(center_of_mass_on_worker)\n", | |
"\n", | |
"plt.plot(*tuple(center_of_mass_on_worker.T), 'o-', alpha=0.5);\n", | |
"plt.xlabel(\"x\")\n", | |
"plt.ylabel(\"y\")\n", | |
"plt.title((\n", | |
" f\"center of mass for {particles.calc_number_particles().result()} \"\n", | |
" \"particles every 2 steps\"\n", | |
"));" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Beware of race conditions!\n", | |
"\n", | |
"Above, we made sure to call `particles.move(2).result()` instead of just `particles.move(2)`. While the latter works (the particles will be moved by two steps but the result is never gathered), it would not certain that the next analysis (`.calc_center_of_mass()`) will be done after and not before the move.\n", | |
"\n", | |
"To show that this can actually happen, we generate a counter that is incremented without waiting for the result before querying its state:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Counter:\n", | |
" def __init__(self):\n", | |
" self.n = 0\n", | |
" \n", | |
" def get_n(self):\n", | |
" return self.n\n", | |
" \n", | |
" def increment(self):\n", | |
" self.n += 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Are all steps equal to 1? — False\n" | |
] | |
} | |
], | |
"source": [ | |
"counter = client.submit(Counter, actor=True, pure=False).result()\n", | |
"\n", | |
"numbers = []\n", | |
"for n in range(500):\n", | |
" numbers.append(counter.get_n().result())\n", | |
" counter.increment()\n", | |
"numbers = np.asarray(numbers)\n", | |
"\n", | |
"print(\"Are all steps equal to 1? —\", np.all(np.diff(numbers) == 1))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we make sure to block until the incrementation is done, everyhing is fine:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Are all steps equal to 1? — True\n" | |
] | |
} | |
], | |
"source": [ | |
"counter = client.submit(Counter, actor=True, pure=False).result()\n", | |
"\n", | |
"numbers = []\n", | |
"counter = client.submit(Counter, actor=True, pure=False).result()\n", | |
"for n in range(500):\n", | |
" numbers.append(counter.get_n().result())\n", | |
" counter.increment().result()\n", | |
"numbers = np.asarray(numbers)\n", | |
"\n", | |
"print(\"Are all steps equal to 1? —\", np.all(np.diff(numbers) == 1))" | |
] | |
} | |
], | |
"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.7.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Thanks a lot! I didn't notice this. Probably just hit paste twice and then went somewhere else before the renderer could tell me that this wasn't valid. :)
Re using actors elsewhere: I'm quite excited about them right now. Opens cool new (for me at least...) ways of playing with concurrency. Over here, I tried separating particles from the spatial domain + data and the RNG needed to move the particles, have the spatial domain + data living on a worker, the random state on another, and the particles on the front end.
This https://github.com/benbovy/dask-pregel also looks interesting.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@willirath, it looks like you .ipynb is not valid json. AFAICT, it is the concatenation of two identical json files. Look at https://gist.github.com/lesteve/7d5bae082457153573861dd45dfc7d9d for the fixed json and feel free (of course) to copy it and update your gist accordingly.
If you end up doing something interesting with actors, I'd be interested to know more about it by the way.