Research computing on HPC clusters
HPC clusters are where much research code actually runs, and they
invert desktop habits: you do not run programs, you request resources
and submit batch jobs; you do not install software, you load modules
or bring containers; the login node is a shared hallway, not a
workstation. An agent's job is to translate the user's computation
into this model correctly and reproducibly - and to respect that
every cluster has local documentation that overrides generic advice.
Batch jobs done right (SLURM)
A job script is a shell script with resource directives:
#!/bin/bash
#SBATCH --job-name=fit-model
#SBATCH --time=02:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --output=logs/%x-%j.out
module load Python/3.12
srun python fit_model.py --config configs/run.yaml
Practices that matter:
- Request honestly: measure a pilot run, then set time/memory with
modest headroom. Over-requesting wastes allocation and queue
priority (and energy - rseng-green-computing); under-requesting
kills jobs at 99%.
- Never compute on the login node; test with a short interactive
allocation (srun --pty or salloc) instead.
- Parameter sweeps are job arrays (--array=0-99), not 100 submitted
scripts; index into a config list with $SLURM_ARRAY_TASK_ID
(externalized run configs pair naturally with rseng-workflows).
- Long jobs checkpoint: clusters preempt and nodes fail; save
restartable state at intervals and make the script resume from the
last checkpoint.
- Log usefully: %x-%j names, and
seff JOBID after completion to
compare requested vs used resources - feed that back into the next
request.
Software environments on clusters
Three layers, in order of preference for reproducibility:
- Containers with Apptainer (formerly Singularity): the HPC-native
container runtime - unprivileged, image-file based, GPU-aware.
Build once (possibly from a Docker image), run identically on any
cluster; pairs with rseng-reproducible-environments for the build
recipe.
- EESSI: a shared, optimized, ready-to-use scientific software
stack streamed to any cluster or laptop - when available it gives
identical software everywhere without building anything.
- Module system (module avail / module load): the site's curated
builds; record exact module versions in the job script - an
unversioned
module load Python is a reproducibility hole.
Never pip-install into the home directory as the primary strategy;
quota, node-architecture and reproducibility problems follow.
Parallelism: pick the right kind
- Independent runs (sweeps, bootstraps, per-file processing): job
arrays or a workflow engine - no MPI needed. This covers most
research workloads.
- Single-node parallelism: threads/multiprocessing;
--cpus-per-task, and pin BLAS/OpenMP thread counts to match.
- Multi-node tightly-coupled computation: MPI (mpi4py or native),
launched with srun; requires the code to be written for it.
Distributed data processing frameworks are their own path
(rseng-big-data-processing).
Scaling discipline: measure strong/weak scaling on small counts
before requesting large allocations; doubling cores that yield 1.2x
wastes everyone's allocation
(rseng-performance-profiling for the measurement).
Cluster citizenship and data
- Filesystems differ: home (small, backed up), project (shared),
scratch (fast, purged) - stage data to scratch for jobs, move
results back, and script the staging (rseng-data-management).
- Transfer with rsync (resumable) or the site's data-transfer nodes;
never leave the only copy of results on scratch.
- Read the site's own docs first; when the user's cluster is known,
prefer its conventions over anything generic, including this
skill.
Working with this skill
This skill is source-independent: its authority is the scheduler,
container and software-stack documentation linked below, plus each
cluster's local documentation.
Learn more (verified):
Related skills
Check whether any of these applies before moving on:
- rseng-big-data-processing - distributed data framework path
- rseng-data-management - staging data across cluster filesystems
- rseng-green-computing - honest requests save energy
- rseng-performance-profiling - measure scaling before allocating
- rseng-reproducible-environments - containers and pinned modules
- rseng-workflows - sweeps via workflow engines
1---2name: rseng-hpc-computing3description: Covers working effectively on high-performance computing clusters: writing and debugging SLURM job scripts, choosing and requesting resources honestly, running containers with Apptainer, using module systems and EESSI software stacks, MPI basics, checkpointing, and scaling from laptop to cluster reproducibly. Use when the user mentions a cluster, supercomputer, SLURM, sbatch, MPI, Apptainer or Singularity, module load, job arrays or walltime, or when a compute workload has outgrown a single machine. (Larger-than-memory data processing with Dask or Spark is rseng-big-data-processing; measuring scaling before requesting allocations is rseng-performance-profiling.)4license: CC-BY-4.05---67# Research computing on HPC clusters89HPC clusters are where much research code actually runs, and they10invert desktop habits: you do not run programs, you request resources11and submit batch jobs; you do not install software, you load modules12or bring containers; the login node is a shared hallway, not a13workstation. An agent's job is to translate the user's computation14into this model correctly and reproducibly - and to respect that15every cluster has local documentation that overrides generic advice.1617## Batch jobs done right (SLURM)1819A job script is a shell script with resource directives:2021```bash22#!/bin/bash23#SBATCH --job-name=fit-model24#SBATCH --time=02:00:0025#SBATCH --nodes=126#SBATCH --ntasks=127#SBATCH --cpus-per-task=828#SBATCH --mem=16G29#SBATCH --output=logs/%x-%j.out3031module load Python/3.1232srun python fit_model.py --config configs/run.yaml33```3435Practices that matter:3637- Request honestly: measure a pilot run, then set time/memory with38 modest headroom. Over-requesting wastes allocation and queue39 priority (and energy - rseng-green-computing); under-requesting40 kills jobs at 99%.41- Never compute on the login node; test with a short interactive42 allocation (srun --pty or salloc) instead.43- Parameter sweeps are job arrays (--array=0-99), not 100 submitted44 scripts; index into a config list with $SLURM_ARRAY_TASK_ID45 (externalized run configs pair naturally with rseng-workflows).46- Long jobs checkpoint: clusters preempt and nodes fail; save47 restartable state at intervals and make the script resume from the48 last checkpoint.49- Log usefully: %x-%j names, and `seff JOBID` after completion to50 compare requested vs used resources - feed that back into the next51 request.5253## Software environments on clusters5455Three layers, in order of preference for reproducibility:56571. Containers with Apptainer (formerly Singularity): the HPC-native58 container runtime - unprivileged, image-file based, GPU-aware.59 Build once (possibly from a Docker image), run identically on any60 cluster; pairs with rseng-reproducible-environments for the build61 recipe.622. EESSI: a shared, optimized, ready-to-use scientific software63 stack streamed to any cluster or laptop - when available it gives64 identical software everywhere without building anything.653. Module system (module avail / module load): the site's curated66 builds; record exact module versions in the job script - an67 unversioned `module load Python` is a reproducibility hole.6869Never pip-install into the home directory as the primary strategy;70quota, node-architecture and reproducibility problems follow.7172## Parallelism: pick the right kind7374- Independent runs (sweeps, bootstraps, per-file processing): job75 arrays or a workflow engine - no MPI needed. This covers most76 research workloads.77- Single-node parallelism: threads/multiprocessing;78 --cpus-per-task, and pin BLAS/OpenMP thread counts to match.79- Multi-node tightly-coupled computation: MPI (mpi4py or native),80 launched with srun; requires the code to be written for it.81 Distributed data processing frameworks are their own path82 (rseng-big-data-processing).8384Scaling discipline: measure strong/weak scaling on small counts85before requesting large allocations; doubling cores that yield 1.2x86wastes everyone's allocation87(rseng-performance-profiling for the measurement).8889## Cluster citizenship and data9091- Filesystems differ: home (small, backed up), project (shared),92 scratch (fast, purged) - stage data to scratch for jobs, move93 results back, and script the staging (rseng-data-management).94- Transfer with rsync (resumable) or the site's data-transfer nodes;95 never leave the only copy of results on scratch.96- Read the site's own docs first; when the user's cluster is known,97 prefer its conventions over anything generic, including this98 skill.99100## Working with this skill101102This skill is source-independent: its authority is the scheduler,103container and software-stack documentation linked below, plus each104cluster's local documentation.105106Learn more (verified):107 - https://slurm.schedmd.com - SLURM documentation108 - https://apptainer.org - Apptainer container runtime109 - https://www.eessi.io/docs/ - EESSI shared software stack110 - https://carpentries-incubator.github.io/hpc-intro/ - HPC111 Carpentry introduction112 - https://coderefinery.github.io/TTT4HPC_parallel_workflows/ -113 CodeRefinery tuesday-tools lessons on HPC workflows114115<!-- related-skills:begin -->116117## Related skills118119Check whether any of these applies before moving on:120121- rseng-big-data-processing - distributed data framework path122- rseng-data-management - staging data across cluster filesystems123- rseng-green-computing - honest requests save energy124- rseng-performance-profiling - measure scaling before allocating125- rseng-reproducible-environments - containers and pinned modules126- rseng-workflows - sweeps via workflow engines127128<!-- related-skills:end -->