Skip to content

Instantly share code, notes, and snippets.

@christinahedges
Created September 24, 2021 20:32
Show Gist options
  • Save christinahedges/7ad68bcecb6400d182204ec5145d7518 to your computer and use it in GitHub Desktop.
Save christinahedges/7ad68bcecb6400d182204ec5145d7518 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "3b1bb662-dd8e-4701-82e2-604f6fa51ef5",
"metadata": {},
"source": [
"# Demonstration of new `cupy` enabled tool\n",
"\n",
"We've spent some time pulling out the key functionality of our tool and \n",
"\n",
"1. Stripping down to the basic functionality only (e.g. none of the functionality to work with the specifics of the spacecraft/final mission products etc). Ultimately this new core will be worked into our existing tool.\n",
"2. Ensuring that everything runs in `cupy`, including `cupy.sparse` which does not have all the functionality of `scipy.sparse`. We were able to recreate all our core functionality using functions that work with either `cupy` or `numpy`, making our core run on GPU or CPU.\n",
"3. Testing to find out where the bottlenecks are. Currently the bottleneck is IO. We are able to get ~8x speed up from a GPU already, just by running on GPU. \n",
"\n",
"This notebook shows the API for the core tools\n",
"\n",
"\n",
"The goals for Monday:\n",
"- Profiling! \n",
" - How many files can we run at a time? how do we use the resources efficiently\n",
" \n",
"- Talk about the IO problem, is there a way we can read in certain bytes from the fits files directly to the GPU?"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "88cec27f-7b26-48b9-a08a-ca6c73179ff4",
"metadata": {},
"outputs": [],
"source": [
"import cupy as cp\n",
"from designmatrix import cartesian_design_matrix, radial_design_matrix, strap_design_matrix, spline_design_matrix, TESS_design_matrix\n",
"import matplotlib.pyplot as plt\n",
"from backdrop import BackDrop\n",
"from utils import get_star_mask\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"id": "495e0ba6-6f19-432f-817b-7ec6117ef0bf",
"metadata": {},
"source": [
"## Building a model\n",
"\n",
"To build the model we first have to load the data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "02db7dce-e462-4820-8c2d-c8bb317cbadf",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading data into memory: 100%|██████████| 100/100 [00:24<00:00, 4.07it/s]\n"
]
}
],
"source": [
"from glob import glob\n",
"import fitsio\n",
"from tqdm import tqdm\n",
"\n",
"# These are available to anyone using the jupyter-lab\n",
"fnames = glob('/nobackupp12/chedges/tess/sector01/camera1/ccd1/*ffic.fits.gz')\n",
"f_cuda = cp.zeros((100, 2048, 2048), dtype=cp.float32)\n",
"for tdx, fname in enumerate(tqdm(fnames[:100], desc='Loading data into memory')):\n",
" f = cp.asarray(fitsio.read(fname)[:2048, 45:45+2048])\n",
" f[~cp.isfinite(f)] = 1e-5\n",
" f[f <= 0] = 1e-5\n",
" f_cuda[tdx] = f"
]
},
{
"cell_type": "markdown",
"id": "f48f48dd-0ac9-4ad6-ba93-e0e6a82aab43",
"metadata": {},
"source": [
"Then we can build a `BackDrop` object, pass in the flux, fit the model and save it"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c0e0de8b-e3a0-445b-9fa3-3bd0d6b88090",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Fitting Frames: 100%|██████████| 100/100 [00:05<00:00, 16.94it/s]\n"
]
}
],
"source": [
"b = BackDrop()\n",
"b.fit_model(f_cuda)\n",
"b.save()"
]
},
{
"cell_type": "markdown",
"id": "bdfb5695-1b79-4332-9fc0-b72de1964fa2",
"metadata": {},
"source": [
"An example of the model this makes is shown below"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0ec64ad7-fa88-4119-b8c3-f1a23ecd2a71",
"metadata": {},
"outputs": [
{
"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.imshow(b.model(0).get());\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"id": "c95c9884-cc43-4086-9df6-70160efc8a04",
"metadata": {},
"source": [
"## Applying the model\n",
"\n",
"If you want to apply the model, you usually only want a small part of the detector. To get the correctino just for a segment of the detector you would make a `BackDrop` object, at the column and row you care about. You'd then load the weight file."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "bfd483b2-4c7b-4c8e-941c-78246ff66e62",
"metadata": {},
"outputs": [],
"source": [
"b = BackDrop(column=cp.arange(1400, 1471), row=cp.arange(780, 834)).load()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "60f18ec3-ef82-4652-af43-4256befe75eb",
"metadata": {},
"outputs": [
{
"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.imshow(b.model(0).get())\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "69e75ac1-931b-4c35-bbbb-665c6c25bc93",
"metadata": {},
"source": [
"## What's happening?\n",
"\n",
"We're making `design_matrix` objects under the hood, we have a few flavors of them, e.g."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "517f9604-4539-43eb-87e8-2d7c4e7d7fa2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"cartesian (4194304, 25)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cartesian_design_matrix()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d63dd24b-634b-4f18-a497-ee6a1f2c807a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"radial (4194304, 10)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"radial_design_matrix()"
]
},
{
"cell_type": "markdown",
"id": "d7cfdf31-e6be-423d-8baa-5b823871110f",
"metadata": {},
"source": [
"These objects have some handy features, but `BackDrop` is taking care of building them, fitting them, and saving the weights"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d9177805-0d0c-45e7-af9a-b56387da49da",
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment