Skip to content

Instantly share code, notes, and snippets.

@apatlpo
Created June 4, 2021 11:12
Show Gist options
  • Save apatlpo/2194e1fe0187c431678db28eae8211d4 to your computer and use it in GitHub Desktop.
Save apatlpo/2194e1fe0187c431678db28eae8211d4 to your computer and use it in GitHub Desktop.
custom distribution
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "19af7ee5-5285-44ee-8592-c3214ec39a28",
"metadata": {},
"source": [
"# demo custom_distribute\n",
"\n",
"The goal is ease the sequential processing of a potentially large dataset.\n",
"dask should be able to do this on its own in principle but this turns out not to be so straightfoward in some circumstances, see: https://github.com/dask/distributed/issues/2602\n",
"\n",
"The strategy considered may or may not, depending on the user choice via `tmp_dir` argument, involve writing temporary files to disk.\n",
"The former alternative allows restarting the calculation.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3221e159-b5f2-4ea8-9efb-3a2177ed8cea",
"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:43958</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></li>\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>8</li>\n",
" <li><b>Cores: </b>56</li>\n",
" <li><b>Memory: </b>100.00 GiB</li>\n",
"</ul>\n",
"</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<Client: 'tcp://127.0.0.1:43958' processes=8 threads=56, memory=100.00 GiB>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import os\n",
"import xarray as xr\n",
"import numpy as np\n",
"\n",
"from dask.distributed import Client, LocalCluster, wait\n",
"#\n",
"cluster = LocalCluster()\n",
"client = Client(cluster)\n",
"client"
]
},
{
"cell_type": "markdown",
"id": "d9fcfa49-ed09-4815-b601-58d0e50646d9",
"metadata": {},
"source": [
"### create synthetic dataset"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c98809b3-3203-47b2-827a-7966ede08bf0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2 {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (t: 512, x: 128, y: 256)\n",
"Coordinates:\n",
" * x (x) int64 0 1 2 3 4 5 6 7 8 ... 119 120 121 122 123 124 125 126 127\n",
" * y (y) int64 0 1 2 3 4 5 6 7 8 ... 247 248 249 250 251 252 253 254 255\n",
" * t (t) int64 0 1 2 3 4 5 6 7 8 ... 503 504 505 506 507 508 509 510 511\n",
"Data variables:\n",
" v (t, x, y) int64 dask.array&lt;chunksize=(512, 64, 64), meta=np.ndarray&gt;</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-fee7f590-0757-402f-b6fc-a2cb37cc1225' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-fee7f590-0757-402f-b6fc-a2cb37cc1225' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>t</span>: 512</li><li><span class='xr-has-index'>x</span>: 128</li><li><span class='xr-has-index'>y</span>: 256</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-53ccd37c-59bb-4453-bbb9-2db3c3b0ca51' class='xr-section-summary-in' type='checkbox' checked><label for='section-53ccd37c-59bb-4453-bbb9-2db3c3b0ca51' class='xr-section-summary' >Coordinates: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 ... 123 124 125 126 127</div><input id='attrs-b5b0ed8c-02b5-4c85-9f1c-9ad46d001b55' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b5b0ed8c-02b5-4c85-9f1c-9ad46d001b55' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-32ecdbe3-c900-499f-9dee-45dccfc92d12' class='xr-var-data-in' type='checkbox'><label for='data-32ecdbe3-c900-499f-9dee-45dccfc92d12' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,\n",
" 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,\n",
" 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,\n",
" 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,\n",
" 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,\n",
" 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,\n",
" 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,\n",
" 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,\n",
" 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,\n",
" 126, 127])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 ... 251 252 253 254 255</div><input id='attrs-05ee6da9-0848-470a-884c-02b21d1a5c7f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-05ee6da9-0848-470a-884c-02b21d1a5c7f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-03636837-e32d-4056-8e5d-2ae341ffa2f5' class='xr-var-data-in' type='checkbox'><label for='data-03636837-e32d-4056-8e5d-2ae341ffa2f5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, ..., 253, 254, 255])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t</span></div><div class='xr-var-dims'>(t)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 ... 507 508 509 510 511</div><input id='attrs-e3e9a542-4fa4-414c-83c4-9cdeb33b75aa' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e3e9a542-4fa4-414c-83c4-9cdeb33b75aa' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-89b9c78b-c09b-46f3-aec0-cb1ce2ee99a0' class='xr-var-data-in' type='checkbox'><label for='data-89b9c78b-c09b-46f3-aec0-cb1ce2ee99a0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, ..., 509, 510, 511])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-a41e0ae9-9d8c-46f7-9ed9-6f8975f94017' class='xr-section-summary-in' type='checkbox' checked><label for='section-a41e0ae9-9d8c-46f7-9ed9-6f8975f94017' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>v</span></div><div class='xr-var-dims'>(t, x, y)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(512, 64, 64), meta=np.ndarray&gt;</div><input id='attrs-b8762db9-0750-4593-bac8-30217847576a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b8762db9-0750-4593-bac8-30217847576a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2549c2ed-d30a-41bc-97f4-bf5854498158' class='xr-var-data-in' type='checkbox'><label for='data-2549c2ed-d30a-41bc-97f4-bf5854498158' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><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> 128.00 MiB </td> <td> 16.00 MiB </td></tr>\n",
" <tr><th> Shape </th><td> (512, 128, 256) </td> <td> (512, 64, 64) </td></tr>\n",
" <tr><th> Count </th><td> 8 Tasks </td><td> 8 Chunks </td></tr>\n",
" <tr><th> Type </th><td> int64 </td><td> numpy.ndarray </td></tr>\n",
" </tbody>\n",
"</table>\n",
"</td>\n",
"<td>\n",
"<svg width=\"190\" height=\"163\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"21\" x2=\"80\" y2=\"92\" />\n",
" <line x1=\"10\" y1=\"42\" x2=\"80\" y2=\"113\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"42\" style=\"stroke-width:2\" />\n",
" <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"113\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,113.48703081597968 10.0,42.89879552186203\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"70\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"80\" y1=\"70\" x2=\"140\" y2=\"70\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
" <line x1=\"25\" y1=\"0\" x2=\"95\" y2=\"70\" />\n",
" <line x1=\"40\" y1=\"0\" x2=\"110\" y2=\"70\" />\n",
" <line x1=\"55\" y1=\"0\" x2=\"125\" y2=\"70\" />\n",
" <line x1=\"70\" y1=\"0\" x2=\"140\" y2=\"70\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 70.0,0.0 140.58823529411765,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"80\" y1=\"70\" x2=\"140\" y2=\"70\" style=\"stroke-width:2\" />\n",
" <line x1=\"80\" y1=\"92\" x2=\"140\" y2=\"92\" />\n",
" <line x1=\"80\" y1=\"113\" x2=\"140\" y2=\"113\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"113\" style=\"stroke-width:2\" />\n",
" <line x1=\"95\" y1=\"70\" x2=\"95\" y2=\"113\" />\n",
" <line x1=\"110\" y1=\"70\" x2=\"110\" y2=\"113\" />\n",
" <line x1=\"125\" y1=\"70\" x2=\"125\" y2=\"113\" />\n",
" <line x1=\"140\" y1=\"70\" x2=\"140\" y2=\"113\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"80.58823529411765,70.58823529411765 140.58823529411765,70.58823529411765 140.58823529411765,113.48703081597968 80.58823529411765,113.48703081597968\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"110.588235\" y=\"133.487031\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >256</text>\n",
" <text x=\"160.588235\" y=\"92.037633\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,160.588235,92.037633)\">128</text>\n",
" <text x=\"35.294118\" y=\"98.192913\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,98.192913)\">512</text>\n",
"</svg>\n",
"</td>\n",
"</tr>\n",
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-4b7ad9fc-661e-4d9c-8b45-a5cd165b4ede' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-4b7ad9fc-661e-4d9c-8b45-a5cd165b4ede' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (t: 512, x: 128, y: 256)\n",
"Coordinates:\n",
" * x (x) int64 0 1 2 3 4 5 6 7 8 ... 119 120 121 122 123 124 125 126 127\n",
" * y (y) int64 0 1 2 3 4 5 6 7 8 ... 247 248 249 250 251 252 253 254 255\n",
" * t (t) int64 0 1 2 3 4 5 6 7 8 ... 503 504 505 506 507 508 509 510 511\n",
"Data variables:\n",
" v (t, x, y) int64 dask.array<chunksize=(512, 64, 64), meta=np.ndarray>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nx, ny, nt = 128, 256, 512\n",
"ds = xr.Dataset({}, coords={'x':np.arange(nx),'y':np.arange(ny), 't': np.arange(nt)})\n",
"ds['v'] = ds.t + ds.x*ds.y\n",
"ds = ds.chunk({'x': nx/2, 'y': ny/4})\n",
"ds"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "33b995fe-22c3-4001-8bcc-a624317b85ff",
"metadata": {},
"outputs": [],
"source": [
"def custom_distribute(ds, op, \n",
" tmp_dir=None, \n",
" suffix=\"tmp\", \n",
" restart=False,\n",
" _root=True,\n",
" **kwargs,\n",
" ):\n",
" \"\"\" Distribute an embarrasingly parallel calculation manually and store chunks to disk\n",
" Data can be written temporarily to disk with a restart capability or directly persisted\n",
" in memory.\n",
" \n",
" Example usages:\n",
" ds_out = custom_distribute(ds, lambda ds: ds.mean(\"time\"), dim_0=2)\n",
" ds_out = custom_distribute(ds, lambda ds: ds.mean(\"time\"), dim_0=2, tmp_dir=\"/path/to/tmp/\")\n",
"\n",
" Parameters\n",
" ----------\n",
" ds: xr.Dataset\n",
" Input data\n",
" op: func\n",
" Process the data and return a dataset\n",
" tmp_dir: str, optional\n",
" temporary output directory, persist data in memory\n",
" suffix: str\n",
" suffix employed for temporary files\n",
" **kwargs:\n",
" dimensions with chunk size, e.g. (..., dim_0=2) processes data sequentially in chunks\n",
" of size 2 along dimension dim_0\n",
" \"\"\"\n",
" \n",
" if restart:\n",
" assert tmp_dir is not None, \"you need to provide tmp_dir if `restart=True`\"\n",
" \n",
" d = list(kwargs.keys())[0]\n",
" c = kwargs[d]\n",
"\n",
" new_kwargs = dict(kwargs)\n",
" del new_kwargs[d]\n",
"\n",
" dim = ds[d].values\n",
" chunks = [dim[i*c:(i+1)*c] for i in range((dim.size + c - 1) // c )]\n",
"\n",
" D = []\n",
" Z = []\n",
" for c, i in zip(chunks, range(len(chunks))):\n",
" _ds = ds.isel(**{d: slice(c[0], c[-1]+1)})\n",
" _suffix = suffix+\"_{}\".format(i)\n",
" if new_kwargs:\n",
" ds_out, _Z = custom_distribute(_ds, op, \n",
" tmp_dir=tmp_dir, \n",
" suffix=_suffix, \n",
" _root=False, \n",
" **new_kwargs,\n",
" )\n",
" D.append(ds_out)\n",
" Z.append(_Z)\n",
" else:\n",
" ds_out = op(_ds)\n",
" if tmp_dir is not None:\n",
" # store\n",
" zarr = os.path.join(tmp_dir, _suffix)\n",
" Z.append(zarr)\n",
" if not restart or not os.path.isdir(zarr):\n",
" ds_out.to_zarr(zarr, mode=\"w\")\n",
" # load\n",
" ds_out = xr.open_zarr(zarr)\n",
" else:\n",
" # persist data and wait for completion\n",
" ds_out = ds_out.persist()\n",
" _ = wait(ds_out)\n",
" D.append(ds_out)\n",
"\n",
" # merge results back and return\n",
" ds = xr.concat(D, d)\n",
"\n",
" return ds, Z"
]
},
{
"cell_type": "markdown",
"id": "c31da041-13dd-406b-93a2-035f5adf015c",
"metadata": {},
"source": [
"Without writing files to disk"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "349e076b-3e5e-47d6-8789-d17e9549d709",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x2aabaab66cd0>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ds_out, Z = custom_distribute(ds, lambda ds: ds.mean(\"t\"), x=32)\n",
"ds_out.v.plot()"
]
},
{
"cell_type": "markdown",
"id": "36d79181-a605-4430-9eb5-152a024fa535",
"metadata": {},
"source": [
"With temporary writing to disk"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "16021682-e36f-4bd7-9d03-3e4df166eb99",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['tmp_0', 'tmp_1', 'tmp_2', 'tmp_3']\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x2aabab7a5e50>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ds_out, Z = custom_distribute(ds, lambda ds: ds.mean(\"t\"), x=32, tmp_dir=\"\")\n",
"print(Z)\n",
"ds_out.v.plot()"
]
},
{
"cell_type": "markdown",
"id": "daa7c285-b69b-4d24-a424-aa2df8523688",
"metadata": {},
"source": [
"Restart calculation"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "813f73c6-9bca-433a-b6e6-5a4e26a1adda",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"module: Command not found.\n",
"module: Command not found.\n",
"module: Command not found.\n"
]
}
],
"source": [
"!rm -rf tmp_1"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "2479562b-341a-46d4-a826-71199b3e6afa",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['tmp_0', 'tmp_1', 'tmp_2', 'tmp_3']\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x2aaaaf981400>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ds_out, Z = custom_distribute(ds, lambda ds: ds.mean(\"t\"), x=32, tmp_dir=\"\", restart=True)\n",
"print(Z)\n",
"ds_out.v.plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "938238ce-4d46-4c44-a055-fecf7821376f",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@mgeplf
Copy link

mgeplf commented Jul 5, 2021

The issue referenced in the pre-amble (dask/distributed#2602) has been closed - I'm wondering if the change also helps with this example?

@apatlpo
Copy link
Author

apatlpo commented Jul 6, 2021

The example provided in this notebook is intended to demonstrate how to use custom_distribute and is not a problematic one per se.

What I wonder however is how custom_distribute performs for the original problem presented in dask/distributed#2602.
I'll try to give it a shot.

thanks for inquiring

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment