Cancer Research UK Manchester Institute Configuration

All nf-core pipelines have been successfully configured for the use on the HPC (griffin) at Cancer Research UK Manchester Institute.

To use, run the pipeline with -profile crukmi. This will download and launch the crukmi.config which has been pre-configured with a setup suitable for the Griffin HPC. Using this profile, Apptainer/Singularity images will be downloaded to run on the cluster and stored in a centralised location.

Before running the pipeline you will need to load Nextflow using the environment module system, for example via:

## Load Nextflow environment modules
module purge
module load apps/nextflow

The pipeline should always be executed inside a workspace on the /scratch/ system. All of the intermediate files required to run the pipeline will be stored in the work/ directory. It is recommended to delete this directory after the pipeline has finished successfully because it can get quite large.

Config file

See config file on GitHub

crukmi.config
//Profile config names for nf-core/configs
params {
    config_profile_description = 'Cancer Research UK Manchester Institute HPC cluster profile provided by nf-core/configs'
    config_profile_contact     = 'Stephen Kitcatt, Simon Pearce (@skitcattCRUKMI, @sppearce)'
    config_profile_url         = 'http://scicom.picr.man.ac.uk/projects/user-support/wiki'
}
 
singularity {
    cacheDir   = '/lmod/nextflow_software'
    enabled    = true
    autoMounts = true
}
 
process {
    beforeScript  = 'module load apps/apptainer'
    executor      = 'slurm'
    queue         = { task.memory <= 240.GB ? 'compute' : 'hmem' }
 
    errorStrategy = { task.exitStatus in [143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' }
    maxErrors     = '-1'
    maxRetries    = 3
 
    withLabel: process_single {
        cpus   = { check_max(1 * task.attempt, 'cpus') }
        memory = { check_max(5.GB * task.attempt, 'memory') }
    }
 
    withLabel: process_low {
        cpus   = { check_max(1 * task.attempt, 'cpus') }
        memory = { check_max(5.GB * task.attempt, 'memory') }
    }
 
    withLabel: process_medium {
        cpus   = { check_max(4 * task.attempt, 'cpus') }
        memory = { check_max(20.GB * task.attempt, 'memory') }
    }
 
    withLabel: process_high {
        cpus   = { check_max(48 * task.attempt, 'cpus') }
        memory = { check_max(240.GB * task.attempt, 'memory') }
    }
}
 
executor {
    name         = 'slurm'
    queueSize    = 1000
    pollInterval = '10 sec'
}
 
params {
    max_memory = 4000.GB
    max_cpus   = 96
    max_time   = 72.h
}