Skip to content

Instantly share code, notes, and snippets.

@shoyer
Last active September 25, 2020 06:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shoyer/181ae78ec2f22df815e02ab0f5db3603 to your computer and use it in GitHub Desktop.
Save shoyer/181ae78ec2f22df815e02ab0f5db3603 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "lcKSlf50jI-y"
},
"outputs": [],
"source": [
"import dask.array\n",
"from dask.diagnostics import ResourceProfiler\n",
"from multiprocessing.pool import ThreadPool\n",
"import dask.config\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "o8UQc-b7hwa_",
"outputId": "65fd6034-978e-4f42-fd0b-44064e29dfbe"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.15 s, sys: 1.26 s, total: 4.4 s\n",
"Wall time: 1.46 s\n"
]
}
],
"source": [
"%%time\n",
"x = dask.array.zeros((12500, 10000), chunks=('10MB', -1))\n",
"dask.array.to_zarr(x, 'saved_x1.zarr', overwrite=True)\n",
"dask.array.to_zarr(x, 'saved_y1.zarr', overwrite=True)\n",
"dask.array.to_zarr(x, 'saved_x2.zarr', overwrite=True)\n",
"dask.array.to_zarr(x, 'saved_y2.zarr', overwrite=True)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<tr>\n",
"<td>\n",
"<table>\n",
" <thead>\n",
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr><th> Bytes </th><td> 1000.00 MB </td> <td> 10.00 MB </td></tr>\n",
" <tr><th> Shape </th><td> (12500, 10000) </td> <td> (125, 10000) </td></tr>\n",
" <tr><th> Count </th><td> 100 Tasks </td><td> 100 Chunks </td></tr>\n",
" <tr><th> Type </th><td> float64 </td><td> numpy.ndarray </td></tr>\n",
" </tbody>\n",
"</table>\n",
"</td>\n",
"<td>\n",
"<svg width=\"146\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"96\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"1\" x2=\"96\" y2=\"1\" />\n",
" <line x1=\"0\" y1=\"2\" x2=\"96\" y2=\"2\" />\n",
" <line x1=\"0\" y1=\"3\" x2=\"96\" y2=\"3\" />\n",
" <line x1=\"0\" y1=\"4\" x2=\"96\" y2=\"4\" />\n",
" <line x1=\"0\" y1=\"6\" x2=\"96\" y2=\"6\" />\n",
" <line x1=\"0\" y1=\"7\" x2=\"96\" y2=\"7\" />\n",
" <line x1=\"0\" y1=\"8\" x2=\"96\" y2=\"8\" />\n",
" <line x1=\"0\" y1=\"9\" x2=\"96\" y2=\"9\" />\n",
" <line x1=\"0\" y1=\"10\" x2=\"96\" y2=\"10\" />\n",
" <line x1=\"0\" y1=\"12\" x2=\"96\" y2=\"12\" />\n",
" <line x1=\"0\" y1=\"13\" x2=\"96\" y2=\"13\" />\n",
" <line x1=\"0\" y1=\"14\" x2=\"96\" y2=\"14\" />\n",
" <line x1=\"0\" y1=\"15\" x2=\"96\" y2=\"15\" />\n",
" <line x1=\"0\" y1=\"16\" x2=\"96\" y2=\"16\" />\n",
" <line x1=\"0\" y1=\"18\" x2=\"96\" y2=\"18\" />\n",
" <line x1=\"0\" y1=\"19\" x2=\"96\" y2=\"19\" />\n",
" <line x1=\"0\" y1=\"20\" x2=\"96\" y2=\"20\" />\n",
" <line x1=\"0\" y1=\"21\" x2=\"96\" y2=\"21\" />\n",
" <line x1=\"0\" y1=\"22\" x2=\"96\" y2=\"22\" />\n",
" <line x1=\"0\" y1=\"24\" x2=\"96\" y2=\"24\" />\n",
" <line x1=\"0\" y1=\"25\" x2=\"96\" y2=\"25\" />\n",
" <line x1=\"0\" y1=\"26\" x2=\"96\" y2=\"26\" />\n",
" <line x1=\"0\" y1=\"27\" x2=\"96\" y2=\"27\" />\n",
" <line x1=\"0\" y1=\"28\" x2=\"96\" y2=\"28\" />\n",
" <line x1=\"0\" y1=\"30\" x2=\"96\" y2=\"30\" />\n",
" <line x1=\"0\" y1=\"31\" x2=\"96\" y2=\"31\" />\n",
" <line x1=\"0\" y1=\"32\" x2=\"96\" y2=\"32\" />\n",
" <line x1=\"0\" y1=\"33\" x2=\"96\" y2=\"33\" />\n",
" <line x1=\"0\" y1=\"34\" x2=\"96\" y2=\"34\" />\n",
" <line x1=\"0\" y1=\"36\" x2=\"96\" y2=\"36\" />\n",
" <line x1=\"0\" y1=\"37\" x2=\"96\" y2=\"37\" />\n",
" <line x1=\"0\" y1=\"38\" x2=\"96\" y2=\"38\" />\n",
" <line x1=\"0\" y1=\"39\" x2=\"96\" y2=\"39\" />\n",
" <line x1=\"0\" y1=\"40\" x2=\"96\" y2=\"40\" />\n",
" <line x1=\"0\" y1=\"42\" x2=\"96\" y2=\"42\" />\n",
" <line x1=\"0\" y1=\"43\" x2=\"96\" y2=\"43\" />\n",
" <line x1=\"0\" y1=\"44\" x2=\"96\" y2=\"44\" />\n",
" <line x1=\"0\" y1=\"45\" x2=\"96\" y2=\"45\" />\n",
" <line x1=\"0\" y1=\"46\" x2=\"96\" y2=\"46\" />\n",
" <line x1=\"0\" y1=\"48\" x2=\"96\" y2=\"48\" />\n",
" <line x1=\"0\" y1=\"49\" x2=\"96\" y2=\"49\" />\n",
" <line x1=\"0\" y1=\"50\" x2=\"96\" y2=\"50\" />\n",
" <line x1=\"0\" y1=\"51\" x2=\"96\" y2=\"51\" />\n",
" <line x1=\"0\" y1=\"52\" x2=\"96\" y2=\"52\" />\n",
" <line x1=\"0\" y1=\"54\" x2=\"96\" y2=\"54\" />\n",
" <line x1=\"0\" y1=\"55\" x2=\"96\" y2=\"55\" />\n",
" <line x1=\"0\" y1=\"56\" x2=\"96\" y2=\"56\" />\n",
" <line x1=\"0\" y1=\"57\" x2=\"96\" y2=\"57\" />\n",
" <line x1=\"0\" y1=\"58\" x2=\"96\" y2=\"58\" />\n",
" <line x1=\"0\" y1=\"60\" x2=\"96\" y2=\"60\" />\n",
" <line x1=\"0\" y1=\"61\" x2=\"96\" y2=\"61\" />\n",
" <line x1=\"0\" y1=\"62\" x2=\"96\" y2=\"62\" />\n",
" <line x1=\"0\" y1=\"63\" x2=\"96\" y2=\"63\" />\n",
" <line x1=\"0\" y1=\"64\" x2=\"96\" y2=\"64\" />\n",
" <line x1=\"0\" y1=\"66\" x2=\"96\" y2=\"66\" />\n",
" <line x1=\"0\" y1=\"67\" x2=\"96\" y2=\"67\" />\n",
" <line x1=\"0\" y1=\"68\" x2=\"96\" y2=\"68\" />\n",
" <line x1=\"0\" y1=\"69\" x2=\"96\" y2=\"69\" />\n",
" <line x1=\"0\" y1=\"70\" x2=\"96\" y2=\"70\" />\n",
" <line x1=\"0\" y1=\"72\" x2=\"96\" y2=\"72\" />\n",
" <line x1=\"0\" y1=\"73\" x2=\"96\" y2=\"73\" />\n",
" <line x1=\"0\" y1=\"74\" x2=\"96\" y2=\"74\" />\n",
" <line x1=\"0\" y1=\"75\" x2=\"96\" y2=\"75\" />\n",
" <line x1=\"0\" y1=\"76\" x2=\"96\" y2=\"76\" />\n",
" <line x1=\"0\" y1=\"78\" x2=\"96\" y2=\"78\" />\n",
" <line x1=\"0\" y1=\"79\" x2=\"96\" y2=\"79\" />\n",
" <line x1=\"0\" y1=\"80\" x2=\"96\" y2=\"80\" />\n",
" <line x1=\"0\" y1=\"81\" x2=\"96\" y2=\"81\" />\n",
" <line x1=\"0\" y1=\"82\" x2=\"96\" y2=\"82\" />\n",
" <line x1=\"0\" y1=\"84\" x2=\"96\" y2=\"84\" />\n",
" <line x1=\"0\" y1=\"85\" x2=\"96\" y2=\"85\" />\n",
" <line x1=\"0\" y1=\"86\" x2=\"96\" y2=\"86\" />\n",
" <line x1=\"0\" y1=\"87\" x2=\"96\" y2=\"87\" />\n",
" <line x1=\"0\" y1=\"88\" x2=\"96\" y2=\"88\" />\n",
" <line x1=\"0\" y1=\"90\" x2=\"96\" y2=\"90\" />\n",
" <line x1=\"0\" y1=\"91\" x2=\"96\" y2=\"91\" />\n",
" <line x1=\"0\" y1=\"92\" x2=\"96\" y2=\"92\" />\n",
" <line x1=\"0\" y1=\"93\" x2=\"96\" y2=\"93\" />\n",
" <line x1=\"0\" y1=\"94\" x2=\"96\" y2=\"94\" />\n",
" <line x1=\"0\" y1=\"96\" x2=\"96\" y2=\"96\" />\n",
" <line x1=\"0\" y1=\"97\" x2=\"96\" y2=\"97\" />\n",
" <line x1=\"0\" y1=\"98\" x2=\"96\" y2=\"98\" />\n",
" <line x1=\"0\" y1=\"99\" x2=\"96\" y2=\"99\" />\n",
" <line x1=\"0\" y1=\"100\" x2=\"96\" y2=\"100\" />\n",
" <line x1=\"0\" y1=\"102\" x2=\"96\" y2=\"102\" />\n",
" <line x1=\"0\" y1=\"103\" x2=\"96\" y2=\"103\" />\n",
" <line x1=\"0\" y1=\"104\" x2=\"96\" y2=\"104\" />\n",
" <line x1=\"0\" y1=\"105\" x2=\"96\" y2=\"105\" />\n",
" <line x1=\"0\" y1=\"106\" x2=\"96\" y2=\"106\" />\n",
" <line x1=\"0\" y1=\"108\" x2=\"96\" y2=\"108\" />\n",
" <line x1=\"0\" y1=\"109\" x2=\"96\" y2=\"109\" />\n",
" <line x1=\"0\" y1=\"110\" x2=\"96\" y2=\"110\" />\n",
" <line x1=\"0\" y1=\"111\" x2=\"96\" y2=\"111\" />\n",
" <line x1=\"0\" y1=\"112\" x2=\"96\" y2=\"112\" />\n",
" <line x1=\"0\" y1=\"114\" x2=\"96\" y2=\"114\" />\n",
" <line x1=\"0\" y1=\"115\" x2=\"96\" y2=\"115\" />\n",
" <line x1=\"0\" y1=\"116\" x2=\"96\" y2=\"116\" />\n",
" <line x1=\"0\" y1=\"117\" x2=\"96\" y2=\"117\" />\n",
" <line x1=\"0\" y1=\"118\" x2=\"96\" y2=\"118\" />\n",
" <line x1=\"0\" y1=\"120\" x2=\"96\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
" <line x1=\"96\" y1=\"0\" x2=\"96\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.000000,0.000000 96.000000,0.000000 96.000000,120.000000 0.000000,120.000000\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"48.000000\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10000</text>\n",
" <text x=\"116.000000\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,116.000000,60.000000)\">12500</text>\n",
"</svg>\n",
"</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"dask.array<zeros, shape=(12500, 10000), dtype=float64, chunksize=(125, 10000), chunktype=numpy.ndarray>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "LpU4lT0Bi0EZ"
},
"outputs": [],
"source": [
"x1 = dask.array.from_zarr('saved_x1.zarr')\n",
"y1 = dask.array.from_zarr('saved_x2.zarr')\n",
"x2 = dask.array.from_zarr('saved_y1.zarr')\n",
"y2 = dask.array.from_zarr('saved_y2.zarr')\n",
"\n",
"def evaluate(x1, y1, x2, y2):\n",
" u = dask.array.stack([x1, y1])\n",
" v = dask.array.stack([x2, y2])\n",
" components = [u, v, u ** 2 + v ** 2]\n",
" return [\n",
" abs(c[0] - c[1]).mean(axis=-1)\n",
" for c in components\n",
" ]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wh9mgSbki6Hp",
"outputId": "ea6a0584-7d96-4ede-d6c3-8335a0a59734"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 25.8 ms, sys: 4.81 ms, total: 30.6 ms\n",
"Wall time: 30.7 ms\n",
"CPU times: user 5 s, sys: 1.76 s, total: 6.76 s\n",
"Wall time: 6.7 s\n"
]
}
],
"source": [
"rprof = ResourceProfiler(dt=0.1)\n",
"\n",
"with dask.config.set(pool=ThreadPool(1)):\n",
" with rprof:\n",
" %time results = evaluate(x1, y1, x2, y2)\n",
" %time dask.compute(results)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[dask.array<mean_agg-aggregate, shape=(12500,), dtype=float64, chunksize=(125,), chunktype=numpy.ndarray>,\n",
" dask.array<mean_agg-aggregate, shape=(12500,), dtype=float64, chunksize=(125,), chunktype=numpy.ndarray>,\n",
" dask.array<mean_agg-aggregate, shape=(12500,), dtype=float64, chunksize=(125,), chunktype=numpy.ndarray>]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 286
},
"id": "mNS_PuXji7fa",
"outputId": "80270000-0d95-4426-e953-75490186cd59"
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Time (seconds)')"
]
},
"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": [
"plt.plot(0.1 * np.arange(len(rprof.results)), [r.mem for r in rprof.results])\n",
"plt.ylabel('Memory usage (MB)')\n",
"plt.xlabel('Time (seconds)')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "zarr dask bug memory.ipynb",
"provenance": []
},
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment