Starting a Jupyter Notebook
The instructions below will walk you through the process of launching a Jupyter Notebook workflow using the Fuzzball workflow catalog. The workflow catalog will help you generate, validate, and submit a Fuzzfile which runs a Jupyter Notebook. By default, this workflow uses a Jupyter Notebook container from quay.io.
You can start this workflow using either the web UI or the CLI.
If you click “Workflow Catalog”, you will see a page of workflow templates you use to create fuzzfiles and launch workflows. Find the “Jupyter Notebook” tile with the CIQ badge and click “Run”.

You will be prompted with a pop-up showing template parameters which you can modify. If you’d like to accept the default values, you can click “Validate” which will validate the Fuzzfile generated using the input specified.

You can proceed to launching the job by clicking “Continue”.

You will be prompted to provide an optional descriptive name for your workflow.

Now you can click on “Start Workflow” in the lower right corner of the dialog box and your workflow will be submitted. If you click “Go to Status” you can view the workflow status page. The screenshot below shows the status page for a Jupyter Notebook workflow submission.

To retrieve logs produced by this workflow, select the jupyter job within the workflow, and
click the “Logs” option on the right.

To run this workflow through the CLI you will need access to the Fuzzball CLI. You can install it using the Fuzzball CLI installation instructions.
First, you can create a values file values.yaml to populate the Jupyter Notebook workflow template
using the command below. You can modify the parameters to your desired values or use the defaults
below.
$ cat >values.yaml<<EOF
values:
- name: "Type"
display_name: "Notebook type. Options: base, minimal, r, julia, scipy, tensorflow, datascience, pyspark, all-spark, pytorch (https://quay.io/organization/jupyter)"
string_value: "scipy"
- name: "Cores"
display_name: "How many CPU cores to allocate."
uint_value: 2
- name: "Memory"
display_name: "How much memory to allocate."
string_value: "1GiB"
- name: "Exclusive"
display_name: "Disallow other jobs from using the same node/instance."
bool_value: false
- name: "Timeout"
display_name: "Maximum runtime."
string_value: "12h"
- name: "Volume"
display_name: "Where to store notebook data."
string_value: "volume://user/ephemeral"
EOF
Next, you will need to find the workflow template ID. The command below lists workflow templates
provided by CIQ. The ID of the Jupyter Notebook workflow template shown in the output below is
00000002-aaaa-bbbb-cccc-dddddddddddd.
$ fuzzball application list -f "(provider: \"CIQ\")"
NAME | ID | OWNER | PROVIDER | UPDATETIME | DISABLED
Hello World | 00000001-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
Jupyter Notebook | 00000002-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
Jupyter Notebook (VDI) | 00000003-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
ParaView | 00000004-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
Xfce Desktop Environment | 00000005-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
LAMMPS (CPU) | 00000006-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
LAMMPS (GPU) | 00000007-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
BLAST | 00000008-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
Stable Diffusion Text to Image | 00000009-aaaa-bbbb-cccc-dddddddddddd | PROVIDER | CIQ | 2025-03-06 05:00:00PM | false
You can generate a Fuzzfile using the workflow ID and the values file (values.yaml) we created in the first step using the command below.
fuzzball application render-application 00000002-aaaa-bbbb-cccc-dddddddddddd values.yaml > jupyter-notebook.fz
You can start start this workflow using the CLI by running the following command:
$ fuzzball workflow start jupyter-notebook.fz
Workflow "aa3b04f0-f245-4032-a7b1-5cef0acfaf6c" started.
You can monitor the workflow’s status by running the following command:
$ fuzzball workflow describe <workflow UUID>
Name: jupyter-notebook.fz
Email: bphan@ciq.co
UserId: e554e134-bd2d-455b-896e-bc24d8d9f81e
Status: STAGE_STATUS_STARTED
Created: 2024-06-18 02:42:53PM
Started: 2024-06-18 02:42:53PM
Finished: N/A
Error:
Stages:
KIND | STATUS | NAME | STARTED | FINISHED
Workflow | Started | aa3b04f0-f245-4032-a7b1-5cef0acfaf6c | 2024-06-18 02:42:53PM | N/A
Volume | Finished | jupyter-volume | 2024-06-18 02:42:54PM | 2024-06-18 02:43:14PM
Image | Finished | docker://quay.io/jupyter/minimal-notebook:... | 2024-06-18 02:42:54PM | 2024-06-18 02:46:35PM
Job | Started | jupyter | 2024-06-18 02:46:50PM | N/A
You can view outputs logged by the workflow, by executing the following command:
$ fuzzball workflow log <workflow UUID> jupyter
[W 2024-06-18 21:46:59.371 ServerApp] A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.
[I 2024-06-18 21:46:59.374 ServerApp] jupyter_lsp | extension was successfully linked.
[I 2024-06-18 21:46:59.381 ServerApp] jupyter_server_terminals | extension was successfully linked.
[W 2024-06-18 21:46:59.383 LabApp] 'token' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2024-06-18 21:46:59.388 ServerApp] ServerApp.token config is deprecated in 2.0. Use IdentityProvider.token.
[I 2024-06-18 21:46:59.388 ServerApp] jupyterlab | extension was successfully linked.
[I 2024-06-18 21:46:59.392 ServerApp] nbclassic | extension was successfully linked.
[I 2024-06-18 21:46:59.408 ServerApp] notebook | extension was successfully linked.
[I 2024-06-18 21:46:59.410 ServerApp] Writing Jupyter server cookie secret to /home/jovyan/.local/share/jupyter/runtime/jupyter_cookie_secret
[I 2024-06-18 21:47:00.384 ServerApp] notebook_shim | extension was successfully linked.
[W 2024-06-18 21:47:00.498 ServerApp] All authentication is disabled. Anyone who can connect to this server will be able to run code.
[I 2024-06-18 21:47:00.500 ServerApp] notebook_shim | extension was successfully loaded.
[I 2024-06-18 21:47:00.510 ServerApp] jupyter_lsp | extension was successfully loaded.
[I 2024-06-18 21:47:00.515 ServerApp] jupyter_server_terminals | extension was successfully loaded.
[I 2024-06-18 21:47:00.519 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.11/site-packages/jupyterlab
[I 2024-06-18 21:47:00.519 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 2024-06-18 21:47:00.520 LabApp] Extension Manager is 'pypi'.
[I 2024-06-18 21:47:00.546 ServerApp] jupyterlab | extension was successfully loaded.
[I 2024-06-18 21:47:00.555 ServerApp] nbclassic | extension was successfully loaded.
[I 2024-06-18 21:47:00.563 ServerApp] notebook | extension was successfully loaded.
[I 2024-06-18 21:47:00.563 ServerApp] Serving notebooks from local directory: /data
[I 2024-06-18 21:47:00.563 ServerApp] Jupyter Server 2.14.1 is running at:
[I 2024-06-18 21:47:00.564 ServerApp] http://jupyter:8888/tree
[I 2024-06-18 21:47:00.564 ServerApp] http://127.0.0.1:8888/tree
[I 2024-06-18 21:47:00.564 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 2024-06-18 21:47:01.814 ServerApp] Skipped non-installed server(s): bash-language-server, dockerfile-language-server-nodejs, javascript-typescript-langserver, jedi-language-server, julia-language-server, pyright, python-language-server, python-lsp-server, r-languageserver, sql-language-server, texlab, typescript-language-server, unified-language-server, vscode-css-languageserver-bin, vscode-html-languageserver-bin, vscode-json-languageserver-bin, yaml-language-server
...