Learn R Programming

ClusterMQ: send R function calls as cluster jobs

This package will allow you to send function calls as jobs on a computing cluster with a minimal interface provided by the Q function:

# install the package if you haven't done so yet
install.packages('clustermq')

# load the library and create a simple function
library(clustermq)
fx = function(x) x * 2

# queue the function call on your scheduler
Q(fx, x=1:3, n_jobs=1)
# list(2,4,6)

Computations are done entirely on the network and without any temporary files on network-mounted storage, so there is no strain on the file system apart from starting up R once per job. All calculations are load-balanced, i.e. workers that get their jobs done faster will also receive more function calls to work on. This is especially useful if not all calls return after the same time, or one worker has a high load.

Browse the vignettes here:

Schedulers

An HPC cluster's scheduler ensures that computing jobs are distributed to available worker nodes. Hence, this is what clustermq interfaces with in order to do computations.

We currently support the following schedulers (either locally or via SSH):

  • Multiprocess - test your calls and parallelize on cores using options(clustermq.scheduler="multiprocess")
  • SLURM - should work without setup
  • LSF - should work without setup
  • SGE - may require configuration
  • PBS/Torque - needs options(clustermq.scheduler="PBS"/"Torque")
  • via SSH -

needs options(clustermq.scheduler="ssh", clustermq.ssh.host=<yourhost>)

[!TIP] Follow the links above to configure your scheduler in case it is not working out of the box and check the FAQ if your job submission errors or gets stuck

Usage

The most common arguments for Q are:

  • fun - The function to call. This needs to be self-sufficient (because it will not have access to the master environment)
  • ... - All iterated arguments passed to the function. If there is more than one, all of them need to be named
  • const - A named list of non-iterated arguments passed to fun
  • export - A named list of objects to export to the worker environment

The documentation for other arguments can be accessed by typing ?Q. Examples of using const and export would be:

# adding a constant argument
fx = function(x, y) x * 2 + y
Q(fx, x=1:3, const=list(y=10), n_jobs=1)

# exporting an object to workers
fx = function(x) x * 2 + y
Q(fx, x=1:3, export=list(y=10), n_jobs=1)

We can also use clustermq as a parallel backend in foreach or BiocParallel:

# using foreach
library(foreach)
register_dopar_cmq(n_jobs=2, memory=1024) # see `?workers` for arguments
foreach(i=1:3) %dopar% sqrt(i) # this will be executed as jobs

# using BiocParallel
library(BiocParallel)
register(DoparParam()) # after register_dopar_cmq(...)
bplapply(1:3, sqrt)

More examples are available in the User Guide.

Comparison to other packages

There are some packages that provide high-level parallelization of R function calls on a computing cluster. We compared clustermq to BatchJobs and batchtools for processing many short-running jobs, and found it to have approximately 1000x less overhead cost.

In short, use clustermq if you want:

  • a one-line solution to run cluster jobs with minimal setup
  • access cluster functions from your local Rstudio via SSH
  • fast processing of many function calls without network storage I/O

Use batchtools if you:

  • want to use a mature and well-tested package
  • don't mind that arguments to every call are written to/read from disc
  • don't mind there's no load-balancing at run-time

Use Snakemake or targets if:

  • you want to design and run a workflow on HPC

Don't use batch (last updated 2013) or BatchJobs (issues with SQLite on network-mounted storage).

Contributing

Contributions are welcome and they come in many different forms, shapes, and sizes. These include, but are not limited to:

  • Questions: Ask on the Github Discussions board. If you are an advanced user, please also consider answering questions there.
  • Bug reports: File an issue if something does not work as expected. Be sure to include a self-contained Minimal Reproducible Example and set log_worker=TRUE.
  • Code contributions: Have a look at the good first issue tag. Please discuss anything more complicated before putting a lot of work in, I'm happy to help you get started.

[!TIP] Check the User Guide and the FAQ first, maybe your query is already answered there

Citation

This project is part of my academic work, for which I will be evaluated on citations. If you like me to be able to continue working on research support tools like clustermq, please cite the article when using it for publications:

M Schubert. clustermq enables efficient parallelisation of genomic analyses. Bioinformatics (2019). doi:10.1093/bioinformatics/btz284

Copy Link

Version

Install

install.packages('clustermq')

Monthly Downloads

1,292

Version

0.9.9

License

Apache License (== 2.0) | file LICENSE

Maintainer

Michael Schubert

Last Published

April 20th, 2025

Functions in clustermq (0.9.9)

register_dopar_cmq

Register clustermq as `foreach` parallel handler
vec_lookup

Lookup table for return types to vector NAs
cmq_foreach

clustermq foreach handler
chunk

Subset index chunk for processing
.onAttach

Report queueing system on package attach if not set
workers

Creates a pool of workers
host

Construct the ZeroMQ host address
ssh_proxy

SSH proxy for different schedulers
master

Master controlling the workers
worker

R worker submitted as cluster job
clustermq-package

Evaluate Function Calls on HPC Schedulers (LSF, SGE, SLURM)
summarize_result

Print a summary of errors and warnings that occurred during processing
MULTIPROCESS

Process on multiple processes on one machine
Q

Queue function calls on the cluster
Q_rows

Queue function calls defined by rows in a data.frame
check_args

Function to check arguments with which Q() is called
wrap_error

Wraps an error in a condition object
MULTICORE

Process on multiple cores on one machine
QSys

Class for basic queuing system functions
SGE

SGE scheduler functions
LSF

LSF scheduler functions
LOCAL

Placeholder for local processing
Pool

Class for basic queuing system functions
SSH

SSH scheduler functions
SLURM

SLURM scheduler functions
msg_fmt

Message format for logging
.onLoad

Select the queueing system on package loading
fill_template

Fill a template string with supplied values
work_chunk

Function to process a chunk of calls