Kestrel Job Partitions and Scheduling Policies
Learn about job partitions and policies for scheduling jobs on Kestrel.
Kestrel Compute Nodes
There are two general types of compute nodes on Kestrel: CPU nodes and GPU nodes. These nodes can be further broken down into four categories, listed on the Kestrel System Configuration Page.
CPU Nodes
Standard CPU-based compute nodes on Kestrel have 104 cores and 240G of usable RAM. 256 of those nodes have a 1.7TB NVMe local disk. There are also 10 bigmem nodes with 2TB of RAM and 5.6TB NVMe local disk.
GPU Nodes
Kestrel has 132 GPU nodes with 4 NVIDIA H100 GPUs, each with 80GB memory. These have Dual socket AMD Genoa 64-core processors (128 cores total) with about 350G of usable RAM. The GPU nodes also have 3.4TB of NVMe local disk.
Warning
You should use a login node that matches the architecture of the compute nodes that your jobs will be running on for compiling software and submitting jobs.
Using Node Local Storage
The majority of CPU nodes do not have local disk storage, but there are 256 nodes with fast local NVMe drives for temporary storage by jobs with high disk I/O requirements. To request nodes with local disk, use the --tmp
option in your job submission script (e.g. --tmp=1600000
). When your job is allocated nodes with local disk, the storage may then be accessed inside the job by using the $TMPDIR
environment variable as the path. Be aware that on nodes without local disk, writing to $TMPDIR
will consume RAM, reducing the available memory for running processes.
Note that all of the Bigmem and H100 GPU nodes have real local disk.
Partitions
Kestrel nodes are associated with one or more partitions. Each partition is associated with one or more job characteristics, which include run time, per-node memory requirements, and per-node local scratch disk requirements.
Excluding the shared and debug partitions, jobs will be automatically routed to the appropriate partitions by Slurm based on node quantity, walltime, hardware features, and other aspects specified in the submission. Jobs will have access to the largest number of nodes, thus shortest wait, if the partition is not specified during job submission..
The following table summarizes the partitions on Kestrel:
Partition Name |
Description |
Limits |
Placement Condition |
debug |
Nodes dedicated to developing and troubleshooting jobs. Debug nodes with each of the non-standard hardware configurations are available. The node-type distribution is: - 2 bigmem nodes - 2 nodes with 1.7 TB NVMe - 4 standard nodes - 2 GPU nodes (shared) 10 total nodes |
- 1 job with a max of 2 nodes per user. - 2 GPUs per user. - 1/2 GPU node resources per user (Across 1-2 nodes). - 01:00:00 max walltime. |
-p debug or --partition=debug |
short |
Nodes that prefer jobs with walltimes <= 4 hours. |
2016 nodes total. No limit per user. |
--time <= 4:00:00
--mem <= 246064 --tmp <= 1700000 (256 nodes) |
standard |
Nodes that prefer jobs with walltimes <= 2 days. |
2106 nodes total. 1050 nodes per user. |
--mem <= 246064 --tmp <= 1700000 |
long |
Nodes that prefer jobs with walltimes > 2 days. Maximum walltime of any job is 10 days |
525 nodes total. 262 nodes per user. |
--time <= 10-00
--mem <= 246064
--tmp <= 1700000 (256 nodes) |
bigmem |
Nodes that have 2 TB of RAM and 5.6 TB NVMe local disk. |
8 nodes total. 4 nodes per user. |
--mem > 246064 --time <= 2-00
--tmp > 1700000 |
bigmeml |
Bigmem nodes that prefer jobs with walltimes > 2 days. Maximum walltime of any job is 10 days. |
4 nodes total. 3 nodes per user. |
--mem > 246064
--time > 2-00
--tmp > 1700000 |
shared |
Nodes that can be shared by multiple users and jobs. |
64 nodes total. Half of partition per user. 2 days max walltime. |
-p shared or --partition=shared |
sharedl |
Nodes that can be shared by multiple users and prefer jobs with walltimes > 2 days. |
16 nodes total. 8 nodes per user. |
-p sharedl or --partition=sharedl |
gpu-h100 |
Shareable GPU nodes with 4 NVIDIA H100 SXM 80GB Computational Accelerators. |
130 nodes total. 65 nodes per user. |
1 <= --gpus <= 4 --time <= 2-00 |
gpu-h100s |
Shareable GPU nodes that prefer jobs with walltimes <= 4 hours. |
130 nodes total. 65 nodes per user. |
1 <= --gpus <= 4 --time <= 4:00:00 |
gpu-h100l |
Shareable GPU nodes that prefer jobs with walltimes > 2 days. |
26 GPU nodes total. 13 GPU nodes per user. |
1 <= --gpus <= 4 --time > 2-00 |
Use the option listed above on the srun
, sbatch
, or salloc
command or in your job script to specify what resources your job requires.
For more information on running jobs and Slurm job scheduling, please see the Slurm documentation section.
Shared Node Partition
Nodes in the shared partition can be shared by multiple users or jobs. This partition is intended for jobs that do not require a whole node.
Tip
Testing at NREL has been done to evaluate the performance of VASP using shared nodes. Please see the VASP page for specific recommendations.
Usage
Currently, there are 64 standard compute nodes available in the shared partition. These nodes have about 240G of usable RAM and 104 cores. By default, your job will be allocated about 1G of RAM per core requested. To change this amount, you can use the --mem
or --mem-per-cpu
flag in your job submission. To allocate all of the memory available on a node, use the --mem=0
flag.
Sample batch script for a job in the shared partition
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --partition=shared
#SBATCH --time=2:00:00
#SBATCH --ntasks=26 # CPUs requested for job
#SBATCH --mem-per-cpu=2000 # Request 2GB per core.
#SBATCH --account=<allocation handle>
cd /scratch/$USER
srun ./my_progam # Use your application's commands here
GPU Jobs
Each GPU node has 4 NVIDIA H100 GPUs (80 GB), 128 CPU cores, and 350GB of useable RAM. All of the GPU nodes are shared. We highly recommend considering the use of partial GPU nodes if possible in order to efficiently use the GPU nodes and your AUs.
To request use of a GPU, use the flag --gpus=<quantity>
with sbatch, srun, or salloc, or add it as an #SBATCH
directive in your sbatch submit script, where <quantity>
is a number from 1 to 4. All of the GPU memory for each GPU allocated will be available to the job (80 GB per GPU).
If your job will require more than the default 1 CPU core and 1G of CPU RAM per core allocated, you must request the quantity of cores and/or RAM that you will need, by using additional flags such as --ntasks=
or --mem=
. To request all of the memory available on the GPU node, use --mem=0
.
The GPU nodes also have 3.4 TB of local disk space. Note that other jobs running on the same GPU node could also be using this space. Slurm is unable to divide this space to separate jobs on the same node like it does for memory or CPUs. If you need to ensure that your job has exclusive access to all of the disk space, you'll need to use the --exclusive
flag to prevent the node from being shared with other jobs.
Warning
A job with the --exclusive
flag will be allocated all of the CPUs and GPUs on a node, but is only allocated as much memory as requested. Use the flag --mem=0
to request all of the CPU RAM on the node.
GPU Debug Jobs
There are two shared GPU nodes available for debugging. To use them, specify --partition=debug
in your job script. In addition to the limits for the debug
partition, 1 job per user, up to 2 nodes per user, up to 1 hour of walltime, a single GPU job is also limited to half of a total GPU node's resources. This is equivalent to 64 CPU cores, 2 GPUs, and 180G of RAM, which can be spread across 1 or 2 nodes. Unlike the other GPU nodes, the GPU debug nodes can't be used exclusively, so the --exclusive
flag can't be used for debug GPU jobs.
Allocation Unit (AU) Charges
The equation for calculating the AU cost of a job is:
AU cost = (Walltime in hours * Number of Nodes * QoS Factor * Charge Factor)
The CPU node charge factor is 10, and the GPU node charge factor is 100.
On shared nodes (nodes in the shared
partition and GPU nodes), the value for Number of Nodes
can be a fraction of a node. This value will be calculated based on either the number of cores, amount of memory, or the number of GPUs (on GPU nodes), whichever is a greater percentage of the total of that resource available on the node.
Example Job Cost Calculation - CPU shared
For example, if you request 123032M of RAM (half of the available RAM on the node), and 26 cores, you will be billed 5 AUs per node hour.
# To determine the Number of Nodes value:
123032/246064 = 0.5
26/104 = 0.25
Number of Nodes = 0.5
# Final calculation
1 hour walltime * 0.5 nodes * 1 QoS Factor * 10 Charge Factor = 5 AUs
Example Job Cost Calculation - GPU
For example, if you request 270000M of RAM, 32 cores, and 2 GPUs you will be billed 75 AUs per node hour.
# To determine the Number of Nodes value:
# CPU RAM
270000/360000 0.75
# CPU Cores
32/128 = 0.25
# GPUs
2/4 = 0.5
Number of Nodes = 0.75
# Final calculation
1 hour walltime * 0.75 nodes * 1 QoS Factor * 100 Charge Factor = 75 AUs
If a job requests the maximum amount of any resource type available on the node (CPUs, GPUs, RAM), it will be charged with the full charge factor (10 or 100).
Please see this page for our most up-to-date performance recommendations on Kestrel.