nf-core/configs: Fred Hutch Cancer Center Configuration

Configuration file to run nf-core pipelines on the cluster of the Fred Hutchinson Cancer Center. Note that the default workDir will be based on your $TMPDIR if available (e.g. nextflow is launched in an interactive session). This is to avoid large tmp file buildup in hidden nextflow directories, but may prevent resuming pipelines. You can override this by setting -work-dir <your directory> at the command line when calling nextflow run.

Before running the pipeline

You need to have Nextflow and Apptainer available in your path. The easiest way to do this is through modules.

module load Nextflow
module load Apptainer

Quick start

nextflow run -profile fred_hutch ...

Additional resources

https://sciwiki.fredhutch.org/datascience/using_workflows/ https://sciwiki.fredhutch.org/compdemos/nextflow/

Config file

See config file on GitHub

params {
    config_profile_name        = 'Fred Hutch'
    config_profile_description = 'Fred Hutch Cancer Center HPC profile'
    config_profile_contact     = 'dgratz@fredhutch.org'
    config_profile_url         = 'https://sciwiki.fredhutch.org/'
    // Same as resourceLimits, but for older pipelines
    max_memory = 700.GB
    max_cpus = 36
    max_time = 720.h
}

scratchDir = "${System.getenv('TMPDIR')}" ? System.getenv('TMPDIR') : null
workDir = "${System.getenv('TMPDIR')}" ? System.getenv('TMPDIR') : null

process {
    executor = 'slurm'
    // clusterOptions = {} // If we want default slurm configs
    queue = { task.time > 12.h ? 'campus-new' : 'short' }

    maxRetries = 2
    errorStrategy = { task.exitStatus in [12,104,137,134,139,140,141,143,151,247] ? 'retry' : 'finish' }

    resourceLimits = [
        memory: 700.GB,
        cpus: 36,
        time: 720.h
    ]
    // Per the scicomp wiki, memory requests don't mean much on our system. Use CPUs as a proxy for mem requests
    // Request 1 CPU for each 4 GB of memory
    // https://sciwiki.fredhutch.org/scicomputing/compute_jobs/#memory
    cpus    = { 5 * task.attempt }
    memory  = { 20.GB * task.attempt }
    time    = { 24.h * task.attempt }
    withLabel:process_single {
        cpus   = { 2 * task.attempt }
        memory = { 8.GB * task.attempt }
        time   = { 12.h * task.attempt }
    }
    withLabel:process_low {
        cpus   = { 4 * task.attempt }
        memory = { 16.GB * task.attempt }
        time   = { 24.h  * task.attempt }
    }
    withLabel:process_medium {
        cpus   = { 16 * task.attempt }
        memory = { 56.GB * task.attempt }
        time   = { 72.h  * task.attempt }
    }
    withLabel:process_high {
        cpus   = 32
        memory = { 128.GB * task.attempt }
        time   = { 120.h  * task.attempt }
    }
    withLabel:process_long {
        cpus   = { 12 * task.attempt }
        memory = { 96.GB * task.attempt }
        time   = { 336.h  * task.attempt }
    }
}

executor {
    // How many jobs can be submitted at once
    queueSize = 16
    // Maximum jobs per second
    submitRateLimit = "10/1sec"
}

apptainer {
    enabled = true
    // Checks if TMPDIR is defined in the environment before mounting to avoid breaks
    runOptions = "--containall " + (System.getenv('TMPDIR') ? "-B \$TMPDIR" : "")
}

// clean the generated files in the working directory
// having this as true sometimes breaks things
cleanup = false