GH200 Early Access¶
🚧 GH200 nodes are out of action at the moment
GH200 nodes are out of action as of 12th of June 2026. We hope to have them back for testing on the week of June 30th
The GH200 nodes are now available for early access testing. They represent a
significant architectural departure from the rest of the BMRC cluster — this
page explains what is different, what that means for your software, and how to
get started.
- 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.
What makes the GH200 different¶
Each 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 — 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¶
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¶
Option A — aarch64 module tree (recommended)¶
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 B — uv for Python environments¶
For Python work, uv is the most practical option during the early access
period. 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).
Option C — contact KIR Research Computing¶
During the early access period, KIR Research Computing can build and maintain a shared environment for your group in a shared path, saving you the effort of managing your own aarch64 environment. This is the recommended route for groups who want to get started quickly.
Requesting GH200 resources¶
Use the following partition in your SLURM scripts:
A few important points before you submit:
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.
GPU compute architecture¶
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.
Available LLM models¶
A shared mirror of large language models is available at
/well/kir/mirror/LLM/. No download or HuggingFace token is needed to use
these.
HuggingFace format (for use with transformers, FSDP, vLLM, etc.)¶
| Model | Path |
|---|---|
| BERT base uncased | /well/kir/mirror/LLM/huggingface/google-bert-bert-base-uncased/ |
| Qwen2.5-72B | /well/kir/mirror/LLM/huggingface/Qwen-Qwen2.5-72B |
Load directly in Python:
Ollama models¶
models which can be used with ollama serve
| Model | Tag |
|---|---|
| Llama 3.1 | llama3.1 |
| Llama 3.2 | llama3.2 |
| Llama 4 | llama4 |
| Gemma 4 | gemma4 |
| Mistral | mistral |
| Qwen3 Coder | qwen3-coder-next |
| Nomic Embed Text | nomic-embed-text |
Set the model directory before starting Ollama:
Need a model that isn't listed?
Contact KIR Research Computing and we can download it to the shared path. Do not download large models to your home directory or scratch space without checking storage quotas first.
Getting help¶
The GH200 nodes are in early access. We expect rough edges, missing modules, and workflows that need adaptation. Highly recommend contacting KIR Research Computing Manager for
- Building aarch64 modules or shared environments
- Requesting additional models in the shared mirror
- Reporting node issues or unexpected behaviour
- Help porting existing workflows to the GH200