mirror of
https://github.com/MillironX/nf-configs.git
synced 2024-11-10 20:13:09 +00:00
100 lines
3.3 KiB
Text
100 lines
3.3 KiB
Text
params {
|
|
config_profile_description = 'The Sage Bionetworks profile'
|
|
config_profile_contact = 'Bruno Grande (@BrunoGrandePhD)'
|
|
config_profile_url = 'https://github.com/Sage-Bionetworks-Workflows'
|
|
}
|
|
|
|
process {
|
|
|
|
cpus = { check_max( 1 * slow(task.attempt), 'cpus' ) }
|
|
memory = { check_max( 6.GB * task.attempt, 'memory' ) }
|
|
time = { check_max( 24.h * task.attempt, 'time' ) }
|
|
|
|
errorStrategy = { task.exitStatus in [143,137,104,134,139,247] ? 'retry' : 'finish' }
|
|
maxRetries = 5
|
|
maxErrors = '-1'
|
|
|
|
// Process-specific resource requirements
|
|
withLabel:process_low {
|
|
cpus = { check_max( 4 * slow(task.attempt), 'cpus' ) }
|
|
memory = { check_max( 12.GB * task.attempt, 'memory' ) }
|
|
time = { check_max( 24.h * task.attempt, 'time' ) }
|
|
}
|
|
withLabel:process_medium {
|
|
cpus = { check_max( 12 * slow(task.attempt), 'cpus' ) }
|
|
memory = { check_max( 36.GB * task.attempt, 'memory' ) }
|
|
time = { check_max( 48.h * task.attempt, 'time' ) }
|
|
}
|
|
withLabel:process_high {
|
|
cpus = { check_max( 24 * slow(task.attempt), 'cpus' ) }
|
|
memory = { check_max( 72.GB * task.attempt, 'memory' ) }
|
|
time = { check_max( 96.h * task.attempt, 'time' ) }
|
|
}
|
|
withLabel:process_long {
|
|
time = { check_max( 192.h * task.attempt, 'time' ) }
|
|
}
|
|
withLabel:process_high_memory {
|
|
memory = { check_max( 128.GB * task.attempt, 'memory' ) }
|
|
}
|
|
|
|
// Preventing Sarek labels from using the actual maximums
|
|
withLabel:memory_max {
|
|
memory = { check_max( 128.GB * task.attempt, 'memory' ) }
|
|
}
|
|
withLabel:cpus_max {
|
|
cpus = { check_max( 24 * slow(task.attempt), 'cpus' ) }
|
|
}
|
|
|
|
}
|
|
|
|
aws {
|
|
region = "us-east-1"
|
|
}
|
|
|
|
params {
|
|
igenomes_base = 's3://sage-igenomes/igenomes'
|
|
max_memory = 500.GB
|
|
max_cpus = 64
|
|
max_time = 168.h // One week
|
|
}
|
|
|
|
// Function to slow the increase of the resource multipler
|
|
// as attempts are made. The rationale is that some CPUs
|
|
// don't need to be increased as fast as memory.
|
|
def slow(attempt, factor = 2) {
|
|
return Math.ceil( attempt / factor) as int
|
|
}
|
|
|
|
|
|
// Function to ensure that resource requirements don't go
|
|
// beyond a maximum 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
|
|
}
|
|
}
|
|
}
|