Skip to content

Instantly share code, notes, and snippets.

@rsignell-usgs
Created May 12, 2018 11:49
Show Gist options
  • Save rsignell-usgs/49aab25d07bbb5e8ade50fa31b443737 to your computer and use it in GitHub Desktop.
Save rsignell-usgs/49aab25d07bbb5e8ade50fa31b443737 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing Utide on Pangeo with Dask distributed\n",
"====\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import xarray as xr\n",
"import matplotlib.pyplot as plt\n",
"import s3fs\n",
"\n",
"import utide"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from dask.distributed import Client, progress, LocalCluster\n",
"from dask_kubernetes import KubeCluster"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For Dask, the workers need Utide too. So we created `utide-worker.yaml`, which is just the `default-worker.yaml` with the addition of utide from conda-forge.\n",
"```\n",
"env:\n",
" - name: GCSFUSE_BUCKET\n",
" value: pangeo-data\n",
" - name: EXTRA_CONDA_PACKAGES\n",
" value: utide -c conda-forge\n",
"```\n",
"\n",
"Since we are customizing the workers, they take about a minute to spin up...."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "bdb8e5e0cbbd4d838e599b1102d6ade3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(HTML(value='<h2>KubeCluster</h2>'), HBox(children=(HTML(value='\\n<div>\\n <style scoped>\\n .…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cluster = KubeCluster.from_yaml('/home/jovyan/worker-template.yaml')\n",
"cluster.scale(10);\n",
"cluster"
]
},
{
"cell_type": "code",
"execution_count": 7,
"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://192.168.110.178:36242\n",
" <li><b>Dashboard: </b><a href='/user/rsignell-usgs/proxy/8787/status' target='_blank'>/user/rsignell-usgs/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>10</li>\n",
" <li><b>Cores: </b>10</li>\n",
" <li><b>Memory: </b>37.50 GB</li>\n",
"</ul>\n",
"</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<Client: scheduler='tcp://192.168.110.178:36242' processes=10 cores=10>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"client = Client(cluster)\n",
"client"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Open an Xarray Dataset"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# GCS\n",
"#fs = gcsfs.GCSFileSystem(project='pangeo-181919', access='read_only')\n",
"#fmap = gcsfs.mapping.GCSMap('pangeo-data/rsignell/ocean_his_tide_zeta', gcs=fs)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# AWS s3\n",
"fs = s3fs.S3FileSystem(anon=True)\n",
"fmap = s3fs.S3Map('rsignell/tides', s3=fs)\n",
"#fmap = s3fs.S3Map('rsignell/nwm/tiny3a', s3=fs)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"ds = xr.open_zarr(fmap, decode_times=False)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (eta_rho: 324, ocean_time: 1441, xi_rho: 1542)\n",
"Coordinates:\n",
" lat_rho (eta_rho, xi_rho) float64 dask.array<shape=(324, 1542), chunksize=(81, 771)>\n",
" lon_rho (eta_rho, xi_rho) float64 dask.array<shape=(324, 1542), chunksize=(81, 771)>\n",
" * ocean_time (ocean_time) float64 0.0 1.8e+03 3.6e+03 5.4e+03 7.2e+03 ...\n",
"Dimensions without coordinates: eta_rho, xi_rho\n",
"Data variables:\n",
" zeta (ocean_time, eta_rho, xi_rho) float32 dask.array<shape=(1441, 324, 1542), chunksize=(91, 41, 193)>\n",
"Attributes:\n",
" CPP_options: GSB, ADD_FSOBC, ADD_M2OBC, ANA_BSFLUX, ANA_BTFLUX, ANA...\n",
" Conventions: CF-1.4\n",
" NCO: 4.7.3\n",
" NLM_LBC: \\nEDGE: WEST SOUTH EAST NORTH \\nzeta: Cha C...\n",
" ana_file: ROMS/Functionals/ana_btflux.h, ROMS/Functionals/ana_fs...\n",
" code_dir: /cxfs/projects/usgs/hazards/cmgp/woodshole/aaretxabale...\n",
" compiler_command: /opt/intel/impi/5.0.1.035/intel64/bin/mpif90\n",
" compiler_flags: -heap-arrays -fp-model precise -ip -O3 -xW -free\n",
" compiler_system: ifort\n",
" cpu: x86_64\n",
" file: ocean_his_gsb_tides_55nb.nc\n",
" format: netCDF-3 64bit offset file\n",
" frc_file_01: ../forcings/tide_forc_GSB_55.nc\n",
" grd_file: ../grids/GSB_55nb.nc\n",
" header_dir: /cxfs/projects/usgs/hazards/cmgp/woodshole/aaretxabale...\n",
" header_file: gsb.h\n",
" his_file: ocean_his_gsb_tides_55nb.nc\n",
" history: Mon Mar 12 09:36:34 2018: ncks -O -v ocean_time,zeta,l...\n",
" os: Linux\n",
" rst_file: ocean_rst.nc\n",
" script_file: \n",
" svn_rev: \n",
" svn_url: https:://myroms.org/svn/src\n",
" tiling: 036x010\n",
" title: Great south Bay\n",
" type: ROMS/TOMS history file\n",
" var_info: varinfo.dat"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1441 324 1542\n"
]
}
],
"source": [
"dt, n, m = ds['zeta'].shape\n",
"print(dt,n,m)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"t = ds['ocean_time'].values/(3600*24)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"#client.get_versions(check=True)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"from utide import solve\n",
"import numpy as np\n",
"import warnings\n",
"\n",
"lat = 40.7"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"solve: matrix prep ... solution ... diagnostics ... done.\n",
"CPU times: user 312 ms, sys: 188 ms, total: 500 ms\n",
"Wall time: 6.94 s\n"
]
}
],
"source": [
"%%time\n",
"with warnings.catch_warnings():\n",
" warnings.simplefilter(\"ignore\")\n",
" acoef = solve(t, ds['zeta'][:,10,10].values, 0*t, lat, trend=False, \n",
" nodal=False, Rayleigh_min=0.95, method='ols', conf_int='linear')\n",
" val = acoef['Lsmaj']"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['M2', 'N2', 'S2', 'K1', 'O1', 'ETA2', 'M6', 'M4', 'Q1', 'UPS1',\n",
" 'OO1', 'J1', 'NO1', '2Q1', 'MO3', 'M3', 'SK3', 'MK3', 'MN4', 'MSF',\n",
" 'MS4', 'S4', '2MK5', '2SK5', '3MK7', '2MN6', '2MS6', '2SM6', 'M8'],\n",
" dtype=object)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"acoef['name']"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"import dask.array as da\n",
"from dask import delayed"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Make Utide `solve` a delayed function"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"usolve = delayed(solve)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load all the data to start, since it's only 2GB"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.879740512\n",
"CPU times: user 4.12 s, sys: 7.87 s, total: 12 s\n",
"Wall time: 21.7 s\n"
]
}
],
"source": [
"%%time\n",
"z = ds['zeta'][:].compute()\n",
"print(z.nbytes/1e9)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Specify the subset interval to calcuate tides. nsub = 4 means do every 4th point"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"nsub = 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a list of delayed functions (one for each grid cell)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 14 s, sys: 324 ms, total: 14.3 s\n",
"Wall time: 14.1 s\n"
]
}
],
"source": [
"%%time \n",
"with warnings.catch_warnings():\n",
" warnings.simplefilter(\"ignore\")\n",
" coefs = [usolve(t, z[:,j*nsub,i*nsub], t*0.0, lat, \n",
" trend=False, nodal=False, Rayleigh_min=0.95, method='ols',\n",
" conf_int='linear') for j in range(int(n/nsub)) for i in range(int(m/nsub))]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Construct a list of Dask arrays"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"arrays = [da.from_delayed(coef['Lsmaj'], dtype=val.dtype, shape=val.shape) for coef in coefs]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Stack the arrays "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"stack = da.stack(arrays, axis=0) "
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dask.array<stack, shape=(31185, 29), dtype=float64, chunksize=(1, 29)>"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stack"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2min 38s, sys: 21.5 s, total: 3min\n",
"Wall time: 4min 50s\n"
]
}
],
"source": [
"%%time \n",
"amps = stack.compute()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# for debugging\n",
"#pods = cluster.pods()\n",
"#print(cluster.logs(pods[0]))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"m2amp = amps[:,0].reshape((int(n/nsub),int(m/nsub)))"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12,8))\n",
"plt.pcolormesh(m2amp)\n",
"plt.colorbar()\n",
"plt.title('M2 Elevation Amplitude');"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda root]",
"language": "python",
"name": "conda-root-py"
},
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment