|
| 1 | +// nf-core/configs: Purdue RCAC Gautschi cluster profile |
| 2 | +// Gautschi: AMD EPYC 9654 (Genoa), 192 cores / 384 GB per cpu node; 1.5 TB highmem nodes; |
| 3 | +// NVIDIA L40 (smallgpu) and H100 (ai) GPU partitions |
| 4 | +// https://www.rcac.purdue.edu/knowledge/gautschi |
| 5 | + |
| 6 | +params { |
| 7 | + config_profile_description = 'Purdue RCAC Gautschi cluster profile (CPU + NVIDIA GPU nf-core pipelines).' |
| 8 | + config_profile_contact = 'Arun Seetharam (@aseetharam)' |
| 9 | + config_profile_url = 'https://www.rcac.purdue.edu/knowledge/gautschi' |
| 10 | + |
| 11 | + // Shared iGenomes mirror (identical path on Bell, Negishi, Gautschi) |
| 12 | + igenomes_base = '/depot/itap/datasets/igenomes' |
| 13 | + |
| 14 | + // REQUIRED. Run `slist` on Gautschi to list your accounts. |
| 15 | + cluster_account = null |
| 16 | + |
| 17 | + // Opt-in: route CPU jobs that fit within standby limits (<= 4 h, <= 384 GB) |
| 18 | + // through the 4 h standby QoS. Long, high-memory, and GPU jobs stay on normal QoS. |
| 19 | + use_standby = false |
| 20 | + |
| 21 | + // GPU partition for process_gpu label: 'smallgpu' (2x L40) or 'ai' (8x H100) |
| 22 | + gpu_partition = 'smallgpu' |
| 23 | +} |
| 24 | + |
| 25 | +// Tell nf-core schema validation to ignore our custom params |
| 26 | +validation { |
| 27 | + ignoreParams = ['cluster_account', 'use_standby', 'gpu_partition'] |
| 28 | +} |
| 29 | + |
| 30 | +process { |
| 31 | + executor = 'slurm' |
| 32 | + |
| 33 | + // Global ceiling: largest available node (highmem: 1.5 TB, 192 cores, 14 d). |
| 34 | + // Covers all partitions; per-task routing below picks the right one. |
| 35 | + resourceLimits = [ |
| 36 | + cpus : 192, |
| 37 | + memory: 1500.GB, |
| 38 | + time : 336.h |
| 39 | + ] |
| 40 | + |
| 41 | + // Dynamic partition routing: |
| 42 | + // highmem (1.5 TB, 24 h, >= 49 cores required by Slurm policy) when task.memory > 384 GB |
| 43 | + // cpu (384 GB, 14 d) otherwise |
| 44 | + queue = { task.memory > 384.GB ? 'highmem' : 'cpu' } |
| 45 | + clusterOptions = { |
| 46 | + if (!params.cluster_account) { |
| 47 | + System.err.println("ERROR: purdue_gautschi profile requires --cluster_account=<slurm_account>.") |
| 48 | + System.err.println(" Run 'slist' on a Gautschi login node to list your accounts.") |
| 49 | + System.exit(1) |
| 50 | + } |
| 51 | + // standby QoS has a 4 h walltime cap and does not apply to highmem or GPU partitions. |
| 52 | + def standby = params.use_standby && task.memory <= 384.GB && task.time <= 4.h |
| 53 | + "--account=${params.cluster_account}" + (standby ? ' --qos=standby' : '') |
| 54 | + } |
| 55 | + |
| 56 | + // GPU jobs. Default to smallgpu (L40); override with --gpu_partition=ai for H100. |
| 57 | + // GPU count is derived from the task's `accelerator.request` so multi-GPU |
| 58 | + // workflows (e.g. parabricks) work without profile changes. |
| 59 | + withLabel: process_gpu { |
| 60 | + queue = { |
| 61 | + if (!(params.gpu_partition in ['smallgpu', 'ai'])) { |
| 62 | + System.err.println("ERROR: purdue_gautschi params.gpu_partition must be 'smallgpu' or 'ai' (got '${params.gpu_partition}').") |
| 63 | + System.exit(1) |
| 64 | + } |
| 65 | + params.gpu_partition |
| 66 | + } |
| 67 | + clusterOptions = { |
| 68 | + if (!params.cluster_account) { |
| 69 | + System.err.println("ERROR: purdue_gautschi profile requires --cluster_account=<slurm_account>.") |
| 70 | + System.err.println(" Run 'slist' on a Gautschi login node to list your accounts.") |
| 71 | + System.exit(1) |
| 72 | + } |
| 73 | + def gpus = task.accelerator?.request ?: 1 |
| 74 | + "--account=${params.cluster_account} --gres=gpu:${gpus}" |
| 75 | + } |
| 76 | + } |
| 77 | +} |
| 78 | + |
| 79 | +executor { |
| 80 | + queueSize = 50 |
| 81 | + pollInterval = '30 sec' |
| 82 | + queueStatInterval = '5 min' |
| 83 | + submitRateLimit = '10 sec' |
| 84 | +} |
| 85 | + |
| 86 | +apptainer { |
| 87 | + enabled = true |
| 88 | + autoMounts = true |
| 89 | + cacheDir = "${System.getenv('RCAC_SCRATCH') ?: System.getenv('SCRATCH') ?: System.getProperty('user.home')}/.apptainer/cache" |
| 90 | +} |
0 commit comments