GPU Questions¶
On this Page
- Choosing a GPU partition
- Why a GPU job waits even when nodes look free
- The partitions that need access granted first
- Checking that your code is really using the GPU, and asking for part of one
Which GPU Partition Should I Use?¶
Every GPU model has its own partition, and there is a general pool that takes whichever of its nodes is free first.
| Partition | GPUs per node | GPU memory | Use it when |
|---|---|---|---|
aoraki_gpu |
mixed | 40–80 GB | You just need a GPU. Draws on the A100, H100 and L40 nodes, so it usually starts soonest |
aoraki_gpu_H100 |
4 × H100 | 80–96 GB | Large models, or you need the fastest available card |
aoraki_gpu_A100_80GB |
2 × A100 | 80 GB | The model does not fit in 40 GB |
aoraki_gpu_A100_40GB |
2 × A100 | 40 GB | Standard training and inference work |
aoraki_gpu_L40 |
3 × L40 | 48 GB | Good all-rounder; also supports sharing a card |
aoraki_gpu_L4_24GB |
7 × L4 | 24 GB | Inference and smaller models; often idle |
aoraki_gpu_RTX3090 |
1 × RTX 3090 | 24 GB | Small jobs on the standalone workstations |
aoraki_gpu_H200 |
8 × H200 | 144 GB | The largest models. Access must be requested |
aoraki_gpu_RTX6000 |
8 × RTX 6000 | 98 GB | Large models. Access must be requested |
Node lists, per-job limits and full hardware details are in the Cluster Overview.
Pick the smallest card that fits
An H100 that you use at 20% starts later and costs the cluster more than an L4 that you
use fully. If your model fits in 24 GB, aoraki_gpu_L4_24GB will usually get you working
sooner.
How Do I Ask for a GPU?¶
You need both a GPU partition and a request for the GPU itself. Asking for a GPU partition alone gets you a node with a GPU that your job is not allowed to touch.
Terminal
#SBATCH --partition=aoraki_gpu
#SBATCH --gpus-per-node=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=32G
#SBATCH --time=04:00:00
Request at least two CPUs per GPU so the card is not left waiting for data. Full worked examples are in Using a GPU with Slurm, and the interactive equivalent is in Interactive Sessions.
Why Is My GPU Job Queued When the Nodes Look Idle?¶
sinfo reporting a node as allocated tells you nothing about how many of its GPUs are
taken, and "idle CPUs" on a GPU node is normal — the aoraki_small and aoraki_short
partitions deliberately use them.
The three usual explanations:
- You are already running two GPU jobs in that partition. There is a cap of 2 running
GPU jobs per GPU partition per user. Further jobs wait with
(QOSMaxJobsPerUserLimit). An interactive session or an OnDemand app holding a GPU counts against this, so end sessions you are not using. -
The GPUs are busy even though the CPUs are not. Check what is actually allocated:
Terminal
sinfo -p aoraki_gpu -o "%10N %10T %20G %30C"The
GREScolumn shows what each node has;squeue -p aoraki_gpushows who is using it. -
You asked for more than one node. GPU jobs are limited to a single node. Requesting
--nodes=2with GPUs will never start.
Why Is My Job Not Starting? explains the other pending reasons.
Why Was My Job Rejected from a GPU Partition?¶
aoraki_gpu_H200 and aoraki_gpu_RTX6000 are newer hardware with restricted access.
Submitting to them without it fails immediately with an invalid account or partition error,
or the job sits pending and never runs.
Access is granted per user, on request. Email rtis.support@otago.ac.nz describing the work and why it needs that hardware.
aoraki_nzbri is restricted to a specific research group and is not available generally.
Is My Code Actually Using the GPU?¶
A surprising number of GPU jobs run entirely on the CPU — a framework installed without CUDA
support, or a device that was never selected. seff will not tell you: it reports CPU and
memory efficiency and says nothing about the GPU.
Check inside the job. Adding this to your script confirms the GPU was visible and shows what it did:
Terminal
nvidia-smi # at the start: is the GPU there?
python my_training_script.py
nvidia-smi --query-accounted-apps=gpu_util,mem --format=csv # at the end
Check while it runs, from a login shell, using the job's ID:
Terminal
srun --jobid=<jobid> --overlap nvidia-smi
If nvidia-smi shows the card at 0% while your job is busy, the problem is in your software
rather than in Slurm. In PyTorch, torch.cuda.is_available() returning False usually means
a CPU-only build was installed — see PyTorch.
Can I Use Part of a GPU?¶
Yes, on some partitions. Slurm shards divide a card into slices that separate jobs can be scheduled onto, which suits inference, development and anything that cannot keep a whole GPU busy.
| Partition | Card | Shards per card |
|---|---|---|
aoraki_gpu_L40 |
L40 | 20 |
aoraki_gpu_L4_24GB |
L4 | 10 |
aoraki_gpu_RTX3090 |
RTX 3090 | 10 |
Request shards instead of whole GPUs:
Terminal
#SBATCH --partition=aoraki_gpu_L40
#SBATCH --gres=shard:4
#SBATCH --cpus-per-task=4
#SBATCH --mem=16G
#SBATCH --time=02:00:00
Do not combine --gres=shard: with --gpus-per-node= in the same job — ask for one or the
other.
Shards divide access, not memory
A shard is a share of the card's scheduling, not a reserved slice of its memory. Jobs sharing a GPU draw from the same pool of GPU memory, so a neighbour that allocates the whole card can make your job fail with an out-of-memory error even though your request was satisfied. Size shard jobs to a modest fraction of the card's memory, and use whole GPUs for anything where a failure part-way through would be expensive.
If you are unsure whether sharing suits your workload, email rtis.support@otago.ac.nz — it is worth a short conversation before you build a pipeline around it.
Do I Need to Load CUDA?¶
If you are compiling CUDA code, or using software that expects nvcc and the CUDA
libraries, yes:
Terminal
module load cuda
Frameworks installed through Conda or pip — PyTorch, TensorFlow, JAX — usually bundle their
own CUDA runtime and do not need the module. Loading it anyway can occasionally cause a
version clash, so if a framework worked and then stopped after you added module load cuda,
try removing it.
See Using Modules for finding the versions available.