Quantum Partition: Quick Start

Quantum Partition: Quick Start

Check this page regularly as it will be updated frequently over the incoming months as the deployment of the software progresses and configuration changes.

 

This page summarises the information needed to start using the Setonix Quantum partition.

Overview

The Setonix Quantum partition consists of 4 GH200 compute nodes and your allocation can be viewed on origin and used by setting the account to <project_id>-q. This allocation is seperate from the CPU and GPU Setonix allocations.

Nodes

Each GH200 compute node has four NVIDIA GraceHopper GH200 superchips. Each GH200 superchip has a Grace Arm Neoverse V2 CPU with 72 cores with 120 GB of LPDDR and a Hopper H100 GPU with 96 GB of memory. Due to the unified memory architecture of the superchip, each node will report 4x120 + 4x96 of RAM. The available memory is 855GB of usable space. The Grace CPU architecture is completely different from all other nodes, which are x86_64. These nodes are connected to the Slingshot by two NIC cards for data transfer between nodes. These nodes are available on the quantum partition associated with the Setonix-Q Pilot merit allocation scheme. Each Setonix GH200 node has an attached NVMe device with 3575GB usable space.

image-20251111-055819.png
Figure 1. A GH200 node of Setonix (original image from CSCS Alps documentation).

The GH200 node has small internal latencies between each core of 60-70 ns. The latency is larger across superchips and sockets as seen in the Figure 2. The exact numbers will vary but typical socket 1 to socket n latency will be of order 370 ns, whereas all other sockets-to-socket transfers will have latencies of roughly 500 ns.

 

Screenshot 2025-11-11 at 15.25.33.png
Figure 2. GH200 node cross-socket latency

Important: Grace Arm vs x86

A GH200 node has a Grace Arm CPU, which is a completely different architecture to the rest of the CPUs on Setonix. Software compiled with other cpus will not run on the GH200 nodes. Thus for software to run on GH200 nodes, it must be compiled on a GH200 node. 

Software on GH200 Arm nodes

A GH200 node has a Grace Arm CPU, which is a completely different architecture to the rest of the CPUs on Setonix, which are x86 architecture. Software compiled with other nodes will not run on the GH200 nodes. Thus for software to run on GH200 nodes, it must be compiled on a GH200 node. As a result, the software stack and module paths for Setonix-Q GH200 nodes is quite separate from the other software stack.

To load these modules, you should purge the module environment and do the following steps.

# on a compute node module purge module load pawsey pawseytools pawseyenv/<DATE_TAG> # such as 2026.01 module load PrgEnv-gnu-nvidia

This will set the relevant module paths. Note that this also needs to be done in all sbatch scripts.

Supported Applications

Although much of the applications that can run on the GPU partition (AMD MI250x GPUs, HIP) can run on the GH200 nodes (NVIDIA GraceHopper GH200 superchip, CUDA), these applications are not provided on the quantum partition. We instead provide software focused on quantum simulation.

Table 1. List of popular applications. * indicates module is a container as module. 

Name

NVIDIA CUDA GPU Acceleration

Module

Name

NVIDIA CUDA GPU Acceleration

Module

Pawsey’s QSim

Yes

TBC

Pawsey’s QBitBridge

Yes (orchestration framework that allows for GPU-acceleration)

TBC

Qiskit

Yes

Yes

Quantum Brilliance virtual QPU, vQPU

Yes

TBC

CUDA-Q

Yes

TBC

cuQuantum

Yes

TBC

Braket

No

TBC

PennyLane

Yes

Yes

PyTorch

Yes

TBC

Tensorflow

Yes

TBC

Module names of GH200 ARM applications exist in a separate module path.

Supported Numerical Libraries

Popular numerical routines and functions have been implemented by NVIDIA to run on their GPU hardware. All of the following are available when loading the PrgEnv-nvidia  module.

Name

Description

Name

Description

cuFFT

Fast Fourier Transform.

cuBLAS

Basic Linear Algebra Subprograms (BLAS) on the CUDA platform.

cuSOLVER

A subset of LAPACK functionality on the CUDA platform.

Table 2. Popular GPU numerical libraries.

A complete list of available libraries can be found on this page (external site).

Submitting Jobs

You can submit GPU jobs to the quantum Slurm partitions using your Setonix-Q allocation.

Note that you will need to use a different project code for the --account/-A option. More specifically, it is your project code followed by the -quantum suffix. For instance, if your project code is project1234, then you will have to use project1234-q.

Unlike the CPU partitions, the /tmp and /var/tmp directories access NVMe storage, not the tmpfs RAM disk. (The tmpfs filesystem is still available under /dev/shm.) Request a specific amount of NVMe storage in your job script by adding tmp:<some-value>G to the --gres option. Unless using all of the GPUs on the node, please limit your NVMe request to no more than 2679 GiB. You should not be able to use more NVMe space than what has been allocated to you. By default, without any explicit NVMe request, a job should get allocated 128 GiB of the NVMe device. The NVMe device (or the portion used by a job) is cleaned up after the job completes.  IMPORTANT: Migrate any valuable results from the NVMe device before the job completes.

Example Slurm Batch Scripts for Setonix-Q on GH200 Compute Nodes

An extensive explanation on the use of the Setonix-Q GH200 nodes (including request by "allocation packs" and the "manual" binding) is in Example Slurm Batch Scripts for Setonix-Q on GH200 Compute Nodes

Compiling software

As mentioned, GH200 node has a Grace Arm CPU, which is a completely different architecture to the rest of the CPUs on Setonix, which are x86 architecture. Software must be compiled on a GH200 node. To compile code, first you should salloc to a GH200 node and load the appropriate Cray Programming Environment (CPE). Due to the ARM architecture of the GH200 nodes, you must purge the module environment from the login nodes and reload the relevant environment. This will eventually be automated with the pawseyenv module.

Interactive sessions with salloc

salloc will by default keep environment variables and modules that were loaded prior to the interactive session. Thus we recommend purging the module environment environment before running salloc

# from the login node module purge salloc -p quantum -A <project-id>-q <resource requests>

Then in the interactive session you should reload the environment and also update the module path explicitly.

# on a compute node module purge module load pawsey pawseytools pawseyenv/<DATE_TAG> # such as 2026.01 module load PrgEnv-gnu-nvidia

For CUDA code you can use the Cray compiler wrappers cc/CC/ftn or use nvcc, nvc++, or nvfortran explicitly as appropriate. And, for code making use of OpenMP offloading, you can use:

  • cc/CC for c/c++

  • ftn for fortran.

When using nvc++, and the NVIDIA compilers, note that the location of the MPI headers and libraries are not automatically included (contrary to the automatic inclusion when using the Cray wrapper scripts). Therefore, if your code also requires MPI, the location of the MPI headers and libraries must be provided to nvc++ as well as the GPU Transport Layer libraries:

nvc++ $(CC --cray-print-opts)

We also suggest using the gcc/12.3 toolchain when compiling code to use the newer host compiler.

nvc++ $(CC --cray-print-opts) --toolchain=$(which g++)

Accounting

Each GH200 superchip has 1 GPU, which corresponds to a Slurm GPU, is charged 256 SU per hour. This means the use of an entire GH200 node is charged 1024 SU per hour. In general, a job is charged the largest proportion of core, memory, or GPU usage rounded up to 1/4ths of a node (corresponding to an individual GraceHopper GH200 superchip). Note that quantum node usage is accounted against GPU allocations with the -quantum suffix, which are separate to other allocations.

Programming NVIDIA GH200 GPUs

You can program NVIDIA GraceHopper GH200 GPUs using CUDA. The complete NVIDIA documentation on how to program with CUDA can be found here (external site).

Example Jobscripts

The following are some brief examples of requesting GPUs via Slurm batch scripts on Setonix-Q GH200 nodes. For more detail, refer to Example Slurm Batch Scripts for Setonix-Q on GH200 Compute Nodes

Example 1 : One process with a single GPU using shared node access
#!/bin/bash --login #SBATCH --account=project-q #SBATCH --partition=quantum #SBATCH --nodes=1 #1 nodes in this example #SBATCH --gres=gpu:1 #1 GPU per node (1 "allocation-pack" in total for the job) #SBATCH --time=00:05:00 #SBATCH --export=NONE #---- #Loading needed modules (adapt this for your own purposes): # these modules are loaded by default using the pawseyenv module. module purge module load pawsey pawseytools pawseyenv/<DATE_TAG> # such as 2026.01 module load PrgEnv-gnu-nvidia module list #---- #MPI & OpenMP settings export OMP_NUM_THREADS=1 #This controls the real number of threads per task #---- #Execution srun -N 1 -n 1 -c 72 --gres=gpu:1 ./program
Example 2 : Single CPU process that use the 4 GPUs of the node
#!/bin/bash --login #SBATCH --account=project-q #SBATCH --partition=quantum #SBATCH --nodes=1 #1 nodes in this example #SBATCH --exclusive #All resources of the node are exclusive to this job # #4 GPUs per node (4 "allocation-packs" in total for the job) #SBATCH --time=00:05:00 #SBATCH --export=NONE #---- #Loading needed modules (adapt this for your own purposes): module purge module load pawsey pawseytools pawseyenv/<DATE_TAG> # such as 2026.01 module load PrgEnv-gnu-nvidia module list #---- #MPI & OpenMP settings export OMP_NUM_THREADS=1 #This controls the real CPU-cores per task for the executable #---- #Execution srun -N 1 -n 1 -c 288 --gres=gpu:4 ./program

Full guides

Related pages