From b1be5c166097014cb523ba38f26a97ef55e25561 Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Fri, 22 Mar 2024 14:07:32 +0000 Subject: [PATCH 1/5] Add guidance on using profilers from within Jupyter notebooks. --- .../line_profiler-worked-example-notebook.png | Bin 0 -> 50501 bytes ... => line_profiler-worked-example-rich.png} | Bin .../fig/snakeviz-worked-example-notebook.png | Bin 0 -> 75758 bytes .../line-profiling-worked-example.ipynb | 65 +++++++++++++ .../snakeviz-worked-example.ipynb | 89 ++++++++++++++++++ episodes/profiling-functions.md | 43 +++++++++ episodes/profiling-lines.md | 37 +++++++- 7 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 episodes/fig/line_profiler-worked-example-notebook.png rename episodes/fig/{line_profiler-worked-example.png => line_profiler-worked-example-rich.png} (100%) create mode 100644 episodes/fig/snakeviz-worked-example-notebook.png create mode 100644 episodes/files/line_profiler-worked-example/line-profiling-worked-example.ipynb create mode 100644 episodes/files/snakeviz-worked-example/snakeviz-worked-example.ipynb diff --git a/episodes/fig/line_profiler-worked-example-notebook.png b/episodes/fig/line_profiler-worked-example-notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..76de6bcbf658a34284559d13bdbd0156698c46bf GIT binary patch literal 50501 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�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 literal 0 HcmV?d00001 diff --git a/episodes/files/line_profiler-worked-example/line-profiling-worked-example.ipynb b/episodes/files/line_profiler-worked-example/line-profiling-worked-example.ipynb new file mode 100644 index 0000000..90a1a15 --- /dev/null +++ b/episodes/files/line_profiler-worked-example/line-profiling-worked-example.ipynb @@ -0,0 +1,65 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "e80c86cb-d60a-4e45-a34c-191aab11acf0", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install line_profiler\n", + "%load_ext line_profiler" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "de5e278a-6826-4f42-b1af-496f5aabf996", + "metadata": {}, + "outputs": [], + "source": [ + "def fizzbuzz(n):\n", + " for i in range(1, n + 1):\n", + " if i % 3 == 0 and i % 5 == 0:\n", + " print(\"FizzBuzz\")\n", + " elif i % 3 == 0:\n", + " print(\"Fizz\")\n", + " elif i % 5 == 0:\n", + " print(\"Buzz\")\n", + " else:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c54f2642-617e-4a51-b3e8-1ff1ba0e8426", + "metadata": {}, + "outputs": [], + "source": [ + "%lprun -f fizzbuzz fizzbuzz(100)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/episodes/files/snakeviz-worked-example/snakeviz-worked-example.ipynb b/episodes/files/snakeviz-worked-example/snakeviz-worked-example.ipynb new file mode 100644 index 0000000..625054d --- /dev/null +++ b/episodes/files/snakeviz-worked-example/snakeviz-worked-example.ipynb @@ -0,0 +1,89 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "83b45371-9cd9-4a8f-b0ff-ceb1bfc2ecc2", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "def a_1():\n", + " for i in range(3):\n", + " b_1()\n", + " time.sleep(1)\n", + " b_2()\n", + " \n", + "def b_1():\n", + " c_1()\n", + " c_2()\n", + "\n", + "def b_2():\n", + " time.sleep(1)\n", + " \n", + "def c_1():\n", + " time.sleep(0.5)\n", + "\n", + "def c_2():\n", + " time.sleep(0.3)\n", + " d_1()\n", + "\n", + "def d_1():\n", + " time.sleep(0.1)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0fc38195-3dc4-4a7c-82f6-1167f54d3182", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install snakeviz" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c47affa0-23cc-43f8-a4f8-e73ab2f44afd", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext snakeviz" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58040218-8578-47fc-9a18-476f4b27d25a", + "metadata": {}, + "outputs": [], + "source": [ + "%snakeviz a_1()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/episodes/profiling-functions.md b/episodes/profiling-functions.md index 15daf64..9c1edc9 100644 --- a/episodes/profiling-functions.md +++ b/episodes/profiling-functions.md @@ -207,6 +207,42 @@ By clicking a box within the diagram, it will "zoom" making the selected box the As you hover each box, information to the left of the diagram updates specifying the location of the method and for how long it ran. +::::::::::::::::::::::::::::::::::::: callout + +## snakeviz Inside Notebooks + +If you're more familiar with writing Python inside Jupyter notebooks, you might not feel comfortable using the command line for profiling. Instead, `snakeviz` can be called directly from inside notebooks, and it will automatically call `cProfile` for you. + +First `snakeviz` must be installed and it's extension loaded. + +```py +!pip install snakeviz +%load_ext snakeviz +``` + +Following this, you can either call `%snakeviz` to profile a function defined earlier in the notebook. + +```py +%snakeviz my_function() +``` + +Or, you can create a `%%snakeviz` cell, to profile the python executed within it. + +```py +%%snakeviz + +def my_function(): + print("Hello World!") + +my_function() +``` + +In both cases, the full `snakeviz` profile visualisation will appear as an output within the notebook! + +*You may wish to right click the top of the output, and select "Disable Scrolling for Outputs" to expand it's box if it begins too small.* + +::::::::::::::::::::::::::::::::::::::::::::: + ## Worked Example :::::::::::::::::::::::::::::::::: instructor @@ -310,6 +346,13 @@ The sunburst visualisation displays less text on the boxes, so it can be harder ::::::::::::::::::::::::::::::::::::::::::::: +If you followed along inside a notebook it might look like this: + +![The worked example inside a notebook.](episodes/fig/snakeviz-worked-example-notebook.png){alt="A Jupyter notebook showing the worked example profiled with snakeviz." width=80%} + +Because notebooks operate by creating temporary Python files, the filename (shown `1378276351.py` above) and line numbers are not too useful, but function names should still be helpful. + + ## Exercises The following exercises allow you to review your understanding of what has been covered in this episode. diff --git a/episodes/profiling-lines.md b/episodes/profiling-lines.md index d8239c0..5fb82f4 100644 --- a/episodes/profiling-lines.md +++ b/episodes/profiling-lines.md @@ -238,7 +238,42 @@ Therefore it can be seen in this example, how the time spent executing each line The `-r` argument passed to `kernprof` (or `line_profiler`) enables rich output, if you run the profile locally it should look similar to this. *This requires the optional package `rich`, it will have been installed if `[all]` was specified when installing `line_profiler` with `pip`.* -![Rich (highlighted) console output provided by `line_profiler` for the above FizzBuzz profile code.](episodes/fig/line_profiler-worked-example.png){alt="A screenshot of the `line_profiler` output from the previous code block, where the code within the line contents column has basic highlighting."} +![Rich (highlighted) console output provided by `line_profiler` for the above FizzBuzz profile code.](episodes/fig/line_profiler-worked-example-rich.png){alt="A screenshot of the `line_profiler` output from the previous code block, where the code within the line contents column has basic highlighting."} + +::::::::::::::::::::::::::::::::::::::::::::: + +::::::::::::::::::::::::::::::::::::: callout + +## line_profiler Inside Notebooks + +If you're more familiar with writing Python inside Jupyter notebooks, you might not feel comfortable using the command line for profiling. Instead, `line_profiler` can be called directly from inside notebooks. It is still necessary for the code to be profiled to be placed within a function. + +First `line_profiler` must be installed and it's extension loaded. + +```py +!pip install line_profiler +%load_ext line_profiler +``` + +Following this, you call `line_profiler` with `%lprun`. + +```py +%lprun -f profiled_function_name entry_function_call() +``` + +The functions to be line profiled are specified with `-f `, this is repeated for each individual function that you would otherwise apply the `@profile` decorator to. + +This is followed by calling the function which runs the full code to be profiled. + +For the above fizzbuzz example it would be: + +```py +%lprun -f fizzbuzz fizzbuzz(100) +``` + +This will then create an output cell with any output from the profiled code, followed by the standard output from `line_profiler`. *It is not currently possible to get the rich/coloured output from `line_profiler` within notebooks.* + +![Output provided by `line_profiler` inside a Juypter notebook for the above FizzBuzz profile code.](episodes/fig/line_profiler-worked-example-notebook.png){alt="A screenshot of the line_profiler output from the previous code block inside a Jupyter notebook."} ::::::::::::::::::::::::::::::::::::::::::::: From cc242b9e66d838f544b36babd2a30509c977e162 Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Fri, 22 Mar 2024 15:17:59 +0000 Subject: [PATCH 2/5] Update episodes/profiling-functions.md Co-authored-by: Neil Shephard --- episodes/profiling-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/profiling-functions.md b/episodes/profiling-functions.md index 9c1edc9..4a3b88a 100644 --- a/episodes/profiling-functions.md +++ b/episodes/profiling-functions.md @@ -350,7 +350,7 @@ If you followed along inside a notebook it might look like this: ![The worked example inside a notebook.](episodes/fig/snakeviz-worked-example-notebook.png){alt="A Jupyter notebook showing the worked example profiled with snakeviz." width=80%} -Because notebooks operate by creating temporary Python files, the filename (shown `1378276351.py` above) and line numbers are not too useful, but function names should still be helpful. +Because notebooks operate by creating temporary Python files, the filename (shown `1378276351.py` above) and line numbers are not too useful should still be helpful. The function names follow the temporary file name in parentheses, e.g. `1378276351.py(a_1)` `1378276351.py(b_1)` and so forth. ## Exercises From 08f33aafe0b19fd298805315c670c1071c8f4e7d Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Fri, 22 Mar 2024 15:18:37 +0000 Subject: [PATCH 3/5] Update episodes/profiling-functions.md Co-authored-by: Neil Shephard --- episodes/profiling-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/profiling-functions.md b/episodes/profiling-functions.md index 4a3b88a..b9e23e5 100644 --- a/episodes/profiling-functions.md +++ b/episodes/profiling-functions.md @@ -211,7 +211,7 @@ As you hover each box, information to the left of the diagram updates specifying ## snakeviz Inside Notebooks -If you're more familiar with writing Python inside Jupyter notebooks, you might not feel comfortable using the command line for profiling. Instead, `snakeviz` can be called directly from inside notebooks, and it will automatically call `cProfile` for you. +If you're more familiar with writing Python inside Jupyter notebooks you can still use `snakeviz` directly from inside notebooks using the notebooks "magic" prefix (`%`) and it will automatically call `cProfile` for you. First `snakeviz` must be installed and it's extension loaded. From 0f15f244f43b663bcfef68037558b04a385ba163 Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Fri, 22 Mar 2024 15:19:45 +0000 Subject: [PATCH 4/5] Update episodes/profiling-lines.md Co-authored-by: Neil Shephard --- episodes/profiling-lines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/profiling-lines.md b/episodes/profiling-lines.md index 5fb82f4..e93bb0e 100644 --- a/episodes/profiling-lines.md +++ b/episodes/profiling-lines.md @@ -246,7 +246,7 @@ The `-r` argument passed to `kernprof` (or `line_profiler`) enables rich output, ## line_profiler Inside Notebooks -If you're more familiar with writing Python inside Jupyter notebooks, you might not feel comfortable using the command line for profiling. Instead, `line_profiler` can be called directly from inside notebooks. It is still necessary for the code to be profiled to be placed within a function. +If you're more familiar with writing Python inside Jupyter notebooks you can, as with `snakeviz`, use `line_profiler` directly from inside notebooks. However it is still necessary for the code you wish to profile to be placed within a function. First `line_profiler` must be installed and it's extension loaded. From d2d069e8cc919c4bcf5408771859b99429b54d24 Mon Sep 17 00:00:00 2001 From: Robert Chisholm Date: Fri, 22 Mar 2024 15:22:41 +0000 Subject: [PATCH 5/5] Neil comment --- episodes/profiling-functions.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/episodes/profiling-functions.md b/episodes/profiling-functions.md index b9e23e5..6677d19 100644 --- a/episodes/profiling-functions.md +++ b/episodes/profiling-functions.md @@ -331,6 +331,14 @@ In this simple example the execution is fairly evenly balanced between all of th Below the icicle diagram, there is a table similar to the default output from `cProfile`. However, in this case you can sort the columns by clicking their headers and filter the rows shown by entering a filename in the search box. This allows built-in methods to be hidden, which can make it easier to highlight optimisation priorities. +**Notebooks** + +If you followed along inside a notebook it might look like this: + +![The worked example inside a notebook.](episodes/fig/snakeviz-worked-example-notebook.png){alt="A Jupyter notebook showing the worked example profiled with snakeviz." width=80%} + +Because notebooks operate by creating temporary Python files, the filename (shown `1378276351.py` above) and line numbers are not too useful should still be helpful. The function names follow the temporary file name in parentheses, e.g. `1378276351.py:3(a_1)`, `1378276351.py:9(b_1)` and so forth. + ::::::::::::::::::::::::::::::::::::: callout ## Sunburst @@ -342,16 +350,10 @@ This provides the same information as "Icicle", however the rows are instead cir The sunburst visualisation displays less text on the boxes, so it can be harder to interpret. However, it increases the visibility of boxes further from the root call. -![An sunburst visualisation provided by `snakeviz` for the worked example's Python code.](episodes/fig/snakeviz-worked-example-sunburst.png){alt="The snakeviz sunburst visualisation for the worked example Python code." width=50%} +![An sunburst visualisation provided by `snakeviz` for the worked example's Python code.](episodes/fig/snakeviz-worked-example-sunburst.png){alt="A sunburst visualisation for the worked example Python code." width=50%} ::::::::::::::::::::::::::::::::::::::::::::: -If you followed along inside a notebook it might look like this: - -![The worked example inside a notebook.](episodes/fig/snakeviz-worked-example-notebook.png){alt="A Jupyter notebook showing the worked example profiled with snakeviz." width=80%} - -Because notebooks operate by creating temporary Python files, the filename (shown `1378276351.py` above) and line numbers are not too useful should still be helpful. The function names follow the temporary file name in parentheses, e.g. `1378276351.py(a_1)` `1378276351.py(b_1)` and so forth. - ## Exercises