The oums-quantopo group (lead by Simon Benjamin) has privileged access to the short partition in ARCUS-C.
The hardware in the short partition includes:
-
45 CPU nodes (SR630), each with:
- 48 core (96 threads) CPU (two Xeon 8268, 2.9GHz, 72MB cache)
- 384GB RAM
-
8 GPU nodes (SR670) with:
-
Network fabric (QM8700):
- 16 Tb/s bandwidth
- <130 ns latency
These nodes live in arc-c, accessible from gateway ARC network oscgate.arc.ox.ac.uk. Access from outside of the Oxford University network may first require VPN to server vpn.ox.ac.uk (using oxfordusername@ox.ac.uk).
Access using your regular ARC account [USER] by two tunnels:
ssh [USER]@gateway.arc.ox.ac.ukthen
ssh [USER]@arc-loginThis is the level from which jobs should be submitted.
From arc-login, one can submit SLURM jobs to the CPU or GPU nodes. See here for a general guide on submitting and parallelising jobs. Below describes only the specifics to ARCUS-C.
arc-login can be used to submit jobs both to arcus-htc and to arc-c, so it is important to specify from within the submit script that you want the job to run on the new nodes, otherwise the scheduler may change the location depending on availability. The flags below should always be present to ensure that the job is run on the new nodes, with no time restrictions:
#!/bin/bash
#SBATCH --account=oums-quantopo
#SBATCH --partition=short
#SBATCH --constraint=cpu_gen:Cascade_Lake
#SBATCH --constraint=cpu_sku:Platinum_8628
#SBATCH --clusters=arc -
To request a single CPU core for an hour, create submission script
submit.shwith contents:#!/bin/bash #SBATCH --account=oums-quantopo #SBATCH --partition=short #SBATCH --constraint=cpu_gen:Cascade_Lake #SBATCH --constraint=cpu_sku:Platinum_8628 #SBATCH --clusters=arc #SBATCH --nodes=1 #SBATCH --time=1:00:00 ./my_executable
and submit it with
sbatch submit.sh.Note that (unlike ARCUS-B), this job runs on a single CPU core despite
--nodes=1; the remaining cores (and possibly GPU resources) remain available for other jobs. -
To reserve the entire node and use all 96 hardware threads, use
#SBATCH --exclusive -
In the submission script, it is important to remember to add
export OMP_NUM_THREADS=10to use the required number of threads on a given job
-
To request a GPU, merely add
--gres=gpu:1to the CPU script:#!/bin/bash #SBATCH --account=oums-quantopo #SBATCH --partition=short #SBATCH --constraint=cpu_gen:Cascade_Lake #SBATCH --constraint=cpu_sku:Platinum_8628 #SBATCH --clusters=arc #SBATCH --nodes=1 #SBATCH --gres=gpu:1 #SBATCH --time=1:00:00 ./my_executable
This will reserve a single CPU core and a single GPU.
-
To reserve both GPUs on a node, use
#SBATCH --gres=gpu:2 -
To reserve an entire GPU node (all cores, both GPUs), use:
#SBATCH --gres=gpu:2 #SBATCH --exclusive
One can submit to a specific node, so that for example they could directly SSH into the node during the job, via:
#SBATCH --nodelist=arc-c[001]The CPU nodes are available at arc-c[001-045], and the GPU nodes at arc-c[001-008].
Though it is not currently the case, the memory allocation per job may be hard-restricted. For this reason, it is advisable to specify the required memory per node in the submit script, using:
#SBATCH --mem=<memory_in_MB>Load the required compiler for compilation. These are listed using module avail mpi, and the specific module should be loaded using module load <moduleName>
The number of MPI ranks per node (which should usually be 1) can be set using:
#SBATCH --ntasks-per-node=1And the number of nodes using:
#SBATCH --nodes=<numNodes>There are also a number of flags that must always be added to a submission script to enable a distributed run. These are:
export UCX_IB_MLX5_DEVX=n
export I_MPI_DEBUG=9
export FI_PROVIDER=mlx
export OMP_NUM_THREADS=<numThreads>In the submission script, the appropriate MPI module should also be loaded using
module load moduleNameAnd the executable should be run using
mpirun -np <numNodes> my_executableView the jobs running and waiting for these specific nodes with
squeue --nodelist=arc-c[001-045]For a job that is to run for 1 hour on a single core of a single node:
#!/bin/bash
#SBATCH --account=oums-quantopo
#SBATCH --partition=short
#SBATCH --constraint=cpu_gen:Cascade_Lake
#SBATCH --constraint=cpu_sku:Platinum_8628
#SBATCH --clusters=arc
#SBATCH --nodes=1
#SBATCH --time=1:00:00
./my_executableFor a job that is to run with a limit of 24 hours, using 48 threads on each of 8 nodes, requiring 384GB per node:
#!/bin/bash
#SBATCH --account=oums-quantopo
#SBATCH --partition=short
#SBATCH --constraint=cpu_gen:Cascade_Lake
#SBATCH --constraint=cpu_sku:Platinum_8628
#SBATCH --clusters=arc
#SBATCH --nodes=8
#SBATCH --time=24:00:00
#SBATCH --ntasks-per-node=1
#SBATCH --exclusive
#SBATCH --mem=384000
export UCX_IB_MLX5_DEVX=n
export I_MPI_DEBUG=9
export FI_PROVIDER=mlx
export OMP_NUM_THREADS=48
module load OpenMPI/4.0.3-GCC-9.3.0
mpirun -np 8 my_executable