Skip to content

Add Nvidia MPS component for managing Nvidia GPU resources#647

Open
mishaschwartz wants to merge 9 commits intomasterfrom
nvidia-mps
Open

Add Nvidia MPS component for managing Nvidia GPU resources#647
mishaschwartz wants to merge 9 commits intomasterfrom
nvidia-mps

Conversation

@mishaschwartz
Copy link
Collaborator

@mishaschwartz mishaschwartz commented Feb 10, 2026

Overview

This creates a container running Nvidia's Multi Process Service (MPS) which helps manage multi-user GPU access.
It runs an alternative CUDA interface which manages resource allocation when multiple processes are running simultaneously on the same GPU.
It also allows the node admin to set additional per-user limits through the JUPYTERHUB_RESOURCE_LIMITS variable which configures Jupyterlab containers:

  • "gpu_device_mem_limit": sets the CUDA_MPS_PINNED_DEVICE_MEM_LIMIT environment variable
  • "gpu_active_thread_percentage": sets the CUDA_MPS_ACTIVE_THREAD_PERCENTAGE environment variable

For example, the following will give all users in the group named "users" access to three GPUs in their Jupyterlab container. On the first one (id = 0) only 1GB of memory is available, on the second (id = 1) only 5GB, and on the third (id = 2) only 10GB. Additionally, the container will be able to use 10% of available threads on the GPUs.

export JUPYTERHUB_RESOURCE_LIMITS='
[{
      "type": "group", 
      "name": "users", 
      "limits": {
        "gpu_ids": ["0", "1", "2"], 
        "gpu_count": 3, 
        "gpu_device_mem_limit": "0=1G,1=5G,2=10G", 
        "gpu_active_thread_percentage": "10"
      }
}]
'

Note that leaving any of these limits unset will default to allowing the user full access to the given resource.

Update CustomDockerSpawner to make pre spawn hooks and resource limits more configurable

Introduce pre_spawn_hooks and resource_limit_callbacks attributes to the CustomDockerSpawner class which
can be used to further customize the CustomDockerSpawner from optional components. This gives us a way to
add additional functionality without having to directly modify existing functions which may be overwritten by the
user when they configure the spawner in JUPYTERHUB_CONFIG_OVERRIDE.

This also introduces the JUPYTERHUB_CONFIG_OVERRIDE_INTERNAL variable which is identical to the
JUPYTERHUB_CONFIG_OVERRIDE variable except that it is intended to only be set by other components (not be the
user in the local environment file). This allows components to customize Jupyterhub deployments without interfering
with custom settings created by the user. Note that JUPYTERHUB_CONFIG_OVERRIDE has precedence over
JUPYTERHUB_CONFIG_OVERRIDE_INTERNAL.

Fixes some examples that showed that gpu_ids could be given as integers if they were meant to be indexes. However, due to limitation of docker they must be strings. This modifies examples so that it is clear that strings must be used and also updates the code to ensure that string values are only ever passed to docker when spawning a new jupyterlab server.

Non-breaking changes

  • Adds new additional nvidia-multi-process-service component
  • documentation fixes
  • make CustomDockerSpawner more configurable
  • make jupyterhub configuration more configurable by other components in a way that doesn't interfere with user-defined configurations

Breaking changes

  • None

Related Issue / Discussion

Additional Information

CI Operations

birdhouse_daccs_configs_branch: master
birdhouse_skip_ci: false

@github-actions github-actions bot added documentation Improvements or additions to documentation ci/operations Continuous Integration components component/jupyterhub Related to JupyterHub as development frontend with notebooks ci/tests Issues or changes related to tests scripts labels Feb 10, 2026
@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4052/
ResultFAILURE

BIRDHOUSE_DEPLOY_BRANCH : nvidia-mps
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-91.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/665/

NOTEBOOK TEST RESULTS
    
[2026-02-10T21:07:36.608Z] ============================= test session starts ==============================
[2026-02-10T21:07:36.608Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-10T21:07:36.608Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master
[2026-02-10T21:07:36.608Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-10T21:07:36.608Z] collected 538 items
[2026-02-10T21:07:36.608Z] 
[2026-02-10T21:07:44.694Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-10T21:09:09.743Z] notebooks-auth/test_cowbird_jupyter.ipynb ........F.                     [  5%]
[2026-02-10T21:09:09.743Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-10T21:40:30.156Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-10T21:53:12.411Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-10T21:54:08.640Z] .                                                                        [ 10%]
[2026-02-10T21:54:13.070Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-10T21:54:20.366Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-10T22:04:34.485Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ...........         [ 14%]
[2026-02-10T22:04:34.745Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-10T22:04:43.042Z] ...............                                                          [ 17%]
[2026-02-10T22:04:53.977Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-10T22:05:02.050Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-10T22:05:16.093Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-10T22:05:23.507Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-10T22:05:27.823Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-10T22:08:53.257Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-10T22:10:02.515Z] .............                                                            [ 27%]
[2026-02-10T22:10:06.335Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-10T22:10:08.281Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-10T22:10:36.444Z] .................                                                        [ 32%]
[2026-02-10T22:10:43.446Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-10T22:10:44.840Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-10T22:11:07.411Z] .........                                                                [ 35%]
[2026-02-10T22:11:17.143Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-10T22:11:27.146Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-10T22:11:28.536Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-10T22:11:33.727Z] .....                                                                    [ 39%]
[2026-02-10T22:12:20.444Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-10T22:12:51.620Z] ............                                                             [ 42%]
[2026-02-10T22:13:18.180Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-10T22:13:57.188Z] .....s.                                                                  [ 43%]
[2026-02-10T22:14:05.320Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-10T22:14:10.897Z] ..                                                                       [ 44%]
[2026-02-10T22:14:20.889Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-10T22:15:30.441Z] .........                                                                [ 46%]
[2026-02-10T22:15:40.433Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-10T22:17:35.609Z] ....                                                                     [ 47%]
[2026-02-10T22:17:38.153Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-10T22:17:44.836Z] ....                                                                     [ 48%]
[2026-02-10T22:17:49.030Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-10T22:17:59.687Z] .....                                                                    [ 49%]
[2026-02-10T22:18:03.901Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-10T22:18:08.898Z] .............                                                            [ 51%]
[2026-02-10T22:18:15.468Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-10T22:18:15.727Z] ......                                                                   [ 53%]
[2026-02-10T22:18:26.028Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-10T22:18:28.563Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-10T22:18:50.747Z] ......                                                                   [ 56%]
[2026-02-10T22:18:52.650Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-10T22:19:03.313Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-10T22:19:03.313Z] ..                                                                       [ 58%]
[2026-02-10T22:19:09.901Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-10T22:19:13.514Z] .............                                                            [ 61%]
[2026-02-10T22:20:51.580Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-10T22:20:51.580Z]                                                                          [ 63%]
[2026-02-10T22:20:56.860Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-10T22:21:03.552Z] ...............                                                          [ 67%]
[2026-02-10T22:21:10.133Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-10T22:21:18.166Z] .........                                                                [ 69%]
[2026-02-10T22:21:30.123Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-10T22:21:36.937Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-10T22:21:39.526Z] ...                                                                      [ 71%]
[2026-02-10T22:21:46.105Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-10T22:29:30.366Z] ...............                                                          [ 74%]
[2026-02-10T22:29:35.650Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-10T22:29:43.168Z] ....                                                                     [ 75%]
[2026-02-10T22:30:22.423Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-10T22:30:32.719Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-10T22:30:58.949Z] ....                                                                     [ 78%]
[2026-02-10T22:31:07.079Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-10T22:31:18.336Z] .......                                                                  [ 80%]
[2026-02-10T22:31:45.186Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-10T22:31:45.186Z] .                                                                        [ 81%]
[2026-02-10T22:31:53.308Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-10T22:32:14.199Z] .......                                                                  [ 82%]
[2026-02-10T22:32:21.022Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-10T22:32:40.488Z] ....                                                                     [ 84%]
[2026-02-10T22:32:51.768Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-10T22:32:57.565Z] ..                                                                       [ 85%]
[2026-02-10T22:33:20.455Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-10T22:33:48.963Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-10T22:33:56.475Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-10T22:34:12.832Z] ..........                                                               [ 89%]
[2026-02-10T22:34:32.996Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-10T22:34:40.196Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-10T22:34:46.760Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-10T22:39:22.799Z] .............Fxxxxxx                                                     [ 96%]
[2026-02-10T22:39:25.269Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-10T22:41:56.857Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-10T22:41:56.858Z] 
[2026-02-10T22:41:56.858Z] =================================== FAILURES ===================================
    
  

Copy link
Member

@fmigneault fmigneault left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really neat features!

"gpu_ids": ["0", "1", "2"],
"gpu_count": 3,
"gpu_device_mem_limit": "0=1G,1=5G,2=10G",
"gpu_active_thread_percentage": "10"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the <gpu-id>=<thread-count>,... variant works for this also?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell no... the Nvidia documentation is pretty horrendous but all the documentation and examples I've seen only shows that you can specify limits for specific GPUs for the memory limit, not the active thread percentage.

CHANGES.md Outdated
user when they configure the spawner in `JUPYTERHUB_CONFIG_OVERRIDE`.

This also introduces the `JUPYTERHUB_CONFIG_OVERRIDE_INTERNAL` variable which is identical to the
`JUPYTERHUB_CONFIG_OVERRIDE` variable except that it is intended to only be set by other components (not be the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo - not "by"

Also, is there any safeguard to establish to ensure users do not employ it? Do we let it as is without checks, letting users "break it at their own risk" as long as there are enough warnings in the docs about it?

Taking inspiration from the readonly used for MPS, maybe that could be set after loading all component's envs and just before loading the user env.local?

And finally, should something be indicated about components using JUPYTERHUB_CONFIG_OVERRIDE_INTERNAL to add COMPONENT_DEPENDENCIES with components/jupyterhub, or ensuring the nested inclusion of JUPYTERHUB_CONFIG_OVERRIDE_INTERNAL? The COMPONENT_DEPENDENCIES are not applied in the current MPS default.env. I think nothing actually ensures the resolution order beside pure sorted naming of components? If jupyterhub happened to be loaded toward the end because of another dependency, wouldn't its default override all others previously set?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, is there any safeguard to establish to ensure users do not employ it?

We definitely could do that. There are lots of variables that are for internal use only that we don't technically stop users from clobbering. I'll open an issue about that (see #649), it can be part of the general discussion about how we treat variables that we started in #629.

I think nothing actually ensures the resolution order beside pure sorted naming of components?

If there are no explicit dependencies then they'll follow the order that they're defined in BIRDHOUSE_EXTRA_CONF_DIRS.

If jupyterhub happened to be loaded toward the end because of another dependency, wouldn't its default override all others previously set?

Yes that's a good point, I'll correct for that.

Comment on lines +1 to +3
if [ "$(nvidia-smi --query-gpu=compute_mode --format=csv,noheader | grep -vc 'Exclusive_Process')" -ne 0 ]; then
log WARN "Nvidia GPUs with compute mode set to something other than EXCLUSIVE_PROCESS detected. We recommend you set the compute mode to EXCLUSIVE_PROCESS when enabling nvidia's Multi Process Service (MPS)."
fi
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is that a hard-requirement for MPS to work, or some other efficiency reason?
It is not clear why it is recommended without context (I haven't played with that service).

If it is a hard-requirement, maybe it should not WARN, but ERROR (and exit?). Depends on the reason.

Activating this component without a GPU/Nvidia-SMI will cause a command error. That is fine since it won't work anyway, but maybe the error should be more gracefully handled?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not a hard requirement which is why it's only a warning. Again, the documentation is awful so I'm only 90% sure this is the reason:

  • MPS runs a server in a process for each GPU that manages resource allocation on the GPU
  • By setting EXCLUSIVE_PROCESS we ensure that only that server process has direct access to the GPU and every cuda client process has to go through that server process
  • By setting it to the default value, another client process could access the GPU directly, sidestepping the MPS entirely.

There are valid use-cases for running MPS on a GPU without EXCLUSIVE_PROCESS set but those are pretty niche and I don't know enough to fully understand the implications right now.

Activating this component without a GPU/Nvidia-SMI will cause a command error.

True, I'll add better error handling for this

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK thanks for the details.

Comment on lines +15 to +17
- driver: nvidia
count: all
capabilities: [gpu]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be configurable as well? For example, some GPUs reserved for Jupyter and others reserved for other operations (eg: Weaver Workers) ?

Is it better to have all GPU-enabled operations connected to this MPS regardless of the way they are used, and have limited gpu_ids defined for jupyter vs others, or instead, have multiple sub-GPU partitions where what this MPS "sees" corresponds to 100% of a given sub-partition and its jupyter-dockerspawner resources do not need gpu_ids (or they do, but relative to that %sub-GPU partition) ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to say that it's better to make everything go through the MPS and then divide up the GPUs when they're assigned to containers (jupyterlab or weaver workers).

The only exception I can think of is if a user has a subset of GPUs that they want to use for birdhouse and another set that they want to use for something else entirely on the same machine. I guess I can make this configurable but if a user is doing something other than the default they have to really really know what they're doing so they don't break things.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually you know what... the problem here is actually how docker compose configures this. The count and device_ids keys are mutually exclusive and you can't use variable substitution to add lists.

The only way to to this would be to create an other optional component with a docker-compose-extra.yml file that contained something like:

  mps:
    deploy:
      resources:
        reservations:
          devices: !override
            - capabilities: [gpu]
              driver: nvidia
              device_ids: ["0", "1"]

If you want to only allow a subset of GPUs.

For now I'll document this with a comment but actually configuring this would require a whole other component.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK to address in another PR with documentation for the time being.

Indeed, the count/device_ids conflict is an important consideration. In my case, I would prioritize weaver-workers over jupyter using GPUs, probably giving a few lower-VRAM ones to Jupyter, and leaving the VRAM-heavy computations to dedicated weaver-workers. Since weaver-workers launch dockers via docker-proxy, I am not sure that I could use count, since I would need to pre-partition the specific devices for each service.

I guess that also raises another question. How are other non-Jupyter/DockerSpawner services supposed to map with mps service to employ the GPUs it manages? Is there a specific set of options to configure (passing the ipc ID or whatnot?). The connection between mps and jupyterhub is somewhat hard to interpret because of the intermediate DockerSpawner layer.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How are other non-Jupyter/DockerSpawner services supposed to map with mps service to employ the GPUs it manages?

Yeah that's going to be the subject of a future PR. But to summarize here, you'd need to (for all containers that access GPUs):

  • ensure that it's using the ipc from the mps container
  • has the nvidia_mps tmpfs mounted to /tmp/nvidia-mps
  • has the gpu devices enabled on the container

There's a reference to this in the PR but I find that this example docker compose project outlines the setup nicely:

https://gitlab.com/nvidia/container-images/samples/-/blob/master/mps/docker-compose.yml

(note that the syntax on that file is slightly outdated but it gives the right idea)

@crim-jenkins-bot
Copy link
Collaborator

E2E Test Results

DACCS-iac Pipeline Results

Build URL : http://daccs-jenkins.crim.ca:80/job/DACCS-iac-birdhouse/4054/
ResultSUCCESS

BIRDHOUSE_DEPLOY_BRANCH : nvidia-mps
DACCS_IAC_BRANCH : master
DACCS_CONFIGS_BRANCH : master
PAVICS_E2E_WORKFLOW_TESTS_BRANCH : master
PAVICS_SDI_BRANCH : master

DESTROY_INFRA_ON_EXIT : true
PAVICS_HOST : https://host-140-91.rdext.crim.ca

PAVICS-e2e-workflow-tests Pipeline Results

Tests URL : http://daccs-jenkins.crim.ca:80/job/PAVICS-e2e-workflow-tests/job/master/667/

NOTEBOOK TEST RESULTS
    
[2026-02-11T15:53:51.974Z] ============================= test session starts ==============================
[2026-02-11T15:53:51.974Z] platform linux -- Python 3.11.12, pytest-8.3.5, pluggy-1.5.0
[2026-02-11T15:53:51.974Z] rootdir: /home/jenkins/agent/workspace/PAVICS-e2e-workflow-tests_master
[2026-02-11T15:53:51.974Z] plugins: anyio-4.9.0, dash-3.0.3, nbval-0.11.0, tornasync-0.6.0.post2, xdist-3.6.1
[2026-02-11T15:53:51.974Z] collected 538 items
[2026-02-11T15:53:51.974Z] 
[2026-02-11T15:53:59.912Z] notebooks-auth/geoserver.ipynb ..................                        [  3%]
[2026-02-11T15:54:59.952Z] notebooks-auth/test_cowbird_jupyter.ipynb ..........                     [  5%]
[2026-02-11T15:55:04.456Z] notebooks-auth/test_thredds.ipynb ...........                            [  7%]
[2026-02-11T15:56:43.377Z] pavics-sdi-master/docs/source/notebooks/CaSR_basic.ipynb .......         [  8%]
[2026-02-11T16:09:51.856Z] pavics-sdi-master/docs/source/notebooks/FAQ_dask_parallel.ipynb ..s..... [ 10%]
[2026-02-11T16:10:48.101Z] .                                                                        [ 10%]
[2026-02-11T16:10:51.734Z] pavics-sdi-master/docs/source/notebooks/WCS_example.ipynb ......         [ 11%]
[2026-02-11T16:10:58.133Z] pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb .....          [ 12%]
[2026-02-11T16:20:19.047Z] pavics-sdi-master/docs/source/notebooks/climex.ipynb ...........         [ 14%]
[2026-02-11T16:20:19.047Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb . [ 14%]
[2026-02-11T16:20:19.047Z] ...............                                                          [ 17%]
[2026-02-11T16:20:27.362Z] pavics-sdi-master/docs/source/notebooks/eccc-geoapi-xclim.ipynb .....    [ 18%]
[2026-02-11T16:20:36.485Z] pavics-sdi-master/docs/source/notebooks/esgf-dap.ipynb ....              [ 18%]
[2026-02-11T16:20:51.220Z] pavics-sdi-master/docs/source/notebooks/forecasts.ipynb ......           [ 20%]
[2026-02-11T16:20:57.815Z] pavics-sdi-master/docs/source/notebooks/opendap.ipynb .......            [ 21%]
[2026-02-11T16:21:02.568Z] pavics-sdi-master/docs/source/notebooks/pavics_thredds.ipynb .....       [ 22%]
[2026-02-11T16:23:58.774Z] pavics-sdi-master/docs/source/notebooks/regridding.ipynb ............... [ 25%]
[2026-02-11T16:25:08.787Z] .............                                                            [ 27%]
[2026-02-11T16:25:15.445Z] pavics-sdi-master/docs/source/notebooks/rendering.ipynb ....             [ 28%]
[2026-02-11T16:25:17.652Z] pavics-sdi-master/docs/source/notebooks/subset-user-input.ipynb ........ [ 29%]
[2026-02-11T16:25:42.196Z] .................                                                        [ 32%]
[2026-02-11T16:25:50.522Z] pavics-sdi-master/docs/source/notebooks/subsetting.ipynb .....           [ 33%]
[2026-02-11T16:25:51.909Z] pavics-sdi-master/docs/source/notebook-components/weaver_example.ipynb . [ 34%]
[2026-02-11T16:26:02.166Z] .........                                                                [ 35%]
[2026-02-11T16:26:13.512Z] finch-main/docs/source/notebooks/dap_subset.ipynb ...........            [ 37%]
[2026-02-11T16:26:23.747Z] finch-main/docs/source/notebooks/finch-usage.ipynb ......                [ 38%]
[2026-02-11T16:26:24.690Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-1DataAccess.ipynb . [ 39%]
[2026-02-11T16:26:29.723Z] .....                                                                    [ 39%]
[2026-02-11T16:27:08.471Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-2Subsetting.ipynb . [ 40%]
[2026-02-11T16:27:40.613Z] ............                                                             [ 42%]
[2026-02-11T16:28:02.574Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-3Climate-Indicators.ipynb . [ 42%]
[2026-02-11T16:28:29.155Z] .....s.                                                                  [ 43%]
[2026-02-11T16:28:37.294Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-4Ensembles.ipynb . [ 44%]
[2026-02-11T16:28:43.401Z] ..                                                                       [ 44%]
[2026-02-11T16:28:51.532Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb . [ 44%]
[2026-02-11T16:30:05.029Z] .........                                                                [ 46%]
[2026-02-11T16:30:15.029Z] PAVICS-landing-master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-6Regridding_Conversion.ipynb . [ 46%]
[2026-02-11T16:32:38.493Z] ....                                                                     [ 47%]
[2026-02-11T16:32:38.493Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-01_Intro.ipynb . [ 47%]
[2026-02-11T16:32:38.493Z] ....                                                                     [ 48%]
[2026-02-11T16:32:38.493Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-02_Calibration.ipynb . [ 48%]
[2026-02-11T16:32:47.672Z] .....                                                                    [ 49%]
[2026-02-11T16:32:51.874Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-03_Watershed_properties.ipynb . [ 49%]
[2026-02-11T16:32:58.267Z] .............                                                            [ 51%]
[2026-02-11T16:33:03.557Z] PAVICS-landing-master/content/notebooks/hydrology/PAVICStutorial_Hydrology-04_Time_series_analysis.ipynb . [ 52%]
[2026-02-11T16:33:04.332Z] ......                                                                   [ 53%]
[2026-02-11T16:33:14.614Z] raven-main/docs/source/notebooks/Region_selection.ipynb .........        [ 54%]
[2026-02-11T16:33:17.153Z] raven-main/docs/source/notebooks/Subset_climate_data_over_watershed.ipynb . [ 55%]
[2026-02-11T16:33:39.708Z] ......                                                                   [ 56%]
[2026-02-11T16:33:41.613Z] RavenPy-main/docs/notebooks/00_Introduction_to_JupyterLab.ipynb ......   [ 57%]
[2026-02-11T16:33:51.910Z] RavenPy-main/docs/notebooks/01_Getting_watershed_boundaries.ipynb ...... [ 58%]
[2026-02-11T16:33:51.910Z] ..                                                                       [ 58%]
[2026-02-11T16:33:58.473Z] RavenPy-main/docs/notebooks/02_Extract_geographical_watershed_properties.ipynb . [ 58%]
[2026-02-11T16:34:03.136Z] .............                                                            [ 61%]
[2026-02-11T16:35:41.773Z] RavenPy-main/docs/notebooks/03_Extracting_forcing_data.ipynb ........... [ 63%]
[2026-02-11T16:35:41.773Z]                                                                          [ 63%]
[2026-02-11T16:35:47.479Z] RavenPy-main/docs/notebooks/04_Emulating_hydrological_models.ipynb ..... [ 64%]
[2026-02-11T16:35:54.634Z] ...............                                                          [ 67%]
[2026-02-11T16:35:59.910Z] RavenPy-main/docs/notebooks/05_Advanced_RavenPy_configuration.ipynb .... [ 67%]
[2026-02-11T16:36:07.683Z] .........                                                                [ 69%]
[2026-02-11T16:36:19.080Z] RavenPy-main/docs/notebooks/06_Raven_calibration.ipynb ......            [ 70%]
[2026-02-11T16:36:26.862Z] RavenPy-main/docs/notebooks/07_Making_and_using_hotstart_files.ipynb ... [ 71%]
[2026-02-11T16:36:29.697Z] ...                                                                      [ 71%]
[2026-02-11T16:36:36.269Z] RavenPy-main/docs/notebooks/08_Getting_and_bias_correcting_CMIP6_data.ipynb . [ 71%]
[2026-02-11T16:44:30.346Z] ...............                                                          [ 74%]
[2026-02-11T16:44:36.919Z] RavenPy-main/docs/notebooks/09_Hydrological_impacts_of_climate_change.ipynb . [ 74%]
[2026-02-11T16:44:42.746Z] ....                                                                     [ 75%]
[2026-02-11T16:45:23.994Z] RavenPy-main/docs/notebooks/10_Data_assimilation.ipynb ........          [ 77%]
[2026-02-11T16:45:34.070Z] RavenPy-main/docs/notebooks/11_Climatological_ESP_forecasting.ipynb .... [ 77%]
[2026-02-11T16:46:00.546Z] ....                                                                     [ 78%]
[2026-02-11T16:46:08.680Z] RavenPy-main/docs/notebooks/12_Performing_hindcasting_experiments.ipynb . [ 78%]
[2026-02-11T16:46:19.238Z] .......                                                                  [ 80%]
[2026-02-11T16:46:45.384Z] RavenPy-main/docs/notebooks/Assess_probabilistic_flood_risk.ipynb ...... [ 81%]
[2026-02-11T16:46:45.960Z] .                                                                        [ 81%]
[2026-02-11T16:46:54.095Z] RavenPy-main/docs/notebooks/Comparing_hindcasts_and_ESP_forecasts.ipynb . [ 81%]
[2026-02-11T16:47:15.319Z] .......                                                                  [ 82%]
[2026-02-11T16:47:22.150Z] RavenPy-main/docs/notebooks/Distributed_hydrological_modelling.ipynb ... [ 83%]
[2026-02-11T16:47:38.985Z] ....                                                                     [ 84%]
[2026-02-11T16:47:52.183Z] RavenPy-main/docs/notebooks/Hydrological_realtime_forecasting.ipynb .... [ 84%]
[2026-02-11T16:47:59.024Z] ..                                                                       [ 85%]
[2026-02-11T16:48:21.908Z] RavenPy-main/docs/notebooks/Managing_Jupyter_Environments.ipynb ...      [ 85%]
[2026-02-11T16:48:55.308Z] RavenPy-main/docs/notebooks/Perform_Regionalization.ipynb .......        [ 87%]
[2026-02-11T16:49:00.887Z] RavenPy-main/docs/notebooks/Running_HMETS_with_CANOPEX_dataset.ipynb ... [ 87%]
[2026-02-11T16:49:18.811Z] ..........                                                               [ 89%]
[2026-02-11T16:49:38.987Z] RavenPy-main/docs/notebooks/Sensitivity_analysis.ipynb ......            [ 90%]
[2026-02-11T16:49:45.295Z] RavenPy-main/docs/notebooks/time_series_analysis.ipynb ...........       [ 92%]
[2026-02-11T16:49:53.424Z] RavenPy-main/docs/notebooks/paper/Perform_a_climate_change_impact_study_on_a_watershed.ipynb . [ 92%]
[2026-02-11T16:55:05.620Z] ....................                                                     [ 96%]
[2026-02-11T16:55:07.829Z] notebooks/hummingbird.ipynb ............                                 [ 98%]
[2026-02-11T16:57:39.463Z] notebooks/stress-tests.ipynb ......                                      [100%]
[2026-02-11T16:57:39.463Z] 
[2026-02-11T16:57:39.463Z] =============================== warnings summary ===============================
    
  

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/operations Continuous Integration components ci/tests Issues or changes related to tests scripts component/jupyterhub Related to JupyterHub as development frontend with notebooks documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants