Getting started
Install PantheonGPU and run a first validation
PantheonGPU automatically detects CUDA, ROCm/HIP, or mock mode. Run the pantheon command directly after installation.
Install
Install the basic build tools:
Install the compiler for your platform. You only need one:
Pantheon is open source. Building from source lets you read exactly what will run on your hardware; a package is quicker if you just want to run it.
Installs a pantheon command on your PATH. pipx keeps it in its own
environment, which is what recent Ubuntu and Debian releases require of
anything installed outside the system package manager; pip install --user
pantheon-gpu works too where that restriction does not apply. Add the
reports extra (pipx install "pantheon-gpu[reports]") for spreadsheet
export.
The wheel carries the kernel sources rather than prebuilt binaries, so the
first run compiles the workloads for your GPU into a per-user cache. That
takes a minute or so once, and needs make, a C++ compiler, and the CUDA
or ROCm toolkit from the tabs above.
From conda-forge, so
mamba and micromamba install it the same way. It installs both
pantheon and pantheon-gpu; they are the same program.
The package carries the kernel sources rather than prebuilt binaries, so
the first run compiles the workloads for your GPU into a per-user cache.
That takes a minute or so once, and needs make, a C++ compiler, and the
CUDA or ROCm toolkit from the tabs above.
A release reaches conda-forge a little after it reaches PyPI.
conda search -c conda-forge pantheon-gpu shows which versions are there.
docker run --rm -t --gpus all -v "$PWD:/reports" \
ghcr.io/pantheongpu/pantheon:latest --test tensor_virus --duration 60
The image carries the CUDA 12.8 toolchain, so nothing is installed on the
host beyond the NVIDIA driver and the NVIDIA Container Toolkit. Kernels
still compile for the GPU actually present on first run; mount
/root/.cache as well to keep the compiled cache across containers.
Reports land in the directory mounted at /reports.
Tags: latest, a version (1.2.4), or a version pinned to its toolchain
(1.2.4-cuda12.8).
On AMD hardware use the ROCm variant, which carries the ROCm 6.4
toolchain instead and needs the device nodes rather than --gpus:
docker run --rm -t --device=/dev/kfd --device=/dev/dri --group-add video \
-v "$PWD:/reports" \
ghcr.io/pantheongpu/pantheon:latest-rocm --test tensor_virus --duration 60
If --gpus all is refused
failed to discover GPU vendor from CDI: no known GPU vendor found
(newer Docker) and could not select device driver "" with
capabilities: [[gpu]] (older Docker) both mean the same thing: the
host has no NVIDIA Container Toolkit registered, so Docker cannot
hand a GPU to any container. If nvidia-smi works on the host, fix
it with:
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
If the package is not found, add NVIDIA's repository first: see
the NVIDIA Container Toolkit install guide.
A stray ERROR: init ... result=9 line at container start is
harmless noise from the base image's GPU hooks on hosts without
passthrough; Pantheon's own output follows it.
sudo dnf install 'dnf-command(copr)'
sudo dnf copr enable saqibkhanpantheongpu/pantheon-gpu
sudo dnf install pantheon-gpu
Built for Fedora 43/44 and EPEL 10 (RHEL, Rocky and Alma 10). EPEL 9 is not built: its Python stack cannot satisfy the build's setuptools floor, so use pipx or the Docker image there. Add the CUDA or ROCm toolkit separately for real hardware.
git clone https://github.com/pantheongpu/pantheon.git
cd pantheon
pip install -r requirements.txt
make PLATFORM=CUDA -j$(nproc) # or PLATFORM=HIP for AMD
There is no build-time auto-detection, so pass PLATFORM= explicitly. Use
PLATFORM=MOCK to build a CPU backend that needs no GPU at all, which is
useful for trying the tooling before committing hardware to it.
Run it from the checkout with python3 pantheon.py in place of the
pantheon command used below.
curl -fsSL https://pantheongpu.com/apt/pantheon-archive-keyring.asc \
| sudo tee /usr/share/keyrings/pantheon-archive-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/pantheon-archive-keyring.asc] https://pantheongpu.com/apt stable main" \
| sudo tee /etc/apt/sources.list.d/pantheon.list
sudo apt update && sudo apt install pantheon-gpu
Installs both pantheon and pantheon-gpu; they are the same program.
Telemetry and spreadsheet export come from Recommends, so apt pulls them
by default and they can be left out on a minimal install; the CUDA toolkit
is only a Suggests.
The workloads compile on first run, which is why the package depends on
g++ and make. Add the CUDA or ROCm toolkit separately for real
hardware.
VERSION=1.2.4
BASE="https://github.com/pantheongpu/pantheongpu_website/releases/download/v${VERSION}"
wget "${BASE}/pantheon_gpu-${VERSION}-py3-none-any.whl"
wget "${BASE}/SHA256SUMS" && sha256sum --ignore-missing -c SHA256SUMS
pipx install "./pantheon_gpu-${VERSION}-py3-none-any.whl"
Installs a pantheon command on your PATH. pipx keeps it in its own
environment, which is what recent Ubuntu and Debian releases require of
anything installed outside the system package manager; pip install --user
works too where that restriction does not apply.
The wheel carries the kernel sources rather than prebuilt binaries, so the
first run compiles the workloads for your GPU into a per-user cache. That
takes a minute or so once, and needs make, a C++ compiler, and the CUDA or
ROCm toolkit from the tabs above.
Run a first test
Run a short inventory test:
Then run a targeted stress test on GPU 0:
Read the verdict
Every run ends with one word per GPU and the evidence behind it:
VERDICT GPU 0, NVIDIA H100 80GB HBM3: WATCH (thermally throttled on 2; correctable errors on 8)
! thermal: memory_read thermally throttled, GPU at 95 C, memory_read_agg thermally throttled, GPU at 94 C
! correctable errors on 8 workload(s): pcie.bad_tlp +9, pcie.lcrc +6
note: PCIe link recovery events on 8 workload(s): link power-state cycling, not a fault
HEALTHY means every workload completed, no error counter that matters moved, and nothing ran hot. WATCH names what deserves a second look: a thermal limit, a GPU at 90 C or memory at 95 C, correctable ECC or PCIe errors, or a workload that did not complete. FAULT means a memory diagnostic failed or an uncorrectable error was counted. The verdict is written into the report as well.
pantheon --test quick is the ten-minute version: idle baseline, memory read,
a march test, a retention check and one power-limited compute load.
Check a runner's GPUs in GitHub Actions
On a self-hosted runner with a GPU, one step tests the cards before the job uses them, and fails the job if a card is faulty:
jobs:
train:
runs-on: [self-hosted, gpu]
steps:
- uses: pantheongpu/gpu-health-check@v0
- uses: actions/checkout@v4
- run: python train.py
The action installs Pantheon, runs a short set of workloads on every GPU of
the runner, writes each card's result into the job summary and keeps the full
reports as a workflow artifact. A check that could not run fails the job too,
so a green tick means a card was tested. The runner needs the same things as
any other install: the GPU's driver and compiler, make, a C++ compiler and
Python.
Pantheon GPU Health Check on the GitHub Marketplace lists its options. GitHub's own hosted runners have no GPU, so this is for runners you host or rent.
For Slurm, NHC and ReFrame, see Integrations.
Profiling and reports
Verification of workload output is on by default; pass --skip_verify to turn it off. Use --profile to collect performance counters, traces, and a per-workload HTML summary:
Three things commonly stop a profiled run before it starts:
- It needs root. NVIDIA drivers ship with profiling restricted to administrators, so an ordinary user sees
ERR_NVGPUCTRPERMand almost no counters. - Both tools must be installed. On NVIDIA that is
ncuandnsys; Pantheon refuses the run rather than producing half a profile. On AMD it isrocprofv3. - Nsight Compute must match the driver. A build newer than the driver installs cleanly and then fails every capture with
stub libcuda.so. Install the package matching the CUDA versionnvidia-smireports, such ascuda-nsight-compute-12-8.
Profiling also needs host memory comparable to the GPU memory in use, because the profiler stages device memory in host RAM while replaying kernels. On a machine whose RAM is close to its VRAM, run without --profile rather than lowering --mem.
See Test Documentation for workload guidance, Releases and Downloads for other installation methods, and Reports for output details.
Uninstall
Remove the package the way it was installed:
pipx uninstall pantheon-gpu # PyPI or a downloaded wheel
conda remove pantheon-gpu # conda-forge
sudo apt-get remove pantheon-gpu # apt repository
sudo dnf remove pantheon-gpu # Fedora COPR
docker rmi ghcr.io/pantheongpu/pantheon:latest # container image
To drop the apt source as well, remove /etc/apt/sources.list.d/pantheon.list
and /usr/share/keyrings/pantheon-archive-keyring.asc; on Fedora,
sudo dnf copr disable saqibkhanpantheongpu/pantheon-gpu.
Releases up to v1.0.19 shipped as a Debian package named pantheongpu. Remove
one of those with:
The workloads compile into ~/.cache/pantheongpu on first run and stay there
after the package is gone. To remove that cache, the apt source, any runtime
files under /opt/pantheongpu, and whichever package is installed, in one go:
This leaves CUDA, ROCm, system compilers, and benchmark reports outside PantheonGPU's installation and cache directories untouched.