Skip to content

Instantly share code, notes, and snippets.

@muellerzr
Last active February 16, 2021 16:45
Show Gist options
  • Save muellerzr/3777fac2613eba1da9995acf916830d3 to your computer and use it in GitHub Desktop.
Save muellerzr/3777fac2613eba1da9995acf916830d3 to your computer and use it in GitHub Desktop.
Memory Profiling
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "scratchpad",
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"accelerator": "GPU",
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"8c61d4e55b76493cadeb8e53fe9fbc2b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_view_name": "HBoxView",
"_dom_classes": [],
"_model_name": "HBoxModel",
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.5.0",
"box_style": "",
"layout": "IPY_MODEL_9e7975c3644b48f99edaf8b13d3abf62",
"_model_module": "@jupyter-widgets/controls",
"children": [
"IPY_MODEL_6df09284713047debbc51c36aa0d56ee",
"IPY_MODEL_995435dfbcea44a6b790e8feb480782d"
]
}
},
"9e7975c3644b48f99edaf8b13d3abf62": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"6df09284713047debbc51c36aa0d56ee": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_view_name": "ProgressView",
"style": "IPY_MODEL_5026cd3623324376a1412b7aebd34aeb",
"_dom_classes": [],
"description": "100%",
"_model_name": "FloatProgressModel",
"bar_style": "success",
"max": 46827520,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 46827520,
"_view_count": null,
"_view_module_version": "1.5.0",
"orientation": "horizontal",
"min": 0,
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_a5f4ce391844410d93dc39c3060aa0ad"
}
},
"995435dfbcea44a6b790e8feb480782d": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_view_name": "HTMLView",
"style": "IPY_MODEL_72c091f0407740258a47ba0ec57eab46",
"_dom_classes": [],
"description": "",
"_model_name": "HTMLModel",
"placeholder": "​",
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": " 44.7M/44.7M [00:02<00:00, 20.9MB/s]",
"_view_count": null,
"_view_module_version": "1.5.0",
"description_tooltip": null,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_584b93c7a50c49ebaa4d1a70b49ddb14"
}
},
"5026cd3623324376a1412b7aebd34aeb": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "ProgressStyleModel",
"description_width": "initial",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"bar_color": null,
"_model_module": "@jupyter-widgets/controls"
}
},
"a5f4ce391844410d93dc39c3060aa0ad": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"72c091f0407740258a47ba0ec57eab46": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_view_name": "StyleView",
"_model_name": "DescriptionStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"_model_module": "@jupyter-widgets/controls"
}
},
"584b93c7a50c49ebaa4d1a70b49ddb14": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
}
}
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/muellerzr/3777fac2613eba1da9995acf916830d3/scratchpad.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "lIYdn1woOS1n",
"outputId": "864495af-7f8d-4b05-f939-fbf98b2d7ec9",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"!pip install fastai --upgrade -qqq"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"\u001b[?25l\r\u001b[K |█▊ | 10kB 24.2MB/s eta 0:00:01\r\u001b[K |███▌ | 20kB 2.1MB/s eta 0:00:01\r\u001b[K |█████▏ | 30kB 2.7MB/s eta 0:00:01\r\u001b[K |███████ | 40kB 3.0MB/s eta 0:00:01\r\u001b[K |████████▊ | 51kB 2.4MB/s eta 0:00:01\r\u001b[K |██████████▍ | 61kB 2.7MB/s eta 0:00:01\r\u001b[K |████████████▏ | 71kB 3.0MB/s eta 0:00:01\r\u001b[K |██████████████ | 81kB 3.3MB/s eta 0:00:01\r\u001b[K |███████████████▋ | 92kB 3.5MB/s eta 0:00:01\r\u001b[K |█████████████████▍ | 102kB 3.3MB/s eta 0:00:01\r\u001b[K |███████████████████ | 112kB 3.3MB/s eta 0:00:01\r\u001b[K |████████████████████▉ | 122kB 3.3MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 133kB 3.3MB/s eta 0:00:01\r\u001b[K |████████████████████████▎ | 143kB 3.3MB/s eta 0:00:01\r\u001b[K |██████████████████████████ | 153kB 3.3MB/s eta 0:00:01\r\u001b[K |███████████████████████████▉ | 163kB 3.3MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 174kB 3.3MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▎| 184kB 3.3MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 194kB 3.3MB/s \n",
"\u001b[?25h\u001b[?25l\r\u001b[K |███████ | 10kB 24.5MB/s eta 0:00:01\r\u001b[K |██████████████ | 20kB 32.1MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 30kB 38.0MB/s eta 0:00:01\r\u001b[K |████████████████████████████ | 40kB 29.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 51kB 6.3MB/s \n",
"\u001b[?25h"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "x51rJjbnOcfF"
},
"source": [
"Note: The memory profiling sections are from Andres Babino's notebook [here](https://gist.github.com/ababino/cbe0c1d55573dcfe6e3b9bfad9dfa872)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "dVG2lJJiJijS"
},
"source": [
"import gc\n",
"from fastcore import *\n",
"from fastai.vision.all import *\n",
"import matplotlib.pyplot as plt"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "yIezeHtXJN3S"
},
"source": [
"def get_cudas():\n",
" '''Returns the number of tensors in cuda device.'''\n",
" n = 0\n",
" for o in gc.get_objects():\n",
" if torch.is_tensor(o):\n",
" o = maybe_attr(o, 'data')\n",
" if o.is_cuda: n += 1\n",
" return n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "du5tQblcJiz7"
},
"source": [
"class GatherCudas(Callback):\n",
" def __init__(self): self.cudas = []\n",
" def after_batch(self): self.cudas.append(get_cudas())"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "NdeqHW37LmhI"
},
"source": [
"@patch\n",
"def forward(self:SequentialEx, x):\n",
" res = x\n",
" for l in self.layers:\n",
" res.orig = x\n",
" nres = l(res)\n",
" # We have to remove res.orig and nres.orig to avoid hanging refs and therefore memory leaks\n",
" nres.orig, res.orig = None, None\n",
" res = nres\n",
" return res"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "_T1hn2-DJjwi",
"outputId": "4bab0e0f-b177-4895-b90f-ecb195f5f34f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 286,
"referenced_widgets": [
"8c61d4e55b76493cadeb8e53fe9fbc2b",
"9e7975c3644b48f99edaf8b13d3abf62",
"6df09284713047debbc51c36aa0d56ee",
"995435dfbcea44a6b790e8feb480782d",
"5026cd3623324376a1412b7aebd34aeb",
"a5f4ce391844410d93dc39c3060aa0ad",
"72c091f0407740258a47ba0ec57eab46",
"584b93c7a50c49ebaa4d1a70b49ddb14"
]
}
},
"source": [
"path = untar_data(URLs.CAMVID_TINY)\n",
"dls = SegmentationDataLoaders.from_label_func(\n",
" path, bs=8, fnames = get_image_files(path/\"images\"),\n",
" label_func = lambda o: path/'labels'/f'{o.stem}_P{o.suffix}',\n",
" codes = np.loadtxt(path/'codes.txt', dtype=str), num_workers=0\n",
")\n",
"gccb = GatherCudas()\n",
"learn = unet_learner(dls, resnet18, cbs=gccb)\n",
"learn.fine_tune(2)"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
""
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Downloading: \"https://download.pytorch.org/models/resnet18-5c106cde.pth\" to /root/.cache/torch/hub/checkpoints/resnet18-5c106cde.pth\n"
],
"name": "stderr"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8c61d4e55b76493cadeb8e53fe9fbc2b",
"version_minor": 0,
"version_major": 2
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=46827520.0), HTML(value='')))"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>2.644984</td>\n",
" <td>12.859108</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/torch/distributed/distributed_c10d.py:126: UserWarning: torch.distributed.reduce_op is deprecated, please use torch.distributed.ReduceOp instead\n",
" warnings.warn(\"torch.distributed.reduce_op is deprecated, please use \"\n"
],
"name": "stderr"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>2.860717</td>\n",
" <td>1.910972</td>\n",
" <td>00:02</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>2.080592</td>\n",
" <td>1.605557</td>\n",
" <td>00:02</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "H9c9RqXDJkv2",
"outputId": "e5594706-bf5a-42a7-fb20-f51956425548",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
}
},
"source": [
"plt.plot(gccb.cudas)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7face2a385f8>]"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2aDHaO2JJqGj"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment