Skip to main content

A Snakemake executor plugin for submitting jobs to the Sanger LSF cluster.

Project description

Snakemake executor plugin: LSF-Sanger

LSF is common high performance computing batch system. This is a version of the generic LSF executor plugin modified to better integrate with the Sanger compute environment and simplify pipeline execution.

Rule time and memory requirements are used to select an appropriate farm queue automatically, following the same criteria as the Sanger Nextflow profile.

The following readme is largely preserved from the original LSF executor plugin. lsf-sanger users do not have to specify queues for rules which specify the resources they need.

Installation

To use the lsf-sanger executor, install the latest release into the same Python environment as Snakemake.

$ source venv/bin/activate
(venv) $ pip install https://github.com/FMakosza/snakemake-executor-plugin-lsf-sanger/archive/refs/tags/[VERSION].tar.gz

Specifying Project and Queue

LSF clusters can have mandatory resource indicators for accounting and scheduling, Project and Queue, respectively. These resources are usually omitted from Snakemake workflows in order to keep the workflow definition independent from the platform. However, it is also possible to specify them inside of the workflow as resources in the rule definition (see the Resources document).

To specify them at the command line, define them as default resources:

$ snakemake --executor lsf-sanger --default-resources lsf_project=<your LSF project> lsf_queue=<your LSF queue>

If individual rules require e.g. a different queue, you can override the default per rule:

$ snakemake --executor lsf-sanger --default-resources lsf_project=<your LSF project> lsf_queue=<your LSF queue> --set-resources <somerule>:lsf_queue=<some other queue>

Usually, it is advisable to persist such settings via a configuration profile, which can be provided system-wide, per user, and in addition per workflow.

This is an example of the relevant profile settings:

jobs: '<max concurrent jobs>'
executor: lsf-sanger
default-resources:
  - 'lsf_project=<your LSF project>'
  - 'lsf_queue=<your LSF queue>'

Ordinary SMP jobs

Most jobs will be carried out by programs which are either single core scripts or threaded programs, hence SMP (shared memory programs) in nature. Any given threads and mem_mb requirements will be passed to LSF:

rule a:
    input: ...
    output: ...
    threads: 8
    resources:
        mem_mb=14000

This will give jobs from this rule 14GB of memory and 8 CPU cores. It is advisable to use resonable default resources, such that you don't need to specify them for every rule. Snakemake already has reasonable defaults built in, which are automatically activated when using any non-local executor (hence also with lsf). Use mem_mb_per_cpu to give the standard LSF type memory per CPU

MPI jobs

Snakemake's LSF backend also supports MPI jobs, see the MPI support document for details.

rule calc_pi:
  output:
      "pi.calc",
  log:
      "logs/calc_pi.log",
  threads: 40
  resources:
      tasks=10,
      mpi='mpirun',
  shell:
      "{resources.mpi} -np {resources.tasks} calc-pi-mpi > {output} 2> {log}"
$ snakemake --set-resources calc_pi:mpi="mpiexec" ...

Advanced Resource Specifications

A workflow rule may support a number of resource specifications. For a LSF cluster, a mapping between Snakemake and LSF needs to be performed.

You can use the following specifications:

LSF Snakemake Description
-q lsf_queue the queue a rule/job is to use
--W walltime the walltime per job in minutes
-R "rusage[mem=<memory_amount>]" mem, mem_mb memory a cluster node must provide
(mem: string with unit, mem_mb: i)
-R "rusage[mem=<memory_amount>]" mem_mb_per_cpu memory per reserved CPU
-R "rusage[ngpus_physical=<gpus>"] gpu GPUs to request for the job
omit -R span[hosts=1] mpi Allow splitting across nodes for MPI
-R span[ptile=<ptile>] ptile Processors per host. Reqires mpi
Other bsub arguments lsf_extra Other args to pass to bsub (str)

Each of these can be part of a rule, e.g.:

rule:
    input: ...
    output: ...
    resources:
        lsf_queue: <queue name>
        walltime: <some number>

walltime and runtime are synonyms.

Please note: as --mem and --mem-per-cpu are mutually exclusive, their corresponding resource flags mem/mem_mb and mem_mb_per_cpu are mutually exclusive, too. You can only reserve memory a compute node has to provide or the memory required per CPU (LSF does not make any distintion between real CPU cores and those provided by hyperthreads). The executor will convert the provided options based on cluster config.

Additional custom job configuration

There are various bsub options not directly supported via the resource definitions shown above. You may use the lsf_extra resource to specify additional flags to bsub:

rule myrule:
    input: ...
    output: ...
    resources:
        lsf_extra="-R a100 -gpu num=2"

Again, rather use a profile to specify such resources.

Per-job vs per-core

By default, this plugin keeps the specified memory request as a per-job, as expected by the Sanger LSF cluster. If for some reason you want the request to be per-CPU core (i.e. -R rusage[mem=<mem_mb/threads>]) then set the environment variable SNAKEMAKE_LSF_MEMFMT to percpu.

The executor automatically detects the request unit from cluster configuration, so if your cluster does not use MB, you do not need to do anything.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snakemake_executor_plugin_lsf_sanger-1.3.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file snakemake_executor_plugin_lsf_sanger-1.3.1.tar.gz.

File metadata

File hashes

Hashes for snakemake_executor_plugin_lsf_sanger-1.3.1.tar.gz
Algorithm Hash digest
SHA256 61da3c2bc2252bd5a2cc5ad359af6dc57ef7c0198602c916fe71b7f064f0e100
MD5 8335445886017fe77919f86db2e57f17
BLAKE2b-256 8c67c16d8c56043b26ac8568b126c03cd4ea70170bd112a9f2ff438923e57b8c

See more details on using hashes here.

File details

Details for the file snakemake_executor_plugin_lsf_sanger-1.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for snakemake_executor_plugin_lsf_sanger-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f867573a229c4220458d9ba0725c4927831dc7af6ca2a2abc56aed27a9f42efb
MD5 85609fe5633221edd3b9eb6e25e86de1
BLAKE2b-256 7c157468240f90a7fb32a76b7cbebcf0b95f21c377c8c9e1491ec6ad70d643e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page