| #!/bin/bash |
| # Copyright 2021 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| # Run a Python (Colab/Jupyter) notebook in an isolated virtual environment. |
| # Fails if the notebook has errors. |
| # |
| # Usage: run_python_notebook.sh /path/to/notebook.ipynb |
| # |
| # This is intended for use on continuous integration servers within a Docker |
| # container and as a reference for users, but it can also be run locally. |
| |
| set -e |
| set -x |
| |
| # Run under a virtual environment to isolate Python packages. |
| # |
| # This is informed by Docker workarounds and we're walking a thin line here. |
| # --system-site-packages: leverage system packages for common notebook |
| # requirements (tensorflow, numpy, and other large packages) |
| # --clear: delete existing venv contents (package installs within notebooks) |
| # |
| # See also: |
| # * https://stackoverflow.com/a/63805343 |
| # * https://askubuntu.com/a/897004 |
| python3 -m venv .notebook.venv --system-site-packages --clear |
| source .notebook.venv/bin/activate 2> /dev/null |
| trap "deactivate 2> /dev/null" EXIT |
| |
| # Update pip within the venv (you'd think this wouldn't be needed, but it is). |
| python3 -m pip install --quiet --upgrade pip |
| |
| # Install general Jupyter notebook requirements, ignoring any system versions |
| # This ensures that the `jupyter` command runs within the venv. |
| # |
| # See also: |
| # * https://stackoverflow.com/q/42449814 |
| # * https://stackoverflow.com/a/19459977 |
| python3 -m pip install --ignore-installed --quiet \ |
| jupyter_core nbconvert ipykernel |
| |
| # Install common notebook requirements, reusing system versions if possible. |
| python3 -m pip install --quiet \ |
| numpy \ |
| matplotlib \ |
| tensorflow \ |
| tensorflow_hub \ |
| bottleneck |
| |
| # Tone down TensorFlow's logging by default. |
| export TF_CPP_MIN_LOG_LEVEL=${TF_CPP_MIN_LOG_LEVEL:-2} |
| |
| # Run the notebook, discarding output (still fails if an exception is thrown). |
| jupyter nbconvert --to notebook --execute $1 --stdout > /dev/null |