Memory limit
A small portion of the total physical memory on each node is reserved for distributed processes. The actual physical memory available to user jobs is tabulated below.
Summary
Node type | default and max memory per core | max memory per node |
---|---|---|
Skylake 40 core - regular compute | 4.449 GB | 177.96 GB |
Cascade Lake 48 core - regular compute | 3.708 GB | 177.98 GB |
large memory | 15.5 GB | 744 GB |
huge memory | 37.362 GB | 2988.98 GB |
Skylake 40 core dual gpu | 9.074 GB | 363 GB |
Cascade 48 core dual gpu | 7.562 GB | 363 GB |
quad gpu (48 core) | 15.5 GB |
744 GB |
A job may request more than the max memory per core, but the job will be allocated more cores to satisfy the memory request instead of just more memory.
e.g. The following slurm directives will actually grant this job 3 cores, with 10 GB of memory
(since 2 cores * 4.5 GB = 9 GB doesn't satisfy the memory request).#SBATCH --ntasks-per-node=2
#SBATCH --mem=10g
It is recommended to let the default memory apply unless more control over memory is needed.
Note that if an entire node is requested, then the job is automatically granted the entire node's main memory. On the other hand, if a partial node is requested, then memory is granted based on the default memory per core.
See a more detailed explanation below.
Regular Compute Node
- For the regular 'Skylake' processor-based node, it has 40 cores/node. The physical memory equates to 4.8 GB/core or 192 GB/node; while the usable memory equates to 4,556 MB/core or 182,240 MB/node (177.96 GB/node).
- For the regular 'Cascade Lake' processor-based node, it has 48 cores/node. The physical memory equates to 4.0 GB/core or 192 GB/node; while the usable memory equates to 3,797 MB/core or 182,256 MB/node (177.98 GB/node).
Jobs requesting no more than 1 node
If your job requests less than a full node, it may be scheduled on a node with other running jobs. In this case, your job is entitled to a memory allocation proportional to the number of cores requested (4,556 MB/core or 3,797 MB/core depending on which type of node your job lands on). For example, without any memory request ( --mem=XX
):
- A job that requests
--ntasks-per-node=1
and lands on a 'Skylake' node will be assigned one core and should use no more than 4556 MB of RAM; a job that requests--ntasks-per-node=1
and lands on a 'Cascade Lake' node will be assigned one core and should use no more than 3797 MB of RAM - A job that requests
--ntasks-per-node=3
and lands on a 'Skylake' node will be assigned 3 cores and should use no more than 3*4556 MB of RAM; a job that requests--ntasks-per-node=3
and lands on a 'Cascade Lake' node will be assigned 3 cores and should use no more than 3*3797 MB of RAM - A job that requests
--ntasks-per-node=40
and lands on a 'Skylake' node will be assigned the whole node (40 cores) with 178 GB of RAM; a job that requests--ntasks-per-node=40
and lands on a 'Cascade Lake' node will be assigned 40 cores (partial node) and should use no more than 40* 3797 MB of RAM - A job that requests
--exclusive
and lands on a 'Skylake' node will be assigned the whole node (40 cores) with 178 GB of RAM; a job that requests--exclusive
and lands on a 'Cascade Lake' node will be assigned the whole node (48 cores) with 178 GB of RAM - A job that requests
--exclusive --constraint=40core
will land on a 'Skylake' node and will be assigned the whole node (40 cores) with 178 GB of RAM.
For example, with a memory request: - A job that requests
--ntasks-per-node=1 --mem=16000MB
and lands on 'Skylake' node will be assigned 4 cores and have access to 16000 MB of RAM, and charged for 4 cores worth of usage; a job that requests--ntasks-per-node=1 --mem=16000MB
and lands on 'Cascade Lake' node will be assigned 5 cores and have access to 16000 MB of RAM, and charged for 5 cores worth of usage - A job that requests
--ntasks-per-node=8 --mem=16000MB
and lands on 'Skylake' node will be assigned 8 cores but have access to only 16000 MB of RAM , and charged for 8 cores worth of usage; a job that requests--ntasks-per-node=8 --mem=16000MB
and lands on 'Cascade Lake' node will be assigned 8 cores but have access to only 16000 MB of RAM , and charged for 8 cores worth of usage
Jobs requesting more than 1 node
A multi-node job ( --nodes > 1
) will be assigned the entire nodes and charged for the entire nodes regardless of --ntasks-per-node
request. For example, a job that requests --nodes=10 --ntasks-per-node=1
and lands on 'Skylake' node will be charged for 10 whole nodes (40 cores/node*10 nodes, which is 400 cores worth of usage); a job that requests --nodes=10 --ntasks-per-node=1
and lands on 'Cascade Lake' node will be charged for 10 whole nodes (48 cores/node*10 nodes, which is 480 cores worth of usage).
Large Memory Node
On Pitzer, it has 48 cores per node. The physical memory equates to 16.0 GB/core or 768 GB/node; while the usable memory equates to 15,872 MB/core or 761,856 MB/node (744 GB/node).
For any job that requests no less than 363 GB/node but less than 744 GB/node, the job will be scheduled on the large memory node.To request no more than a full large memory node, you need to specify the memory request between 363 GB and 744 GB, i.e., 363GB <= mem <744GB.
--mem
is the total memory per node allocated to the job. You can request a partial large memory node, so consider your request more carefully when you plan to use a large memory node, and specify the memory based on what you will use.
Huge Memory Node
On Pitzer, it has 80 cores per node. The physical memory equates to 37.5 GB/core or 3 TB/node; while the usable memory equates to 38,259 MB/core or 3,060,720 MB/node (2988.98 GB/node).
To request no more than a full huge memory node, you have two options:
- The first is to specify the memory request between 744 GB and 2988 GB, i.e.,
744GB <= mem <=2988GB
). - The other option is to use the combination of
--ntasks-per-node
and--partition
, like--ntasks-per-node=4 --partition=hugemem
. When no memory is specified for the huge memory node, your job is entitled to a memory allocation proportional to the number of cores requested (38,259 MB/core). Note,--ntasks-per-node
should be no less than 20 and no more than 80
Summary
In summary, for serial jobs, we will allocate the resources considering both the # of cores and the memory request. For parallel jobs (nodes>1), we will allocate the entire nodes with the whole memory regardless of other requests. Check requesting resources on pitzer for information about the usable memory of different types of nodes on Pitzer. To manage and monitor your memory usage, please refer to Out-of-Memory (OOM) or Excessive Memory Usage.
GPU Jobs
Dual GPU Node
- For the dual GPU node with 'Skylake' processor, it has 40 cores/node. The physical memory equates to 9.6 GB/core or 384 GB/node; while the usable memory equates to 9292 MB/core or 363 GB/node. Each node has 2 NVIDIA Volta V100 w/ 16 GB GPU memory.
- For the dual GPU node with 'Cascade Lake' processor, it has 48 cores/node. The physical memory equates to 8.0 GB/core or 384 GB/node; while the usable memory equates to 7744 MB/core or 363 GB/node. Each node has 2 NVIDIA Volta V100 w/32GB GPU memory.
For serial jobs, we will allow node sharing on GPU nodes so a job may request either 1 or 2 GPUs (--ntasks-per-node=XX --gpus-per-node=1
or --ntasks-per-node=XX --gpus-per-node=2
)
For parallel jobs (nodes>1), we will not allow node sharing. A job may request 1 or 2 GPUs ( gpus-per-node=1 or gpus-per-node=2
) but both GPUs will be allocated to the job.
Quad GPU Node
For quad GPU node, it has 48 cores/node. The physical memory equates to 16.0 GB/core or 768 GB/node; while the usable memory equates to 15,872 MB/core or 744 GB/node.. Each node has 4 NVIDIA Volta V100s w/32 GB GPU memory and NVLink.
For serial jobs, we will allow node sharing on GPU nodes, so a job can land on a quad GPU node if it requests 3-4 GPUs per node (--ntasks-per-node=XX --gpus-per-node=3
or --ntasks-per-node=XX --gpus-per-node=4
), or requests quad GPU node explicitly with using --gpus-per-node=v100-quad:4
, or gets backfilled with requesting 1-2 GPUs per node with less than 4 hours long.
For parallel jobs (nodes>1), only up to 2 quad GPU nodes can be requested in a single job. We will not allow node sharing and all GPUs will be allocated to the job.
Partition time and job size limits
Here is the walltime and node limits per job for different queues/partitions available on Pitzer:
NAME |
MAX TIME LIMIT |
MIN JOB SIZE |
MAX JOB SIZE |
NOTES |
---|---|---|---|---|
serial |
7-00:00:00 |
1 core |
1 node |
|
longserial | 14-00:00:00 |
1 core |
1 node |
|
parallel |
96:00:00 |
2 nodes |
40 nodes |
|
hugemem |
7-00:00:00 |
1 core |
1 node |
|
largemem |
7-00:00:00 |
1 core |
1 node |
|
gpuserial |
7-00:00:00 |
1 core |
1 node |
|
gpuparallel |
96:00:00 |
2 nodes |
10 nodes |
|
debug |
1:00:00 |
1 core |
2 nodes |
|
gpudebug |
1:00:00 |
1 core |
2 nodes |
|
To specify a partition for a job, either add the flag --partition=<partition-name>
to the sbatch command at submission time or add this line to the job script:#SBATCH --partition=<partition-name>
To access one of the restricted queues, please contact OSC Help. Generally, access will only be granted to these queues if the performance of the job cannot be improved, and job size cannot be reduced by splitting or checkpointing the job.
Job/Core Limits
Max Running Job Limit | Max Core/Processor Limit | Max node Limit | |||||
---|---|---|---|---|---|---|---|
For all types | GPU jobs | Regular debug jobs | GPU debug jobs | For all types | largemem | hugemem | |
Individual User | 384 | 140 | 4 | 4 | 3240 | 9 | 3 |
Project/Group | 576 | 140 | n/a | n/a | 3240 | 9 | 3 |
An individual user can have up to the max concurrently running jobs and/or up to the max processors/cores in use. However, among all the users in a particular group/project, they can have up to the max concurrently running jobs and/or up to the max processors/cores in use.