Last active
March 18, 2020 05:34
-
-
Save epassaro/6cdcda304b10198baeb022e25e8666ea to your computer and use it in GitHub Desktop.
This file contains hidden or 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": [ | |
"# Enable the Dask framework for parallel execution for TARDIS\n", | |
"\n", | |
"\n", | |
"**Your first objective if you choose to accept the mission:** Use `dask` to run distributed TARDIS instances in parallel on your system. Use http://distributed.dask.org/en/latest/client.html as a guide to make a simple example." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/epassaro/miniconda3/envs/tardis/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", | |
" return f(*args, **kwds)\n", | |
"/home/epassaro/Desktop/tardis-sn/tardis/tardis/io/util.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", | |
" from tqdm.autonotebook import tqdm\n" | |
] | |
} | |
], | |
"source": [ | |
"# Install Dask in the TARDIS environment with:\n", | |
"# `conda install dask -c conda-forge --no-update-deps`\n", | |
"\n", | |
"from tardis import run_tardis\n", | |
"from dask.distributed import Client, LocalCluster\n", | |
"import matplotlib.pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# This is the most explicit way to start a local cluster\n", | |
"\n", | |
"cluster = LocalCluster()\n", | |
"client = Client(cluster)\n", | |
"\n", | |
"# and it's equivalent to: `client = Cluster()`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"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 style=\"text-align: left;\">Client</h3>\n", | |
"<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n", | |
" <li><b>Scheduler: </b>tcp://127.0.0.1:40361</li>\n", | |
" <li><b>Dashboard: </b><a href='http://127.0.0.1:8787/status' target='_blank'>http://127.0.0.1:8787/status</a>\n", | |
"</ul>\n", | |
"</td>\n", | |
"<td style=\"vertical-align: top; border: 0px solid white\">\n", | |
"<h3 style=\"text-align: left;\">Cluster</h3>\n", | |
"<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n", | |
" <li><b>Workers: </b>4</li>\n", | |
" <li><b>Cores: </b>4</li>\n", | |
" <li><b>Memory: </b>12.46 GB</li>\n", | |
"</ul>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<Client: 'tcp://127.0.0.1:40361' processes=4 threads=4, memory=12.46 GB>" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Quick check\n", | |
"\n", | |
"client" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Made two tardis configuration files with line interaction set to 'downbranch' and 'macroatom' respectively\n", | |
"\n", | |
"filenames = ['tardis_example1.yml', \n", | |
" 'tardis_example2.yml']" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Define a simple function to run in parallel\n", | |
"\n", | |
"def get_spectrum(fname):\n", | |
" sim = run_tardis(fname)\n", | |
"\n", | |
" spectrum = sim.runner.spectrum\n", | |
" spectrum_integrated = sim.runner.spectrum_integrated\n", | |
"\n", | |
" wavelength = spectrum.wavelength\n", | |
" flux = spectrum_integrated.luminosity_density_lambda\n", | |
" \n", | |
" return wavelength, flux" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Computation starts here\n", | |
"# Look for the dashboard at: http://127.0.0.1:8787/status\n", | |
"\n", | |
"futures = client.map(get_spectrum, filenames)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"results = client.gather(iter(futures))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"wavelength1, flux1 = next(results)\n", | |
"wavelength2, flux2 = next(results)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.legend.Legend at 0x7ff2d415a978>" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAdoAAAFwCAYAAAAfY7onAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde5ycZX3//9d133PaYzbZzZGcQyAkJOEUDiEcREUUBQGpolWpX1BKPfZXrbUUAb9qbf22Vq1aKgoeqIKnCiK1KJggaCCcCcdAyPmc7GYPszsz9/X7475n5p7dmezsZmZ3s/N+Ph50Zu+5Z/aa1frmcx2NtRYRERGpDme0GyAiIjKeKWhFRESqSEErIiJSRQpaERGRKlLQioiIVJGCVkREpIqqFrTGmO8YY3YZY54p495rjDFPG2OeMMY8aIxZHHrtS8aYZ4J/3lmt9oqIiFSDqdY6WmPM2UAn8D1r7fGD3Ntsre0Inl8EXGutvcAYcyHwceDNQBz4PXBe9l4REZGxrmoVrbV2NbAvfM0Ys8AYc68xZp0xZo0xZlFwbzg4G4Bs+i8Gfm+tTVtru4AngQuq1WYREZFKG+kx2puBj1hrTwb+BvhG9gVjzF8ZYzYA/wR8NLj8JPBmY0y9MaYNeB0wa4TbLCIiMmyRkfpFxphGYCVwpzEmezmefWKt/Xfg340x7wauA95vrf2NMWYF8BCwG3gYSI9Um0VERA5X1cZoAYwxc4G7rbXHG2OagRestdMHeY8D7LfWTijy2u3AD6y191SjvSIiIpU2Yl3HwTjsq8aYywGMb3nwfGHo1guBl4LrrjGmNXi+DFgG/Gak2iwiInK4qtZ1bIz5L+BcoM0YswX4LPAe4JvGmOuAKPAj/HHYDxtj3gCkgP3A+4OPiQJrgq7mDuDPrbXqOhYRkSNGVbuORUREap12hhIREakiBa2IiEgVVWWMtq2tzc6dO7caHy0iIjLmrFu3bo+1dnKx16oStHPnzuXRRx+txkeLiIiMOcaY10q9pq5jERGRKlLQioiIVJGCVkREpIpGbK9jERE5PKlUii1btpBMJke7KTUrkUgwc+ZMotFo2e9R0IqIHCG2bNlCU1MTc+fOJXQ4i4wQay179+5ly5YtzJs3r+z3qetYROQIkUwmaW1tVciOEmMMra2tQ+5RUNCKiBxBFLKjazh/fwWtiIgM2w033MCXv/zlin/uAw88wFvf+taKf+6hzJ07lz179lT8cxW0IiJyxMpkMqPdhEEpaEVEZEg+//nPc+yxx/KGN7yBF154AYAnnniC008/nWXLlnHJJZewf/9+du3axcknnwzAk08+iTGGTZs2AbBgwQK6u7u58sor+ehHP8rKlSuZP38+P/nJT3K/p6Ojg0suuYTFixdzzTXX4HkeAI2NjVx//fWcdtppPPzww9x0002sWLGC448/ng9+8INkT6U799xz+du//VtOPfVUjjnmGNasWQP44fw3f/M3LF26lGXLlvG1r30t9zu/9rWvcdJJJ7F06VKef/75ivy9NOtYROQIdONdz7J+W0dFP3PxjGY++7Ylh7xn3bp1/OhHP+Lxxx8nnU5z0kkncfLJJ/O+972Pr33ta5xzzjlcf/313HjjjXzlK18hmUzS0dHBmjVrOOWUU1izZg2rVq1iypQp1NfXA7B9+3YefPBBnn/+eS666CLe8Y53ALB27VrWr1/PnDlzuOCCC/jZz37GO97xDrq6ujj++OO56aab/HYvXsz1118PwHvf+17uvvtu3va2twGQTqdZu3Yt99xzDzfeeCP33XcfN998M6+++iqPP/44kUiEffv25b5fW1sbjz32GN/4xjf48pe/zLe//e3D/ruqoq2U7n3QvnW0WyEiUlVr1qzhkksuob6+nubmZi666CK6uro4cOAA55xzDgDvf//7Wb16NQArV67kD3/4A6tXr+Yzn/kMq1evZs2aNZx11lm5z3z729+O4zgsXryYnTt35q6feuqpzJ8/H9d1ueKKK3jwwQcBcF2Xyy67LHff/fffz2mnncbSpUv53e9+x7PPPpt77dJLLwXg5JNPZuPGjQDcd999XHPNNUQifq05adKkQ95/uFTRVsq/Hg+ZXrh+72i3RERqwGCVZzUNZebtWWedxZo1a3jttde4+OKL+dKXvoQxpmCiUzwezz3PdvsW+z3ZnxOJBK7rAv6Sp2uvvZZHH32UWbNmccMNNxQsv8l+tuu6pNPp3O8o9R2K3X+4VNFWSqoLvMr8hyIiMladffbZ/PznP6enp4eDBw9y11130dDQwMSJE3NjoN///vdz1e3ZZ5/ND37wAxYuXIjjOEyaNIl77rmHM888c9DftXbtWl599VU8z+PHP/4xq1atGnBPNlTb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\n", | |
"text/plain": [ | |
"<Figure size 576x432 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.figure(figsize=(8,6))\n", | |
"plt.plot(wavelength1, flux1, label='downbranch')\n", | |
"plt.plot(wavelength2, flux2, label='macroatom')\n", | |
"plt.legend()" | |
] | |
} | |
], | |
"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.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment