It is strongly suggested to consider the memory use to the available per-core memory when users request OSC resources for their jobs.
Node type | default and max memory per core (GB) | max usable memory per node (GB) |
---|---|---|
Skylake 40 core - regular compute | 4.449GB | 177.96GB |
Cascade Lake 48 core - regular compute | 3.708GB | 177.98GB |
large memory | 15.5GB | 744GB |
huge memory | 37.362GB | 2988.98GB |
Skylake 40 core dual gpu | 9.074GB | 363GB |
Cascade 48 core dual gpu | 7.562GB | 363GB |
quad gpu (48 core) | 15.5GB |
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 10GB of memory
(since 2 cores * 4.5GB = 9GB doesn't satisfy the memory request).#SBATCH --ntask=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.
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,797MB/core depending on which type of node your job lands on). For example, without any memory request ( --mem=XX
):
--ntasks=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=1
and lands on a 'Cascade Lake' node will be assigned one core and should use no more than 3797 MB of RAM--ntasks=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=3
and lands on a 'Cascade Lake' node will be assigned 3 cores and should use no more than 3*3797 MB of RAM--ntasks=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=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--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--exclusive --constraint=40core
will land on a 'Skylake' node and will be assigned the whole node (40 cores) with 178 GB of RAM. --ntasks=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=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--ntasks=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=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 usageA multi-node job ( --nodes > 1
) will be assigned the entire nodes and charged for the entire nodes regardless of --ntasks
or --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). We usually suggest not including --ntasks-per-node
and using --ntasks
if needed.
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,872MB/core or 761,856MB/node (744GB/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 363GB and 744GB, 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.
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,259MB/core or 3,060,720MB/node (2988.98GB/node).
To request no more than a full huge memory node, you have two options:
744GB <= mem <=2988GB
).--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,259MB/core). Note, --ntasks-per-node
should be no less than 20 and no more than 80 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.
For serial jobs, we will allow node sharing on GPU nodes so a job may request either 1 or 2 GPUs (--ntasks=XX --gpus-per-node=1
or --ntasks=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.
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/32GB 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=XX --gpus-per-node=3
or --ntasks=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.
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 --paritition=<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.
Max Running Job Limit | Max Core/Processor Limit | ||||
---|---|---|---|---|---|
For all types | GPU jobs | Regular debug jobs | GPU debug jobs | For all types | |
Individual User | 384 | 140 | 4 | 4 | 3240 |
Project/Group | 576 | 140 | n/a | n/a | 3240 |
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.