-
Olivier Benz authored
- CUDA images (amd64): Update TensorRT to v10.8.0.43
Olivier Benz authored- CUDA images (amd64): Update TensorRT to v10.8.0.43
CUDA-based JupyterLab R docker stack
GPU accelerated, multi-arch (linux/amd64
, linux/arm64/v8
) docker images:
glcr.b-data.ch/jupyterlab/cuda/r/base
glcr.b-data.ch/jupyterlab/cuda/r/tidyverse
glcr.b-data.ch/jupyterlab/cuda/r/verse
glcr.b-data.ch/jupyterlab/cuda/r/geospatial
-
glcr.b-data.ch/jupyterlab/cuda/r/qgisprocess
(versions ≥ 4.3.0)
Images available for R versions ≥ 4.2.2.
jupyterlab/cuda/r/verse
at
https://demo.cuda.jupyter.b-data.ch.
Build chain
The same as the JupyterLab R docker stack.
Features
The same as the JupyterLab R docker stack plus
- CUDA runtime,
CUDA math libraries,
NCCL and
cuDNN
- including development libraries and headers
- TensortRT and TensorRT plugin libraries
- including development libraries and headers
- NVBLAS-enabled
R_
andRscript_
- using standard R terminal instead of radian in code-server
Subtags
The same as the JupyterLab R docker stack.
Table of Contents
Prerequisites
The same as the JupyterLab R docker stack plus
- NVIDIA GPU
- NVIDIA Linux driver
- NVIDIA Container Toolkit
Use driver version 535 (Long Term Support Branch) with NVIDIA Data Center GPUs or select NGC-Ready NVIDIA RTX boards to ensure forward compatibility until June 2026.
Install
To install the NVIDIA Container Toolkit, follow the instructions for your platform:
Usage
Build image (base)
latest:
cd base && docker build \
--build-arg BASE_IMAGE=ubuntu \
--build-arg BASE_IMAGE_TAG=22.04 \
--build-arg BUILD_ON_IMAGE=glcr.b-data.ch/cuda/r/ver \
--build-arg R_VERSION=4.4.2 \
--build-arg CUDA_IMAGE_FLAVOR=devel \
-t jupyterlab/cuda/r/base \
-f latest.Dockerfile .
version:
cd base && docker build \
--build-arg BASE_IMAGE=ubuntu \
--build-arg BASE_IMAGE_TAG=22.04 \
--build-arg BUILD_ON_IMAGE=glcr.b-data.ch/cuda/r/ver \
--build-arg CUDA_IMAGE_FLAVOR=devel \
-t jupyterlab/cuda/r/base:MAJOR.MINOR.PATCH \
-f MAJOR.MINOR.PATCH.Dockerfile .
For MAJOR.MINOR.PATCH
≥ 4.2.2
.
Create home directory
Create an empty directory using docker:
docker run --rm \
-v "${PWD}/jupyterlab-jovyan":/dummy \
alpine chown 1000:100 /dummy
It will be bind mounted as the JupyterLab user's home directory and
automatically populated.
Run container
self built:
docker run -it --rm \
--gpus '"device=all"' \
-p 8888:8888 \
-u root \
-v "${PWD}/jupyterlab-jovyan":/home/jovyan \
-e NB_UID=$(id -u) \
-e NB_GID=$(id -g) \
-e CHOWN_HOME=yes \
-e CHOWN_HOME_OPTS='-R' \
jupyterlab/cuda/r/base[:MAJOR.MINOR.PATCH]
from the project's GitLab Container Registries:
docker run -it --rm \
--gpus '"device=all"' \
-p 8888:8888 \
-u root \
-v "${PWD}/jupyterlab-jovyan":/home/jovyan \
-e NB_UID=$(id -u) \
-e NB_GID=$(id -g) \
-e CHOWN_HOME=yes \
-e CHOWN_HOME_OPTS='-R' \
IMAGE[:MAJOR[.MINOR[.PATCH]]]
IMAGE
being one of
glcr.b-data.ch/jupyterlab/cuda/r/base
glcr.b-data.ch/jupyterlab/cuda/r/tidyverse
glcr.b-data.ch/jupyterlab/cuda/r/verse
glcr.b-data.ch/jupyterlab/cuda/r/geospatial
glcr.b-data.ch/jupyterlab/cuda/r/qgisprocess
The use of the -v
flag in the command mounts the empty directory on the host
(${PWD}/jupyterlab-jovyan
in the command) as /home/jovyan
in the container.
-e NB_UID=$(id -u) -e NB_GID=$(id -g)
instructs the startup script to switch
the user ID and the primary group ID of ${NB_USER}
to the user and group ID of
the one executing the command.
-e CHOWN_HOME=yes -e CHOWN_HOME_OPTS='-R'
instructs the startup script to
recursively change the ${NB_USER}
home directory owner and group to the
current value of ${NB_UID}
and ${NB_GID}
.
The server logs appear in the terminal.
Using Podman (rootless mode, 4.3.2+)
Create an empty home directory:
mkdir "${PWD}/jupyterlab-root"
Use the following command to run the container as root
:
podman run -it --rm \
--device 'nvidia.com/gpu=all' \
-p 8888:8888 \
-u root \
-v "${PWD}/jupyterlab-root":/home/root \
-e NB_USER=root \
-e NB_UID=0 \
-e NB_GID=0 \
-e NOTEBOOK_ARGS="--allow-root" \
IMAGE[:MAJOR[.MINOR[.PATCH]]]
Using Docker Desktop
Creating a home directory might not be required. Also
docker run -it --rm \
--gpus '"device=all"' \
-p 8888:8888 \
-v "${PWD}/jupyterlab-jovyan":/home/jovyan \
IMAGE[:MAJOR[.MINOR[.PATCH]]]
might be sufficient.
Similar projects
What makes this project different:
- Multi-arch:
linux/amd64
,linux/arm64/v8
- Derived from
nvidia/cuda:12.8.0-devel-ubuntu22.04
- including development libraries and headers
- TensortRT and TensorRT plugin libraries
- including development libraries and headers
- IDE: code-server next to JupyterLab
- Just Python – no Conda / Mamba
See Notes for tweaks, settings, etc.