Rosalind UGE HPC Configuration

nf-core pipelines have been successfully configured for use on the Rosalind UGE cluster.

To use the Rosalind profile, run the pipeline with -profile rosalind_uge. This will download and apply 'rosalind_uge.config' which has been configured for the Rosalind HPC cluster. This profile will allow all Nextflow processes to run within singularity containers, which will be downloaded and converted from docker containers, if needed.

Note: This profile does not configure resources but does partition jobs based on runtime to make use of short.q and all.q nodes. If you require resources outside of the limits specified in the pipeline (ex. more memory, CPUS, or walltime), you will need to provide a custom config specifying needed resources.

Rosalind has Nextflow pre-installed on the HPC cluster, and can be accessed by running module load nextflow or module load nextflow/<version> prior to running your pipeline. Additional singularity variables may need to be configured, such as a scratch directory, temp directory, cache directory, etc. If assistance is needed, please contact the Scientific Computing and Bioinformatics department (SciComp).

Config file

See config file on GitHub

/\*  
\* ---------------------------------------------------------  
\*       nf-core/configs: Rosalind Univa Grid Engine  
\* ---------------------------------------------------------  
\*/  
  
  
// Basic params of config file  
params {  
    config_profile_description = 'Rosalind Univa Grid Engine config file'  
    config_profile_contact = 'Gregory Sprenger (@gregorysprenger)'  
}  
  
// Use Singularity  
singularity {  
    enabled = true  
    autoMounts = true  
}  
  
// Submit up to 100 jobs at once with 15 secs between to avoid spamming the cluster  
executor {  
    queueSize = 100  
    pollInterval = '15 sec'  
}  
  
// Process specific resource requirements  
process {  
    // Error and retry handling  
    errorStrategy = { task.exitStatus in [143,137,104,134,139,71,255] ? 'retry' : 'finish' }  
    maxRetries    = 3  
      
    // Executor and queue information  
    executor = 'sge'  
    penv = 'smp'  
    queue = { task.time <= 4.h ? 'short.q' : task.time > 5.h ? 'all.q' : 'short.q' }  
    clusterOptions = { "-l h_vmem=${task.memory.toString().replaceAll(/[\sB]/,'')}" }  
}  
  
// Function to ensure that resource requirements don't go beyond limit  
def check_max(obj, type) {  
    if (type == 'memory') {  
        try {  
            if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1)  
                return params.max_memory as nextflow.util.MemoryUnit  
            else  
                return obj  
        } catch (all) {  
            println "   ### ERROR ###   Max memory '${params.max_memory}' is not valid! Using default value: $obj"  
            return obj  
        }  
    } else if (type == 'time') {  
        try {  
            if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1)  
                return params.max_time as nextflow.util.Duration  
            else  
                return obj  
        } catch (all) {  
            println "   ### ERROR ###   Max time '${params.max_time}' is not valid! Using default value: $obj"  
            return obj  
        }  
    } else if (type == 'cpus') {  
        try {  
            return Math.min( obj, params.max_cpus as int )  
        } catch (all) {  
            println "   ### ERROR ###   Max cpus '${params.max_cpus}' is not valid! Using default value: $obj"  
            return obj  
        }  
    }  
}