Created
July 19, 2019 13:31
-
-
Save DPeterK/11a2271b160c8debe4c77dda3334f24b to your computer and use it in GitHub Desktop.
CuPy and Iris
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": [ | |
"# CuPy and Iris\n", | |
"\n", | |
"A quick exploration of how easy it is to integrate [CuPy](https://cupy.chainer.org/) with [Iris](https://scitools.org.uk/iris/docs/latest/). We'll explore two particular areas:\n", | |
"\n", | |
"* creating an Iris cube with a CuPy data array, and\n", | |
"* performing a statistical collapse on a cube with a CuPy data array.\n", | |
"\n", | |
"## Enhancements to NumPy\n", | |
"\n", | |
"In NumPy v1.16 an exciting new piece of functionality was added. Called \"array overrides\", it allows NumPy array operations to call the most appropriate operation on the array based on the type of the array. For example, if you called `np.min` on a dask array, the minimum calculation would actually be handled by `dask.array.min`.\n", | |
"\n", | |
"Iris has a basic example of this sort of functionality embedded in some areas of its codebase, particularly relating to handling a cube's data array (which can be NumPy or dask), and performing some operations on the cube's data array - notably statistic operators. In this exploration we'll see if we can make use of array overrides with Iris to extend Iris to also handle CuPy arrays.\n", | |
"\n", | |
"### Note\n", | |
"\n", | |
"Some changes to Iris were necessary for the code demonstrated here to work. The code changes required are included in the patch file in this gist. You'll also need an NVIDIA GPU with drivers appropriate to your system to run the CuPy code here!\n", | |
"\n", | |
"\n", | |
"## Setup\n", | |
"\n", | |
"Imports, and explicitly enabling the new (and currently experimental) array overrides functionality." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import os\n", | |
"\n", | |
"# Enable array overrides.\n", | |
"os.environ['NUMPY_EXPERIMENTAL_ARRAY_FUNCTION'] = '1'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import cupy as cp\n", | |
"import iris\n", | |
"import iris.quickplot as qplt\n", | |
"import numpy as np" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Load data\n", | |
"\n", | |
"Load an arbitrary example NetCDF weather dataset as the basis of the experiment. This example NetCDF dataset came from [Met Office model data on AWS Earth](https://registry.opendata.aws/uk-met-office/).\n", | |
"\n", | |
"### Iris cube\n", | |
"\n", | |
"Initially we'll load the NetCDF dataset as a typical Iris cube, with a dask array as its data array." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
"<style>\n", | |
" a.iris {\n", | |
" text-decoration: none !important;\n", | |
" }\n", | |
" table.iris {\n", | |
" white-space: pre;\n", | |
" border: 1px solid;\n", | |
" border-color: #9c9c9c;\n", | |
" font-family: monaco, monospace;\n", | |
" }\n", | |
" th.iris {\n", | |
" background: #303f3f;\n", | |
" color: #e0e0e0;\n", | |
" border-left: 1px solid;\n", | |
" border-color: #9c9c9c;\n", | |
" font-size: 1.05em;\n", | |
" min-width: 50px;\n", | |
" max-width: 125px;\n", | |
" }\n", | |
" tr.iris :first-child {\n", | |
" border-right: 1px solid #9c9c9c !important;\n", | |
" }\n", | |
" td.iris-title {\n", | |
" background: #d5dcdf;\n", | |
" border-top: 1px solid #9c9c9c;\n", | |
" font-weight: bold;\n", | |
" }\n", | |
" .iris-word-cell {\n", | |
" text-align: left !important;\n", | |
" white-space: pre;\n", | |
" }\n", | |
" .iris-subheading-cell {\n", | |
" padding-left: 2em !important;\n", | |
" }\n", | |
" .iris-inclusion-cell {\n", | |
" padding-right: 1em !important;\n", | |
" }\n", | |
" .iris-panel-body {\n", | |
" padding-top: 0px;\n", | |
" }\n", | |
" .iris-panel-title {\n", | |
" padding-left: 3em;\n", | |
" }\n", | |
" .iris-panel-title {\n", | |
" margin-top: 7px;\n", | |
" }\n", | |
"</style>\n", | |
"<table class=\"iris\" id=\"140353295206160\">\n", | |
" <tr class=\"iris\">\n", | |
"<th class=\"iris iris-word-cell\">Air Temperature (K)</th>\n", | |
"<th class=\"iris iris-word-cell\">realization</th>\n", | |
"<th class=\"iris iris-word-cell\">pressure</th>\n", | |
"<th class=\"iris iris-word-cell\">latitude</th>\n", | |
"<th class=\"iris iris-word-cell\">longitude</th>\n", | |
"</tr>\n", | |
" <tr class=\"iris\">\n", | |
"<td class=\"iris-word-cell iris-subheading-cell\">Shape</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">18</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">33</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">960</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">1280</td>\n", | |
"</td>\n", | |
" <tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Dimension coordinates</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\trealization</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tpressure</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tlatitude</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tlongitude</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Scalar coordinates</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tforecast_period</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">615600 seconds</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tforecast_reference_time</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-06 06:00:00</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\ttime</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-13 09:00:00</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Attributes</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tConventions</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">CF-1.5, UKMO-1.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\thistory</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-06T11:22:27Z: StaGE Decoupler</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tinstitution</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">Met Office</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tleast_significant_digit</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">1.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__forecast_run_duration</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">PT174H</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_domain</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">global</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_type</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">standard</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_version</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">1.3.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__model_configuration</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">gl_ens</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tsource</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">Met Office Unified Model</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\ttitle</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">MOGREPS-G Model Forecast on Global 20 km Standard Grid</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tum_version</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">10.9</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
" " | |
], | |
"text/plain": [ | |
"<iris 'Cube' of air_temperature / (K) (realization: 18; pressure: 33; latitude: 960; longitude: 1280)>" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cube = iris.load_cube('./sample.nc')\n", | |
"cube" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### CuPy array\n", | |
"\n", | |
"Now let's convert the cube's data array to a CuPy array. There's no direct way to do this in Iris so we'll:\n", | |
"\n", | |
"1. access the cube's existing data array and convert it to a CuPy array, then\n", | |
"1. copy the initial cube and replace the original data array with the CuPy array." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Make a CuPy (GPU) array from the cube's data.\n", | |
"garray = cp.asarray(cube.data)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Copy the original cube and replace the data with the new CuPy array.\n", | |
"cucube = cube.copy(data=garray)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
"<style>\n", | |
" a.iris {\n", | |
" text-decoration: none !important;\n", | |
" }\n", | |
" table.iris {\n", | |
" white-space: pre;\n", | |
" border: 1px solid;\n", | |
" border-color: #9c9c9c;\n", | |
" font-family: monaco, monospace;\n", | |
" }\n", | |
" th.iris {\n", | |
" background: #303f3f;\n", | |
" color: #e0e0e0;\n", | |
" border-left: 1px solid;\n", | |
" border-color: #9c9c9c;\n", | |
" font-size: 1.05em;\n", | |
" min-width: 50px;\n", | |
" max-width: 125px;\n", | |
" }\n", | |
" tr.iris :first-child {\n", | |
" border-right: 1px solid #9c9c9c !important;\n", | |
" }\n", | |
" td.iris-title {\n", | |
" background: #d5dcdf;\n", | |
" border-top: 1px solid #9c9c9c;\n", | |
" font-weight: bold;\n", | |
" }\n", | |
" .iris-word-cell {\n", | |
" text-align: left !important;\n", | |
" white-space: pre;\n", | |
" }\n", | |
" .iris-subheading-cell {\n", | |
" padding-left: 2em !important;\n", | |
" }\n", | |
" .iris-inclusion-cell {\n", | |
" padding-right: 1em !important;\n", | |
" }\n", | |
" .iris-panel-body {\n", | |
" padding-top: 0px;\n", | |
" }\n", | |
" .iris-panel-title {\n", | |
" padding-left: 3em;\n", | |
" }\n", | |
" .iris-panel-title {\n", | |
" margin-top: 7px;\n", | |
" }\n", | |
"</style>\n", | |
"<table class=\"iris\" id=\"140353375684032\">\n", | |
" <tr class=\"iris\">\n", | |
"<th class=\"iris iris-word-cell\">Air Temperature (K)</th>\n", | |
"<th class=\"iris iris-word-cell\">realization</th>\n", | |
"<th class=\"iris iris-word-cell\">pressure</th>\n", | |
"<th class=\"iris iris-word-cell\">latitude</th>\n", | |
"<th class=\"iris iris-word-cell\">longitude</th>\n", | |
"</tr>\n", | |
" <tr class=\"iris\">\n", | |
"<td class=\"iris-word-cell iris-subheading-cell\">Shape</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">18</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">33</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">960</td>\n", | |
"<td class=\"iris iris-inclusion-cell\">1280</td>\n", | |
"</td>\n", | |
" <tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Dimension coordinates</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\trealization</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tpressure</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tlatitude</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tlongitude</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">-</td>\n", | |
" <td class=\"iris-inclusion-cell\">x</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Scalar coordinates</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tforecast_period</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">615600 seconds</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tforecast_reference_time</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-06 06:00:00</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\ttime</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-13 09:00:00</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-title iris-word-cell\">Attributes</td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
" <td class=\"iris-title\"></td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tConventions</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">CF-1.5, UKMO-1.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\thistory</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">2018-12-06T11:22:27Z: StaGE Decoupler</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tinstitution</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">Met Office</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tleast_significant_digit</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">1.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__forecast_run_duration</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">PT174H</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_domain</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">global</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_type</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">standard</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__grid_version</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">1.3.0</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tmosg__model_configuration</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">gl_ens</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tsource</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">Met Office Unified Model</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\ttitle</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">MOGREPS-G Model Forecast on Global 20 km Standard Grid</td>\n", | |
"</tr>\n", | |
"<tr class=\"iris\">\n", | |
" <td class=\"iris-word-cell iris-subheading-cell\">\tum_version</td>\n", | |
" <td class=\"iris-word-cell\" colspan=\"4\">10.9</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
" " | |
], | |
"text/plain": [ | |
"<iris 'Cube' of air_temperature / (K) (realization: 18; pressure: 33; latitude: 960; longitude: 1280)>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cucube" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Sanity check\n", | |
"\n", | |
"Can we still use the values in the CuPy array? For example, are there values in the array, and can we plot with them?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array(248.25, dtype=float32)" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cucube[0,32,0,0].data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"2.9196288" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# How big is the cube's data?\n", | |
"cucube.data.nbytes / 1e9" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Process data\n", | |
"\n", | |
"We proven that we can create an Iris cube with a CuPy array for its data array. Now let's explore whether we can perform statistical operations with this CuPy cube, and whether we see an improvement in processing time for running this statistic on GPU. We'll choose a simple statistic to try this with: calculating the sum of data over two of the cube's dimensions." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.QuadMesh at 0x7f7bc9bc0828>" | |
] | |
}, | |
"execution_count": 24, | |
"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": [ | |
"sumcube = cucube.collapsed(['pressure'], iris.analysis.SUM)\n", | |
"tmpcube = sumcube.copy(data=cp.asnumpy(sumcube.data))\n", | |
"qplt.pcolormesh(tmpcube)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/jupyter-jacob/iris/lib/iris/coords.py:1357: UserWarning: Collapsing a non-contiguous coordinate. Metadata may not be fully descriptive for 'pressure'.\n", | |
" warnings.warn(msg.format(self.name()))\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.QuadMesh at 0x7f7be012ee48>" | |
] | |
}, | |
"execution_count": 19, | |
"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": [ | |
"qplt.pcolormesh(cube.collapsed(['pressure'], iris.analysis.SUM))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Results\n", | |
"\n", | |
"By making the same plot with both the original cube and the CuPy cube we've proven the processing works correctly with CuPy. But is it any faster?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"566 ms ± 3.62 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%timeit np.unique(cube.collapsed(['pressure', 'realization'], iris.analysis.SUM).data)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/jupyter-jacob/iris/lib/iris/coords.py:1357: UserWarning: Collapsing a non-contiguous coordinate. Metadata may not be fully descriptive for 'realization'.\n", | |
" warnings.warn(msg.format(self.name()))\n" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"7.75 ms ± 4.99 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%timeit np.unique(cucube.collapsed(['pressure', 'realization'], iris.analysis.SUM).data)" | |
] | |
} | |
], | |
"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 | |
} |
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
diff --git a/lib/iris/_data_manager.py b/lib/iris/_data_manager.py | |
index 8f6e9e4e..8cbeac18 100644 | |
--- a/lib/iris/_data_manager.py | |
+++ b/lib/iris/_data_manager.py | |
@@ -270,13 +270,13 @@ class DataManager(object): | |
self._lazy_array = data | |
self._real_array = None | |
else: | |
- if not ma.isMaskedArray(data): | |
- # Coerce input data to ndarray (including ndarray subclasses). | |
- data = np.asarray(data) | |
- if isinstance(data, ma.core.MaskedConstant): | |
- # Promote to a masked array so that the fill-value is | |
- # writeable to the data owner. | |
- data = ma.array(data.data, mask=data.mask, dtype=data.dtype) | |
+# if not ma.isMaskedArray(data): | |
+# # Coerce input data to ndarray (including ndarray subclasses). | |
+# data = np.asarray(data) | |
+# if isinstance(data, ma.core.MaskedConstant): | |
+# # Promote to a masked array so that the fill-value is | |
+# # writeable to the data owner. | |
+# data = ma.array(data.data, mask=data.mask, dtype=data.dtype) | |
self._lazy_array = None | |
self._real_array = data | |
diff --git a/lib/iris/analysis/__init__.py b/lib/iris/analysis/__init__.py | |
index 0a5265e9..85c95a79 100644 | |
--- a/lib/iris/analysis/__init__.py | |
+++ b/lib/iris/analysis/__init__.py | |
@@ -1485,7 +1485,7 @@ This aggregator handles masked data. | |
""" | |
-MEAN = WeightedAggregator('mean', ma.average, | |
+MEAN = WeightedAggregator('mean', np.mean, | |
lazy_func=_build_dask_mdtol_function(da.mean)) | |
""" | |
An :class:`~iris.analysis.Aggregator` instance that calculates | |
@@ -1736,7 +1736,7 @@ This aggregator handles masked data. | |
""" | |
-SUM = WeightedAggregator('sum', iris._lazy_data.non_lazy(_lazy_sum), | |
+SUM = WeightedAggregator('sum', np.sum, | |
lazy_func=_build_dask_mdtol_function(_lazy_sum)) | |
""" | |
An :class:`~iris.analysis.Aggregator` instance that calculates |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment