SLURM Job Submission

library(abba)

In support for SLURM, abba has function to schedule and manage R programs on connected SLURM cluster. At a high level, these functions break down into three different categories:

Functions specifically for interfacing with SLURM follow the naming convention abba_slurm_*.

Submit a Job

Job submission is handled by the function abba_slurm_submit_job().

abba_slurm_submit_job(
  "/home/mike.stackhouse/repos/abba/test_programs/test_program.R",
  log_path = "/home/mike.stackhouse/test_logs"
  )
# [1] "38"

Note that this returns a vector with job id and name being path of the program. The Job ID is the identifier used downstream to interact with SLURM.

log_path is required and specifies the directory where the program’s log file will be written. abba does not fall back to a default location in the user’s filespace.

Get Job Status

Once the job is running in SLURM, abba can poll its status. This can be done using the function abba_slurm_get_job_status()

abba_slurm_get_job_status("57")
# 57 
# "COMPLETED" 

The job statuses can be “RUNNING”, “COMPLETED”, FAILED etc. For a complete list of SLURM job statuses, please refer to documentation.

Get the Log Content

In this context, the “log” refers to the stdout/stderr of the program itself. This returns into a list object with the Job ID and the individual lines written out by the program. The content will contain all of the console output from the program itself.

abba_slurm_get_job_log("38")
# [[1]]
# [1] "[1] 4"                   "Warning message:"        "This is a test warning " "La-di-da"                       

Submit a batch of jobs to SLURM cluster

Here is an example of using SLURM submission functions in abba_submit_batch. Additional arguments like log_path will be passed on to submit_func

abba_submit_batch(list("/home/mike.stackhouse/repos/abba/test_programs/test_program.R", "/home/mike.stackhouse/repos/abba/test_programs/test_program.R"),
                  submit_func=abba_slurm_submit_job,
                  wait_func=abba_slurm_watch_job,
                  succeed_func=abba_slurm_get_job_succeeded,
                  log_path="/home/mike.stackhouse/test_logs")
# Submitting program:
#   /home/mike.stackhouse/repos/abba/test_programs/test_program.R
# Submitting program:
#   /home/mike.stackhouse/repos/abba/test_programs/test_program.R
# /home/mike.stackhouse/repos/abba/test_programs/test_program.R /home/mike.stackhouse/repos/abba/test_programs/test_program.R
                                                          "48"                                                           "49"