miniwdl-lsf

Extends miniwdl to run workflows on LSF clusters in singularity containers.

This LSF backend plugin for miniwdl runs WDL task containers by creating a job script that is submitted to a LSF cluster. In case the job description has a container, singularity will be used as container runtime.

Installation

For the development version::

pip install git+https://github.com/adthrasher/miniwdl-lsf.git

LSF-specific runtime hints

miniwdl-lsf supports LSF-specific runtime hints. These can be specified using the object syntax under an lsf object.

runtime {
    lsf: object {
        time: 30
    }
}

Currently supported hints: - time: passed to LSF's -W argument. Sets the runtime limit for a task in minutes. LSF documentation

Note: hints are in a state of flux within the WDL specification. WDL 1.1 added support for hints as part of the runtime section. These could be nested using the object syntax. However, object will be removed in future versions of WDL and the hints will become a distinct section in the task definition.

miniwdl check may return warnings when attempting to validate WDL tasks with an lsf object hint. Similar to the warnings below. These warnings do not affect the miniwdl run command.

        (Ln 41, Col 14) UnknownRuntimeKey, unknown entry in task runtime section: lsf
        (Ln 41, Col 14) Deprecated, replace 'object' with specific struct type [WDL >= 1.1]

Configuration

The following miniwdl configuration example can be used to use miniwdl on a LSF cluster:

    [scheduler]
    container_backend=lsf_singularity
    # Sets the maximum concurrent tasks. Since LSF handles scheduling, we only
    # limit to avoid excessive overhead in miniwdl.
    task_concurrency=200

    # This setting allows running tasks to continue, even if one other tasks fails. 
    # Useful in combination with call caching. Prevents wasting resources by
    # cancelling jobs half-way that would probably succeed.
    fail_fast = false

    [call_cache]
    # The following settings create a call cache under the current directory.
    # This prevents wasting unnecessary resources on the cluster by rerunning 
    # jobs that have already succeeded.
    put = true 
    get = true 
    dir = "$PWD/miniwdl_call_cache"

    [task_runtime]
    # Setting a 'maxRetries' default allows jobs that fail due to intermittent
    # errors on the cluster to be retried.
    defaults = {
            "maxRetries": 2,
            "docker": "ubuntu:20.04"
        }

    command_shell = /bin/bash

    memory_limit_multiplier = 1.0

    [singularity]
    # This plugin wraps the singularity backend. Make sure the settings are
    # appropriate for your cluster.
    exe = ["singularity"]

    # the miniwdl default options contain options to run as a fake root, which
    # is not available on most clusters.
    run_options = [
            "--containall",
            "--cleanenv"
        ]

    # Location of the singularity images (optional). The miniwdl-lsf plugin
    # will set it to a directory inside $PWD. This location must be reachable
    # for the submit nodes.
    image_cache = "$PWD/miniwdl_singularity_cache"

    [lsf]
    # extra arguments passed to the bsub command (optional).
    extra_args=""
    # Task memory specifications should be interpreted as per-job not per-core (LSF default)
    memory_per_job = true

Acknowledgements

miniwdl-lsf is originally based on miniwdl-slurm.