aurora
Skill30 starsChanged 51 days agoBSD-2-ClauseView on GitHub
ALCF Aurora supercomputer at Argonne National Laboratory. Use when submitting PBS jobs on Aurora, choosing a queue (debug, debug-scaling, capacity, prod), declaring filesystems (-l filesystems=home:flare, daos_user), binding MPI ranks to CPU cores and Intel Data Center GPU Max (Ponte Vecchio) GPUs or GPU tiles (6 GPUs / 12 tiles per node, gpu_tile_compact.sh, ZE_AFFINITY_MASK), launching with mpiexec (Cray PALS), building with the oneAPI compilers and Aurora MPICH (icx/icpx/ifx, mpicc/mpicxx/mpifort, SYCL, OpenMP offload), using DAOS or the Flare Lustre filesystem, or loading Aurora modules (oneapi, frameworks, /soft).
- Installs packages
2 other projects use a version of this.
Adopted by
Most recently taken up by
- lucasdudz-jpg/Skill-Auroratheir own version, first seen Aug 2, 2026
- tonylofgren/aurora-smart-hometheir own version, first seen Jan 2, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- tonylofgren/aurora-smart-home★ 109same name
- lucasdudz-jpg/Skill-Aurora★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository30 other files it gives its agents.
- skills/academy/agents.mdAGENTS.md
- academySkill
- amsc-data-movement-apiSkill
- amsc-magSkill
- amsc-python-clientSkill
- globus-computeSkill
- i2-apiSkill
- iri-apiSkill
- skill-explorerSkill
- croissant-validatorSkill
- datacard-generatorSkill
- hdmf-schema-builderSkill
- skill-creatorSkill
- well-convertSkill
- card-eval-updaterSkill
- agentic-vulnerabilities-scanSkill
- ai-fingerprintSkill
- battleprintSkill
- fingerprintingSkill
- uncertainty-quantificationSkill
- uq-metrics-evaluatorSkill
- skill-searchSkill
- frontierSkill
- pbsSkill
- perlmutterSkill
- slurmSkill
- literature-searchSkill
- multi-agent-systemsSkill
- gkeyllSkill
- gs2Skill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Only qdel, qhold, or qalter jobs this session submitted, or jobs the user names.
- Very specific: line 32
Prefer debug with a short walltime for first runs of a new script.
- Very specific: line 54
Every job needs these three, or qsub rejects it immediately:
- Very specific: line 149
Use -J, not -t (Torque syntax.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Aurora — ALCF Supercomputer
Aurora is Argonne National Laboratory's Intel-GPU exascale system (HPE Cray EX). It uses PBS Pro for scheduling and Cray PALS mpiexec to launch parallel jobs. There is no Slurm and no srun.
Queue limits, module versions, and filesystem names change. The values below were checked on Aurora in October 2026; confirm current values with the commands in Checking Live Configuration before relying on them.
Safety
- Show the user the job script (or
qsubcommand) and the project it will charge, and get confirmation before runningqsub. Each job charges node-hours for every node requested, for the walltime used. - Only
qdel,qhold, orqalterjobs this session submitted, or jobs the user names. - Prefer
debugwith a short walltime for first runs of a new script.
System Overview
| Component | Specification |
| Nodes | 10,624 compute nodes in 166 racks (64 nodes per rack) |
| CPU | 2× Intel Xeon CPU Max 9470C per node: 52 cores × 2 hyperthreads each, 512 GB DDR5 + 64 GB HBM per socket |
| GPU | 6× Intel Data Center GPU Max 1550 (Ponte Vecchio, PVC) per node; each GPU has 2 tiles = 12 tiles per node |
| GPU memory | 128 GB HBM2e per GPU (64 GB per tile), 768 GB per node |
| Network | HPE Slingshot-11, 8 NICs per node, dragonfly (one rack = one dragonfly group) |
| Storage | Flare Lustre (91 PB, /lus/flare/projects), DAOS object store (~200 PB usable), Gecko Lustre for /home |
Node Layout You Must Know
- Socket 0 owns cores 0–51 (hyperthreads 104–155) and GPUs 0, 1, 2. Socket 1 owns cores 52–103 (hyperthreads 156–207) and GPUs 3, 4, 5.
- Cores 0 and 52 (hardware threads 0, 104, 52, 156) are reserved for the OS. Only 102 physical cores are available to applications: 1–51 and 53–103.
- Each GPU exposes 2 tiles (also called stacks). By default (
ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE), SYCL and Level Zero see 6 devices, each with 2 sub-devices. Theframeworks(Python AI/ML) module setsFLAT, which exposes 12 devices, one per tile. - The most common layout is 12 MPI ranks per node, one per tile. The second most common is 6 ranks per node, one per GPU.
Critical Requirements
Every job needs these three, or qsub rejects it immediately:
#PBS -A <project> # allocation/project name
#PBS -l walltime=HH:MM:SS
#PBS -l filesystems=home:flare # every filesystem the job touches- Filesystem names on Aurora:
home,flare,daos_user,daos_perf(only for teams ALCF has approved). A submit hook maps each to a PBS resource (home_fs,flare_fs, ...), sohome_fs:flare_fsanddaos_user_fsare also accepted.grandandeagleare Polaris filesystems and are not mounted on Aurora. - Missing
filesystems→qsub: Resource: filesystems is required to be set. - An unknown name →
qsub: Invalid filesystem identifiers grand, eagle
Strongly recommended:
#PBS -l select=<nodes> # nodes are allocated whole; no ncpus/ngpus needed
#PBS -l place=scatter
#PBS -q <queue>Request nodes, not cores. Nodes are exclusive (sharing = force_exclhost), so you always get the whole node. In PBS, ncpus counts hardware threads (208 per node), not cores. -l select=1:ncpus=52:ngpus=3 is accepted but still allocates and charges for a full node. Use -l select=N.
Submit jobs from your project directory (/lus/flare/projects/<project>), not from $HOME. Never submit from /soft/modulefiles; an interactive job started there ends abruptly.
Queues
Submit to debug, debug-scaling, capacity, prod, or visualization. prod is a routing queue: you cannot submit to small, medium, or large directly.
| Queue | Nodes | Max walltime | Per-user limits | Notes |
debug | 1–2 | 1 hr | 1 job (running or queued) | 64-node pool; nodes may be shared |
debug-scaling | up to 256 | 1 hr | 1 job (running or queued) | Scaling tests and small multi-node runs |
capacity | 1–16 | 168 hr (7 days) | 2 running, 5 queued | 512 nodes total across all users |
prod → small | 256–1,024 | 12 hr | Routed automatically by node count | |
prod → medium | 1,025–1,999 | 18 hr | ||
prod → large | 2,000–10,624 | 24 hr | ||
visualization | 1–32 | 8 hr | 1 running | By request only |
prodrejects jobs under 256 nodes:qsub: Job violates queue and/or server resource limits. For 3–255 nodes usedebug-scaling(≤1 hr) orcapacity(≤16 nodes). Aurora has no small-node production queue.- Jobs from projects with a negative allocation balance are routed to
backfill-small,backfill-medium, orbackfill-large, which run at low priority. - Per project, each
prodexecution queue (small,medium,large) holds at most 10 jobs (max_queued=[p:PBS_GENERIC=10], which counts running and waiting jobs). Further jobs wait in theprodrouting queue, up to 100 per project. prod-largealso exists: a routing queue for ≥1,920-node jobs that feedslargeandbackfill-large.
Minimal Job Script — 12 Ranks per Node, One per GPU Tile
#!/bin/bash -l
#PBS -N myjob
#PBS -A <project>
#PBS -q debug
#PBS -l select=2
#PBS -l place=scatter
#PBS -l walltime=00:30:00
#PBS -l filesystems=home:flare
#PBS -k doe
#PBS -j oe
cd ${PBS_O_WORKDIR}
NNODES=$(wc -l < ${PBS_NODEFILE})
NRANKS_PER_NODE=12
NTOTRANKS=$(( NNODES * NRANKS_PER_NODE ))
# 8 physical cores per rank, 6 ranks per socket, skipping reserved cores 0 and 52
CPU_BIND="list:1-8:9-16:17-24:25-32:33-40:41-48:53-60:61-68:69-76:77-84:85-92:93-100"
export OMP_NUM_THREADS=1
# gpu_tile_compact.sh (on the default PATH) sets ZE_AFFINITY_MASK so that
# local rank 0 -> GPU 0 tile 0, rank 1 -> GPU 0 tile 1, ..., rank 11 -> GPU 5 tile 1
mpiexec -n ${NTOTRANKS} --ppn ${NRANKS_PER_NODE} --cpu-bind=${CPU_BIND} \
gpu_tile_compact.sh ./my_gpu_appThe oneAPI compilers and Aurora MPICH are loaded by default. You do not need a module load for a plain SYCL, OpenMP, or MPI application.
For 6 ranks per node (one per whole GPU), use gpu_dev_compact.sh and --cpu-bind=list:1-16:17-32:33-48:53-68:69-84:85-100. See references/gpu-affinity.md for hybrid MPI+OpenMP, --gpu-bind, FLAT mode, and multiple compute command streamers (CCS).
Quick PBS Reference
qsub script.sh # submit
qsub -I -l select=1 -l walltime=1:00:00 -l filesystems=home:flare -A <project> -q debug # interactive
qstat -u $USER # your jobs
qstat -f <jobid> # full detail, including the "comment" field explaining why a job is not running
qstat -x -f <jobid> # finished jobs
qdel <jobid> # cancel
qhold <jobid> / qrls <jobid> # hold / release
qalter -l walltime=02:00:00 <jobid> # modify a queued jobJob states: Q queued, R running, H held, E exiting, F finished (shown with qstat -x), B array job with subjobs started.
Job Arrays
Use -J, not -t (Torque syntax; Aurora's qsub rejects it with invalid option -- 't'). Arrays also need -r y: under the server default -r n, qsub prints cannot submit non-rerunable Array Job followed by qsub: directive error: -k doe -r n -W umask.
#PBS -J 1-50%5 # indices 1..50, at most 5 running at once
#PBS -r y # required for arrays on Aurora
# inside the job: ${PBS_ARRAY_INDEX}Every subjob counts toward the queue's per-user queued limit, even with a %N throttle. In capacity (5 queued per user), -J 1-5 is accepted, but -J 1-6 and -J 1-20%2 are rejected with would exceed queue generic's per-user limit. debug and debug-scaling allow only 1 job. For more than 5 cases, pack several cases into one multi-node job, or use a workflow tool.
mpiexec Essentials
mpiexec comes from Cray PALS. Common options:
| Option | Effect |
-n N / --np N | Total ranks |
--ppn N / -ppn N | Ranks per node |
--depth=D | Hardware threads per rank (used with --cpu-bind=depth) |
--cpu-bind=list:a-b:c-d:... | Explicit per-rank CPU sets (recommended on Aurora) |
--cpu-bind=depth | Consecutive blocks of --depth threads, skipping reserved cores; can split a rank across sockets |
--gpu-bind=list:0.0:0.1:... | Per-rank tile visibility (alternative to gpu_tile_compact.sh); list:0:1:2:3:4:5 binds whole GPUs |
--env VAR=VAL | Set an environment variable for the ranks (--genvall, export everything, is the default) |
--hostfile FILE | Node list (defaults to $PBS_NODEFILE) |
--no-vni | Skip Slingshot VNI allocation (currently required for DAOS jobs) |
--line-buffer, --label | Readable output |
--gpu-bind accepts only none, per_task:<n>, single:<n>, and list:<list>. Anything else, such as closest or map_gpu: (Slurm syntax), fails at launch with Invalid GPU visibility keyword and exit code 127.
Modules
The default environment already loads oneapi/release/<version>, mpich, cray-pals, libfabric, and gcc. Common commands:
module -t list # what is loaded
module avail oneapi # alternative oneAPI releases
module load cmake hdf5 # Spack PE packages in the default path
module load frameworks # THE way to get Python: PyTorch, TensorFlow, vLLM, mpi4py, ... (sets ZE_FLAT_DEVICE_HIERARCHY=FLAT)
module use /soft/modulefiles # extra software outside the PE: daos, kokkos, ...
module load daos # needs /soft/modulefiles- For any Python work, start with
module load frameworks. If you need extra packages, layer a venv on it (python3 -m venv --system-site-packages). Do not use the Spack PEpythonmodule or your own conda install for applications. The Spackpythonexists as a dependency of other Spack packages, and mixing it withframeworkscauses conflicts. - There is no
PrgEnv-*,cray-mpich, or Intel MPI on Aurora. MPI is Aurora MPICH, with the wrappersmpicc,mpicxx, andmpifort. - Loading libraries from
/softor project directories at large node counts is slow. See Copper in references/programming-env.md.
Checking Live Configuration
qstat -Qf <queue> # resources_min/max.nodect, walltime, max_run, max_queued
qstat -Bf | grep -A2 valid_filesystems
pbsnodes -av | less # resources_available.ncpus/ngpus, state
module -t list
myquota # home and project quotasCommon Gotchas
- Small job in
prod→ rejected below 256 nodes. Usedebug,debug-scaling, orcapacity. - More than 2 nodes in
debug→ rejected. Usedebug-scaling. - A second
debugordebug-scalingjob →would exceed queue generic's per-user limit of jobs in 'Q' state. grand/eagleinfilesystems→ rejected. They are not mounted on Aurora.- No GPU binding → every rank sees all 6 GPUs and the runtime picks device 0, so all ranks on a node pile onto one GPU. Use
gpu_tile_compact.shorgpu_dev_compact.sh, or setZE_AFFINITY_MASKper rank. --cpu-bind=depthwithout--depth→ each rank gets one hardware thread, so OpenMP threads all share it.--cpu-bind=depth:17is silently ignored in the same way; the thread count goes in--depth=17.- Binding to core 0 or 52 → launch fails (
cpubind list:0[0] has fewer CPUs (0) than depth (1)). Those cores are reserved; start lists at 1 and 53. - PyTorch DDP with
backend="ccl"→ fails inframeworks/2026.1.0withUnknown backend type ccl. Usebackend="xccl"; nooneccl_bindings_for_pytorchimport is needed. See the DDP setup in references/job-scripts.md. module load pythonor a personal conda/pip install for Python apps → usemodule load frameworks(plus a--system-site-packagesvenv if needed).srun,mpifc,mpiicx,I_MPI_*variables → none of these exist or apply on Aurora.- Job arrays without
-r y→ rejected. - Expecting PBS email (
-m be,-M) → email notifications are not currently enabled on Aurora. Check jobs withqstat(qstat -xonce finished), or have the script write its own completion marker. - Compute nodes have no direct internet access → set
http_proxy/https_proxytohttp://proxy.alcf.anl.gov:3128. - Multiple
mpiexeccalls in one script → check each exit code. Node or network failures can return non-zero.
Additional Resources
- Annotated job scripts (debug, debug-scaling, capacity, prod, arrays, DAOS, Python, multiple apps per node): references/job-scripts.md
- CPU and GPU affinity, tiles,
ZE_AFFINITY_MASK, CCS, HBM: references/gpu-affinity.md - Compilers, SYCL/OpenMP offload flags, MPICH, MKL, Python, profiling: references/programming-env.md
- Home, Flare, DAOS, Globus: references/storage.md
- ALCF docs: https://docs.alcf.anl.gov/aurora/ (running jobs: https://docs.alcf.anl.gov/aurora/running-jobs-aurora/)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

