1. Yen-Slurm Cluster

In this session, we will be working with the scheduled Yens.

The yen-slurm is a computing cluster designed to give researchers the ability to run computations that require a large amount of resources without leaving the environment and filesystem of the interactive Yens.

Current cluster configuration

Yen Computing Infrastructure

The yen-slurm cluster has 11 nodes with over 1,500 CPU cores, 10 TB of memory, and 12 NVIDIA GPU’s.

What is a Scheduler?

The yen-slurm cluster can be accessed by the Slurm Workload Manager. Researchers can submit jobs to the cluster, asking for a certain amount of resources (CPU, Memory, GPUs and Time). Slurm will then manage the queue of jobs based on what resources are available. In general, those who request less resources will see their jobs start faster than jobs requesting more resources.

Why Use a Scheduler?

A job scheduler has many advantages over the directly shared environment of the yens:

  • Run jobs with a guaranteed amount of resources (CPU, Memory, GPUs, Time)
  • Setup multiple jobs to run automatically
  • Run jobs that exceed the community guidelines on the interactive nodes
  • Gold standard for using high-performance computing resources around the world

Preparing to Use a Scheduler

First, you should make sure your process can run on the interactive Yen command line.

Once your process is capable of running on the interactive Yen command line, you will need to create a slurm script. This script has two major components:

  • Metadata around your job, and the resources you are requesting
  • The commands necessary to run your process

Looking at Cluster Queue

You can look at the current job queue by running squeue:

squeue

You should see the output for all jobs currently running and pending in the queue:

             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
              1043    normal    a_job    user1 PD       0:00      1 (Resources)
              1042    normal    job_2    user2  R    1:29:53      1 yen11
              1041    normal     bash    user3  R    3:17:08      1 yen11

Jobs with state (ST) R are running, and PD are pending. Your job will run based on this queue.

Best Practices

Use all of the resources you request

The Slurm scheduler keeps track of the resources you request, and the resources you use. Frequent under-utilization of CPU and Memory will affect your future job priority. You should be confident that your job will use all of the resources you request. It’s recommended that you run your job on the interactive Yens, and monitor resource usage to make an educated guess on resource usage.

Restructure Your job into Small Tasks

Small jobs start faster than big jobs. Small jobs likely finish faster too. If your job requires doing the same process many times (i.e. OCR’ing many PDFs), it will benefit you to setup your job as many small jobs.

Current Partitions and their limits

Run sinfo command to see available partitions:

sinfo

You should see the following output:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
normal*      up 2-00:00:00      8   idle yen[11-18]
dev          up    2:00:00      8   idle yen[11-18]
long         up 7-00:00:00      8   idle yen[11-18]
gpu          up 1-00:00:00      3   idle yen-gpu[1-3]

The first column PARTITION lists all available partitions. Partitions are the logical subdivision of the yen-slurm cluster. The * denotes the default partition.

The four partitions have the following limits:

PartitionCPU Limit Per UserMemory LimitMax Memory Per CPU (default)Time Limit (default)
normal2563 TB24 GB (4 GB)2 days (2 hours)
dev248 GB24 GB (4 GB)2 hours (1 hour)
long501.2 TB24 GB (4 GB)7 days (2 hours)
gpu64256 GB24 GB (4 GB)1 day (2 hours)

You can submit to the dev partition by specifying:

#SBATCH --partition=dev

Or with a shorthand:

#SBATCH -p dev

If you don’t specify the partition in the submission script, the job is queued in the normal partition. To request a particular partition, for example, long, specify #SBATCH -p long in the slurm submission script. You can specify more than one partition if the job can be run on multiple partitions (i.e. #SBATCH -p normal,dev).

How do I check how busy the machines are?

You can pass format options to the sinfo command as follows:

sinfo --format="%m | %C"

You should see:

MEMORY | CPUS(A/I/O/T)
257366+ | 268/1300/0/1568

where MEMORY outputs the minimum size of memory of the yen-slurm cluster node in megabytes (256 GB) and CPUS(A/I/O/T) prints the number of CPU’s that are allocated / idle / other / total. For example, if you see 268/1300/0/1568 that means 268 CPU’s are allocated, 1,300 are idle (free) out of 1,568 CPU’s total.

You can also run checkyens and look at the last line for summary of all pending and running jobs on yen-slurm.

checkyens

You should see the following:

Enter checkyens to get the current server resource loads. Updated every minute.
yen1 :  2 Users | CPU [####                20%] | Memory [####                20%] | updated 2024-06-20-07:58:00
yen2 :  2 Users | CPU [                     0%] | Memory [##                  11%] | updated 2024-06-20-07:58:01
yen3 :  2 Users | CPU [                     0%] | Memory [                     3%] | updated 2024-06-20-07:57:04
yen4 :  3 Users | CPU [####                20%] | Memory [###                 15%] | updated 2024-06-20-07:58:00
yen5 :  1 Users | CPU [                     1%] | Memory [                     3%] | updated 2024-06-20-07:58:02
yen-slurm : 11 jobs, 5 pending | 3 CPUs allocated (1%) | 100G Memory Allocated (2%) | updated 2024-06-20-07:58:02