Nextflow CPU limit does not take effect

Hi,

I am running my program on Nextflow version 24.10.5. The content of my nextflow.config is as follows:

params {

  // Workflow flags
  // TODO nf-core: Specify your pipeline's command line flags
  genome      = "GRCh38"
  input       = null
  input_csv   = "/workspace/ieee/CancerDataset_phase2_sample/GSM8462129/GSM8462129.csv"
  single_end  = false
  outdir = '/workspace/ieee/CancerDataset_phase2_sample/GSM8462129/starsolo_v2/'
  publish_dir_mode = 'copy'

  // UMI tools options
  umitools_bc_pattern = "CCCCCCCCCCCCCCCCNNNNNNNNNN"
  save_umi_intermeds = true
  skip_umitools = true

  // Alignment options
  skip_star            = true
  min_mapped_reads     = 5
  save_align_intermeds = true
  star_ignore_sjdbgtf  = false

  // Inputs for SICILIAN after STAR alignment
  star_bam               = true
  star_sj_out_tab        = true
  reads_per_gene         = true
  star_chimeric_junction = true

  // Sicilian configs
  skip_classinput = true
  skip_glm        = false
  smartseq2       = false
  tenx            = true
  stranded        = true
  domain          = "/workspace/ieee/Project/alternative_splicing/nf-sicilian/SICILIAN_human_hg38_Refs/domain_file/ucscGenePfam.txt"
  annotator       = "/workspace/ieee/Project/alternative_splicing/nf-sicilian/SICILIAN_human_hg38_Refs/annotator_file/hg38_refseq.pkl"
  exon_bounds     = "/workspace/ieee/Project/alternative_splicing/nf-sicilian/SICILIAN_human_hg38_Refs/exon_pickle_file/hg38_refseq_exon_bounds.pkl"
  splices         = "/workspace/ieee/Project/alternative_splicing/nf-sicilian/SICILIAN_human_hg38_Refs/splice_pickle_file/hg38_refseq_splices.pkl"
  // Inputs for SICILIAN after class_input (e.g. if ran partially and restarting)
  sicilian_class_input = false
  // Inputs for SICILIAN after GLM (e.g. if ran partially and restarting)
  sicilian_glm_output = false

  // Genome inputs
  star_index = "/workspace/ieee/Project/alternative_splicing/starsolo/genome_100/"
  gtf = "/workspace/ieee/Project/alternative_splicing/starsolo/refdata-gex-GRCh38-2024-A/genes/genes.gtf"
  save_reference = true

  // MultiQC options
  skip_multiqc = false
  multiqc_title              = null

  // Boilerplate options
  seq_center = false
  enable_conda = false
  multiqc_config = false
  email = false
  email_on_fail = false
  max_multiqc_email_size = 25.MB
  plaintext_email = false
  monochrome_logs = false
  help = false
  igenomes_base = '/workspace/ieee/Project/alternative_splicing/nf-sicilian'
  tracedir = "${params.outdir}/pipeline_info"
  igenomes_ignore = false
  custom_config_version = 'master'
  custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
  hostnames = false
  config_profile_name = false
  config_profile_description = false
  config_profile_contact = false
  config_profile_url = false
  validate_params = true
  show_hidden_params = false
  schema_ignore_params = 'genomes,input_paths,modules,sicilian_glm_output_paths,sicilian_glm_output,sicilian_class_input_paths,sicilian_class_input,star_chimeric_junction_paths,star_reads_per_gene_paths,star_sj_out_tab_paths,star_bam_paths,star_chimeric_junction,reads_per_gene,star_sj_out_tab,star_bam'

  // Defaults only, expecting to be overwritten
  max_memory = 1024.GB
  max_cpus = 70
  max_time = 24.h

}

process {
    withName: STAR_ALIGN {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 4.h    
    }
    withName: SICILIAN:SICILIAN_CLASSINPUT {  
        cpus   = 60       
        memory = 1024.GB
        time   = 8.h    
    }
    withName: SICILIAN:SICILIAN_GLM {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
    withName: SICILIAN:SICILIAN_ANNSPLICES {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
    withName: SICILIAN:SICILIAN_CONSOLIDATE {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
    withName: SICILIAN:SICILIAN_PROCESS_CI_10X {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
    withName: SICILIAN:SICILIAN_POSTPROCESS {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
    withName: MULTIQC {  
        cpus   = 60       
        memory = 1024.GB 
        time   = 8.h    
    }
}
// Container slug. Stable releases should specify release tag!
// Developmental code should specify :dev
// process.container = 'nfcore/sicilian:dev'

// Load base.config by default for all pipelines
includeConfig 'conf/base.config'

// Load modules.config for DSL2 module specific options
includeConfig 'conf/modules.config'


// Load nf-core custom profiles from different Institutions
try {
  includeConfig "${params.custom_config_base}/nfcore_custom.config"
} catch (Exception e) {
  System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config")
}

profiles {
  conda {
    docker.enabled = false
    singularity.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud = false
    process.conda = "$projectDir/environment.yml"
  }
  debug { process.beforeScript = 'echo $HOSTNAME' }
  docker {
    docker.enabled = true
    singularity.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = false
    // Avoid this error:
    //   WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
    // Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351
    // once this is established and works well, nextflow might implement this behavior as new default.
    docker.runOptions = '-u \$(id -u):\$(id -g)'
  }
  singularity {
    docker.enabled = false
    singularity.enabled = true
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = false
    singularity.autoMounts = true
  }
  podman {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = true
    shifter.enabled = false
    charliecloud = false
  }
  shifter {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = false
    shifter.enabled = true
    charliecloud.enabled = false
  }
  charliecloud {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = true
  }
  test { includeConfig 'conf/test.config' }
  test_samplesheet { includeConfig 'conf/test_samplesheet.config' }
  test_skip_umitools { includeConfig 'conf/test_skip_umitools.config' }
  test_smartseq2 { includeConfig 'conf/test_smartseq2.config' }
  test_full { includeConfig 'conf/test_full.config' }
}

// Load igenomes.config if required
if (!params.igenomes_ignore) {
  includeConfig 'conf/igenomes.config'
}

// Export these variables to prevent local Python/R libraries from conflicting with those in the container
env {
  PYTHONNOUSERSITE = 1
  R_PROFILE_USER = "/.Rprofile"
  R_ENVIRON_USER = "/.Renviron"
}

// Capture exit codes from upstream processes when piping
process.shell = ['/bin/bash', '-euo', 'pipefail']

def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')
timeline {
    enabled = true
    file    = "${params.tracedir}/execution_timeline_${trace_timestamp}.html"
}
report {
    enabled = true
    file    = "${params.tracedir}/execution_report_${trace_timestamp}.html"
}
trace {
    enabled = true
    file    = "${params.tracedir}/execution_trace_${trace_timestamp}.txt"
}
dag {
    enabled = true
    file    = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg"
}

manifest {
  name = 'nf-core/sicilian'
  author = 'Julia Salzman Lab'
  homePage = 'https://github.com/nf-core/sicilian'
  description = 'Run SICILIAN alternative splicing analysis pipeline for single-cell RNA-seq data'
  mainScript = 'main.nf'
  nextflowVersion = '>=21.04.0'
  version = '1.0dev'
}

The base.config is as follows:

process {

  // TODO nf-core: Check the defaults for all processes
  cpus = { check_max( 1 * task.attempt, 'cpus' ) }
  memory = { check_max( 7.GB * task.attempt, 'memory' ) }
  time = { check_max( 4.h * task.attempt, 'time' ) }

  errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' }
  maxRetries = 1
  maxErrors = '-1'

  // Process-specific resource requirements
  // NOTE - Only one of the labels below are used in the fastqc process in the main script.
  //        If possible, it would be nice to keep the same label naming convention when
  //        adding in your processes.
  // TODO nf-core: Customise requirements for specific processes.
  // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors
  withLabel:process_low {
    cpus = { check_max( 2 * task.attempt, 'cpus' ) }
    memory = { check_max( 14.GB * task.attempt, 'memory' ) }
    time = { check_max( 6.h * task.attempt, 'time' ) }
  }
  withLabel:process_medium {
    cpus = { check_max( 6 * task.attempt, 'cpus' ) }
    memory = { check_max( 42.GB * task.attempt, 'memory' ) }
    time = { check_max( 8.h * task.attempt, 'time' ) }
  }
  withLabel:process_high {
    cpus = { check_max( 12 * task.attempt, 'cpus' ) }
    memory = { check_max( 84.GB * task.attempt, 'memory' ) }
    time = { check_max( 10.h * task.attempt, 'time' ) }
  }
  withLabel:process_higher {
    cpus = 40
    memory = 1024.GB
    time = 8.h
  }
  withLabel:process_long {
    time = { check_max( 20.h * task.attempt, 'time' ) }
  }
  withLabel:cpu_2 {
    cpus = { check_max( 2 * task.attempt, 'cpus' ) }
  }
  withLabel:process_super_highmem {
    memory = { check_max( 200.GB * task.attempt, 'memory' ) }
  }
  withLabel:process_super_long {
    time = { check_max( 48.h * task.attempt, 'time' ) }
  }
}

I create a new label process_higher to hard code the parameters of cpu and memory. However, when I execute the tasks, no matter how many CPUs I set, it only uses one core to run.

The following file is my nextflow.log
nextflow.log (64.1 KB)