Skip to content

fix(pride config): scale ISOBARIC_WORKFLOW and MSSTATS_CONVERTER with experiment size - #718

Merged
ypriverol merged 1 commit into
devfrom
fix/pride-config-dynamic-tmt-resources
Jul 27, 2026
Merged

fix(pride config): scale ISOBARIC_WORKFLOW and MSSTATS_CONVERTER with experiment size#718
ypriverol merged 1 commit into
devfrom
fix/pride-config-dynamic-tmt-resources

Conversation

@ypriverol

Copy link
Copy Markdown
Member

Problem

ISOBARIC_WORKFLOW and MSSTATS_CONVERTER are single processes that aggregate the whole experiment — like PROTEOMICSLFQ, which this config already scales. Their per-file defaults do not fit large runs, and both failed on a real 552-fraction TMT dataset (MSV000085836) under pride_codon_slurm:

process default outcome
ISOBARIC_WORKFLOW 72 GB OOM (exit 137) after 2h36m; succeeded only via retry escalation, peak RSS 118.7 GB
MSSTATS_CONVERTER 12 GB OOM-killed 9 times in a row — the run died after exhausting attempts

MSSTATS_CONVERTER is the worse of the two: starting at 12 GB, the * task.attempt ladder never reaches a workable size for an experiment this big, so every attempt dies and the pipeline fails after ~17 hours of otherwise-successful work (conversion, both search engines, ms2features, Percolator and protein inference had all completed).

Fix

Scale both with the experiment, reusing the pattern already established here for PROTEOMICSLFQ / ASSEMBLE_EMPIRICAL_LIBRARY:

  • ISOBARIC_WORKFLOW takes the same path(mzmls) input as PROTEOMICSLFQ, so it reuses the identical file-count rule (< 200 files ? 72 GB : 250 GB, × task.attempt).
  • MSSTATS_CONVERTER receives the single merged consensusXML rather than a file list, so it scales on that file's size instead (< 2 GB ? 24 GB : 200 GB, × task.attempt).

One subtlety worth reviewing

.size() means bytes for a single Path but element count for a List. consensusXML is currently a single file (tmt.nf:61 passes ISOBARIC_WORKFLOW.out.out_consensusXML), so the byte reading is correct today — but the closure guards the List case explicitly, because a future change to a collected channel would otherwise silently take the small branch and quietly reintroduce exactly this OOM.

Notes

  • Both ceilings sit well under the profile's resourceLimits (1900 GB) and fit standard ~480 GB nodes, so no bigmem routing is needed.
  • Thresholds are deliberately the same shape as the existing entries rather than a new mechanism; the intent is that big experiments start at a workable size instead of discovering it through the retry ladder.

… experiment size

Both are SINGLE processes that aggregate the whole experiment, so per-file defaults do
not fit large runs - the same reason PROTEOMICSLFQ already scales here. Measured on
MSV000085836 (552 TMT fractions, pride_codon_slurm):

  ISOBARIC_WORKFLOW  72GB default -> OOM (exit 137) after 2h36m, succeeded only via the
                     retry escalation, peak RSS 118.7GB. Hours wasted on a first attempt
                     that could never fit.
  MSSTATS_CONVERTER  12GB default -> OOM-killed 9 times in a row. The retry ladder never
                     reaches a workable size, so the run dies after exhausting attempts.

ISOBARIC_WORKFLOW takes the same path(mzmls) input as PROTEOMICSLFQ, so it reuses the
identical file-count rule. MSSTATS_CONVERTER receives the single merged consensusXML
instead of a file list, so it scales on that file's size.

.size() means BYTES for a single Path but COUNT for a List, so the consensusXML closure
guards the List case explicitly - a future change to a collected channel would otherwise
silently take the small branch and reintroduce the OOM.
@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 687ddba1-93ac-457d-9ac5-04ff1ba95c90

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/pride-config-dynamic-tmt-resources

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

nf-core pipelines lint overall result: Passed ✅ ⚠️

Posted for pipeline commit 0ca3032

+| ✅ 116 tests passed       |+
#| ❔  17 tests were ignored |#
#| ❔   1 tests had warnings |#
!| ❗   7 tests had warnings |!
Details

❗ Test warnings:

  • pipeline_todos - TODO string in nextflow.config: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs
  • pipeline_todos - TODO string in nextflow.config: Specify any additional parameters here
  • pipeline_todos - TODO string in CONTRIBUTING.md: Add any pipeline specific contribution guidelines here, such as coding styles, procedures, checklists etc.
  • pipeline_todos - TODO string in base.config: Check the defaults for all processes
  • pipeline_todos - TODO string in base.config: Customise requirements for specific processes.
  • pipeline_if_empty_null - ifEmpty(null) found in /home/runner/work/quantms/quantms/subworkflows/local/dda_id/main.nf: _ ch_software_versions = ch_software_versions.mix(PHOSPHO_SCORING.out.versions.ifEmpty(null))
    _
  • pipeline_if_empty_null - ifEmpty(null) found in /home/runner/work/quantms/quantms/subworkflows/local/id/main.nf: _ ch_software_versions = ch_software_versions.mix(PHOSPHO_SCORING.out.versions.ifEmpty(null))
    _

❔ Tests ignored:

❔ Tests fixed:

✅ Tests passed:

Run details

  • nf-core/tools version 4.0.3
  • Run at 2026-07-27 14:21:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the pride_codon_slurm execution profile to avoid out-of-memory failures on large PRIDE reanalysis runs by scaling resource requests for experiment-aggregating processes based on experiment size (file count or merged file size), instead of using per-file defaults.

Changes:

  • Add experiment-size-based memory/CPU scaling for ISOBARIC_WORKFLOW using the same file-count rule already used for PROTEOMICSLFQ.
  • Add input-file-size-based memory scaling for MSSTATS_CONVERTER, with an explicit guard for the “List vs single Path” .size() behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@ypriverol
ypriverol merged commit 8c07ac9 into dev Jul 27, 2026
39 of 40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants