GH200 node¶
- Scripts, SLURM jobs, and results from our GH200 bring-up testing, including the FSDP inference benchmark and HBM3e bandwidth sweep described on this page.
- A detailed write-up of running large language model inference across two GH200 GPUs using PyTorch FSDP, with benchmarking results and architecture notes.
KIR has been granted access to an exclusive GH200 node through a dedicated Slurm partition. This is a powerful but strictly limited resource .i.e. a single node shared across the whole of KIR. We would appreciate you taking a moment to read this page and adopt the recommended methods, so that the node is utilised correctly and remains available to every researcher who needs it
This node carries the highest scheduling weight
Although the node is exclusive to KIR, Slurm still accounts for its usage, and GH200 time carries the highest weight of any GPU on the cluster. For that reason:
- Use other GPU types for standard workflows. If your job fits comfortably on an A100 or other cluster GPU, please run it there.
- The node is fair game when it would otherwise sit idle. If the GH200 is free and other GPU partitions have long queues, you are always welcome migrate jobs rather than waiting. Just be ready to keep such jobs brief so the node stays available for the large-memory work it is meant for.
What makes the GH200 different¶
A GH200 node contains two NVIDIA GH200 Grace Hopper Superchips. Unlike every other GPU node on the cluster, the GH200 is not simply a GPU card plugged into an x86 server. Instead, the CPU and GPU are a single unified superchip connected by NVLink-C2C, a high-speed coherent interconnect that lets both processors share memory transparently.
| Feature | Standard cluster nodes | GH200 nodes |
|---|---|---|
| CPU architecture | x86_64 (Intel/AMD) | aarch64 (Arm Neoverse V2) |
| Operating system | Rocky Linux 8 | Rocky Linux 9 |
| GPU | A100 / other | NVIDIA GH200 144GB |
| GPU memory | 40–80 GB HBM2e | 144 GB HBM3e per GPU |
| CPU–GPU link | PCIe (~64 GB/s) | NVLink-C2C (900 GB/s) |
| GPUs per node | varies | 2 per node |
| CPU memory | DDR4/DDR5 | ~480 GB LPDDR5X per superchip |
The key figures for GPU-intensive work: 144 GB of HBM3e per GPU and 288 GB total per node, with ~4 TB/s memory bandwidth per GPU.
Why your existing software✴️ will not work¶
✴️ = Environemnt modules, python virtual and conda environments compiled for existing CPU architecture
There are two independent reasons why software built for the rest of the cluster will fail on the GH200 nodes.
1. CPU architecture mismatch¶
The Grace CPU uses the Arm (aarch64) instruction set. Every binary compiled for x86_64 — Python, R, compiled extensions, conda environments, container layers — is the wrong architecture and will not execute. When you try to run an x86_64 binary on an aarch64 node you will typically see one of these errors:
The second error, which looks like a Python syntax error in a shell script, is actually the shell trying to interpret an x86_64 binary as a shell script because it cannot execute it natively.
This affects everything
Conda environments, pip-installed packages with compiled extensions,
pre-built binaries in your home directory, and any software loaded via
module load from the standard module tree are all x86_64 and will not
work on the GH200 nodes.
2. Operating system mismatch¶
The GH200 nodes run Rocky Linux 9 (EL9). The rest of the cluster runs Rocky Linux 8 (EL8). Packages and modules built against EL8 system libraries are not guaranteed to work on EL9 and vice versa. The aarch64 module tree described below is built specifically against EL9.
Software options¶
Be economical with compile time on this node
We have only one GH200 node, and it is used both for running jobs and for installing/building software. Unfortunately, we cannot afford a second node just for builds. Time spent compiling software on the node is GPU time no one else can use. Please be as economical as possible: prefer pre-built shared environments and containers, do heavy development elsewhere (see Develop on Isambard-AI below), and talk to Research Computing before starting any long compilation.
Option A — contact KIR Research Computing Team/Manager (recommended)¶
The best route for most groups is to let KIR Research Computing Team build and maintain a shared environment for these GPU architectures for you, saving you the effort and the node's compile time. Shared environments live under:
We also strongly encourage building containers wherever possible. A container is, without a doubt, the best way to maintain a reproducible software stack for these nodes and, as explained below, the same image can run on both our GH200 node and Isambard-AI without reinstalling anything. The Research Computing Manager can assist you with building and testing container images.
Option B — aarch64 module tree¶
We have started building an aarch64/EL9 EasyBuild software stack at
/apps/eb/el9/. The available toolchain generations with aarch64 builds are:
| Toolchain | Path |
|---|---|
| 2023a | /apps/eb/el9/2023a/aarch64/ |
| 2024a | /apps/eb/el9/2024a/aarch64/ |
| 2025a | /apps/eb/el9/2025a/aarch64/ |
This tree is not loaded by default. Add it to your module path with:
Then use module avail and module load as normal. We recommend adding this
to your Slurm scripts rather than your ~/.bashrc to avoid affecting jobs on
other partitions.
Coverage is growing
The aarch64 stack is under active development. If a module you need is missing, contact KIR Research Computing — we can prioritise building it.
Option C — uv for Python environments¶
For self-managed Python work, uv is a practical option. An aarch64-native
build of uv is available at:
Add this to the top of your Slurm scripts before any Python or pip
commands. This ensures the aarch64 uv binary is used rather than any
x86_64 version that may be on your PATH.
Create a virtual environment and install packages as normal:
CUDA module
Always load a CUDA module before activating your environment. Use
CUDA/12.6.0 for GH200 — it is the minimum version with full support
for the GH200's compute architecture (see below).
GPU compute architecture for software Compilation¶
The GH200 uses the Hopper GPU architecture. If you compile GPU code (CUDA C++, custom PyTorch extensions, or any package that builds against CUDA), you need to target the correct compute capability.
| GPU | Architecture | Compute capability |
|---|---|---|
| A100 | Ampere | sm_80 |
| H100 | Hopper | sm_90 |
| GH200 | Hopper | sm_90a |
The a suffix in sm_90a is specific to the Grace Hopper superchip. When
compiling CUDA code, set:
For PyTorch, this is handled automatically when you install a CUDA 12.x build
of torch — it ships with pre-compiled kernels for sm_90a. No manual flag is
needed for standard PyTorch workflows.
Pre-compiled binaries for sm_80 will run but slowly
CUDA includes a JIT fallback: binaries compiled for sm_80 will execute
on a GH200 via PTX recompilation, but you lose all Hopper-specific
optimisations (flash attention v3, FP8 tensor cores, improved WGMMA
instructions). Always recompile for sm_90a if performance matters.
Use Isamabrd-AI for your development cycle(recommended) and BMRC GH200 for Production¶
To keep the single GH200 node free for production runs, we encourage doing all of your development work on Isambard-AI. Isambard-AI has an abundance of GPU nodes held on reservation for interactive development, so it is a far better place to iterate on code, test builds, and prototype workflows than our one shared node.
-
Easy transfer between the two. You can connect to Isambard-AI directly from BMRC and move content back and forth with minimal effort.
-
Containers make this seamless. This is another reason to prefer containers: because both our GH200 node and Isambard-AI share the same GPU architecture, you can build a container image once and run the same image on both — no need to reinstall anything when you move a workflow across.
Develop and build on Isambard-AI, then bring the finished container (or environment) over to the GH200 node to run your production jobs.
Requesting GH200 resources¶
Use the following partition in your SLURM scripts:
A few important points before you submit:
Do not run large job arrays without checking first
Please do not submit job arrays with hundreds of tasks to this node without discussing it with the Research Computing Manager first. A single large array can monopolise the node and block everyone else at KIR for weeks. If you have a high-throughput workload in mind, talk to us and we will help you find an approach that does not lock out other researchers.
Start with one GPU
Begin with a single GPU while you are getting familiar with the nodes. Only request both if your workflow genuinely requires it.
Mandatory Slurm directives
Always set --cpus-per-task
If you do not specify CPU cores, Slurm will allocate all 72 Grace CPU
cores on the superchip to your job by default. This blocks other users
from running even if they need only a handful of cores. Always be
explicit:
Always set --time
The default time limit is 5 days. Please always set an explicit wall time — it helps the scheduler and frees the node promptly when your job finishes. During early access we recommend keeping jobs short while you are iterating on your workflow.
Be mindful with --mem
Each node has approximately 1 TB of CPU memory. You can request up to that, but please only do so if your workflow genuinely requires it. Idle over-allocations prevent others from running.
Interactive sessions vs batch jobs¶
Please choose sbatch for work on the GH200 wherever possible. A batch job
releases the node the moment your computation finishes, returning it to the
queue for the next pending job.
Interactive sessions (srun --pty, or salloc) behave differently: they hold
the allocation until you exit or the wall time is reached, not when your
computation completes. For example, if you request a long wall time and your
process finishes overnight, the session will continue to occupy the node until
you manually terminate it or the wall time expires. On a single shared node,
this can leave the GPU idle for hours while other jobs wait in the queue.
If you do need an interactive session:
- Exit it as soon as your computation is done, rather than leaving it running to the wall time.
- Request a wall time close to what you actually need.
Use Isambard-AI for interactive and exploratory work
Isambard-AI has GPU nodes reserved for interactive development. For debugging, prototyping, and any exploratory work, please use Isambard-AI where possible and reserve the GH200 for production batch jobs. See Develop on Isambard-AI.
Being a good citizen¶
The GH200 is a single node shared across all of KIR, and it is a limited resource. A few habits keep it accessible to everyone who needs it:
- Right-size your jobs — use other GPU types for standard workflows and reserve the GH200 for genuinely large-memory work.
- Keep jobs short and set an explicit
--timeso the node frees up promptly. - If possible, do development on Isambard-AI, not on the BMRC GH200.
- Check whether a prebuilt environment or container already exists for your software before building — contact the Research Computing Manager if unsure.
- Avoid launching large job arrays on this partition
Thank you for helping make sure every researcher at KIR who needs this resource can get to it without prolonged waits.
Getting help¶
Please contact the KIR Research Computing Manager for:
- Building aarch64 modules, shared environments, or containers
- Requesting additional Large Language Models in the shared mirror
- Reporting node issues or unexpected behaviour
- Help porting existing workflows to the GH200
- Planning any high-throughput or long-running work on the node