Presets and setup#
A runtime starts from an image: one of Hesperus's presets, or an image of your own. On top of it, a setup installs your Python and system packages and runs a script, and a few basic tools are added when the image lacks them. This page explains how a preset's build is chosen for your machines, what an image of your own needs, and how the setup behaves.
Presets#
Notebooks and environments start from the same presets. Each is pinned by the digest of its image, so it is the same bytes on every machine. A preset may have several builds — NVIDIA (CUDA), AMD (ROCm), CPU — and the runtime gets the one for the machine's GPUs.
Preset (image) |
Console | What it has | Builds (download) |
|---|---|---|---|
python (default) |
Python + SciPy | Python 3.13, NumPy, pandas, SciPy, scikit-learn, matplotlib, seaborn, Jupyter | CPU 1.3 GB |
python-3.12 |
Python 3.12 | Plain Python 3.12 on Debian 12 | CPU 381 MB |
minimal |
Python (minimal) | Python 3.13 and Jupyter only | CPU 567 MB |
cuda |
CUDA dev | CUDA 12.9 toolkit (nvcc, headers) on Ubuntu 24.04, plus gcc, make, CMake, Python | NVIDIA 5.7 GB |
pytorch |
PyTorch | PyTorch 2.14, CUDA 12.6, cuDNN 9; AMD's PyTorch 2.13 on ROCm | NVIDIA 4.0 GB, AMD 20.5 GB |
ngc-pytorch |
NVIDIA NGC PyTorch | NGC PyTorch 26.09: CUDA 13, cuDNN, NCCL, TensorRT, Apex, Transformer Engine, JupyterLab | NVIDIA 11.7 GB |
huggingface |
Hugging Face | pytorch plus Transformers, PEFT, Datasets, Accelerate, bitsandbytes (pinned) |
as pytorch |
jax |
JAX | NGC JAX 26.09: JAX with CUDA, Flax, Optax, Orbax, JupyterLab | NVIDIA 8.9 GB |
tensorflow |
TensorFlow | TensorFlow 2.21 | NVIDIA 3.8 GB, CPU 616 MB |
spark |
Spark | Apache Spark 4.2, PySpark, Java 21, in local mode | CPU 803 MB |
rapids |
RAPIDS | RAPIDS 26.08 for CUDA 12: cuDF, cuML, cuGraph, Dask, JupyterLab | NVIDIA 6.4 GB |
vllm |
vLLM | vLLM 0.30, the release Eos serves with | NVIDIA 8.7 GB, AMD 11.7 GB |
datascience |
Data science | Python, R and Julia with their data science libraries, and Jupyter | CPU 2.4 GB |
pytorch-cuda |
PyTorch + SciPy (Jupyter) | PyTorch for CUDA 12 with the scipy stack and Jupyter | NVIDIA 5.3 GB |
tensorflow-cuda |
TensorFlow + SciPy (Jupyter) | TensorFlow 2.21 with CUDA, the scipy stack and Jupyter | NVIDIA 4.9 GB |
Sizes are the compressed x86-64 download of a machine's first start; later
starts on that machine reuse the image. ngc-pytorch and jax need an
NVIDIA driver of the 580 series or newer. The exact images, their arm64
builds and the packages each preset adds are in the
Presets reference; astra env presets lists them
too.
Which build a runtime gets#
The build is chosen when the runtime starts:
- No GPU asked: the CPU build, or the preset's first build (a CUDA image runs on a CPU too).
- GPUs asked: the build for the GPUs of the machine it is pinned to — or, when it may run on several machines, of those machines (the ones with as many GPUs as it asks for): AMD's when most of them are AMD's, else NVIDIA's. Its GPUs are then asked of that vendor only, so a CUDA build never lands on an AMD GPU.
- A preset with no build for those GPUs (RAPIDS, JAX, CUDA dev, NGC PyTorch, the Jupyter CUDA presets where only AMD GPUs are) fails to start, saying so and naming the presets that have an AMD build.
- A preset built for no GPU (
python,spark…) with GPUs asked: the GPUs are there, but its libraries do not use them. The form warns.
The preset cards in the console say, for your ask and your machines, which build the runtime will get and its download size, or no build for these GPUs.
An image of your own#
Choose Custom image and give its Image reference
(spec.image, any registry reference, at most 512 characters; pin it by
digest to get the same bytes everywhere). What it needs depends on the kind:
| Kind | The image needs |
|---|---|
| A notebook's runtime | Python with pip. Jupyter Server and ipykernel are installed onto the drive at the first start when the image has none (jupyter-server==2.21.1, ipykernel==7.4.0). It runs as the image's user. |
| Shell environment | /bin/sh. The machine brings the SSH server. |
| IDE environment | /bin/sh, and glibc 2.28 or newer with libstdc++ (Debian, Ubuntu, RHEL, NGC images). An Alpine (musl) image fails at start, saying so: use a shell environment for it. |
A runtime cannot name a registry credential yet: its image must be pullable anonymously, or already on the machine. A runtime pulls its image only when the machine does not have it, so an image pulled there once by a run with a registry credential works.
Users#
| Runtime | Runs as | You log in (SSH) as, by default |
|---|---|---|
A notebook's runtime on a Jupyter preset (python, minimal, datascience, pytorch-cuda, tensorflow-cuda) |
jovyan, the Jupyter images' user (the container starts as root, gives /content to jovyan and drops to it) |
jovyan |
| A notebook's runtime on another preset | root | root |
| A notebook's runtime on your image | the image's user (root when SSH is on) | root |
| A shell or IDE environment | root; the IDE runs as the login | root, or the user you choose (Log in as, Run as: ssh.user) |
The login must exist in the image. An environment's login has its home on
the drive, /content/home/<user>.
Setup#
A setup (spec.setup; Setup in the form; --pip, --apt and
--setup-script on astra env create) installs what the image lacks
before Jupyter, the SSH server or the IDE starts:
| Part | Installed | When | Where |
|---|---|---|---|
pip packages (pip) |
pip install --user from a requirements list |
At the first start, and again when the setup or the image changes | On the drive: a notebook's /content/.hesperus/python; an environment's ~/.local in its home |
System packages (apt) |
With the image's package manager: apt, dnf or apk | At every start (they live in the container) | In the container; downloads are cached on the drive, so only the first start downloads them |
Script (script) |
Run with sh, as root, in /content |
At the first start, and again when the setup or the image changes | What it writes under /content stays |
At most 64 pip requirements (each at most 256 characters, no options such
as -r or --index-url), 64 system packages (lowercase names, optionally
=version) and a 16 KiB script. A preset adds its own first: huggingface
its pinned Hugging Face packages, cuda its compilers and Python
(Presets reference).
The setup's output is in the runtime's run log and in
/content/.hesperus/env/<runtime>/setup.log on the drive. A failure is
logged, never fatal: the runtime starts anyway, and the setup is tried
again at the next start. The container must run as root to install system
packages (presets and environments do).
Basic tools#
git, curl, htop and tmux — and nvtop when the runtime has GPUs — are
installed in the background when the image lacks them, from the same cache.
A package the image's manager does not have is noted on the drive and not
tried again. Clear Basic tools (setup.tools: false, --no-tools) to
leave the image as it is.
On every runtime#
nvidia-smi: a runtime with GPUs on an NVIDIA machine always hasnvidia-smiand NVML, whatever the image says (NVIDIA_DRIVER_CAPABILITIESincludesutility).%pip installin a notebook puts packages on the drive, and the next cell imports them without a kernel restart (Install packages).- Spark (the
sparkpreset) runs in local mode on the runtime's cores (spark.master local[<cores>]), its driver given 60% of the runtime's memory, its scratch space (SPARK_LOCAL_DIRS) on the drive;pyspark,spark-submitandspark-shellwork as they are. - Credentials of the workspace can be given to a runtime as
environment variables (
spec.credentials, API only); the machine resolves them, as for any run (Credentials).