Skip to content

Fix/senkin match original - #68

Merged
VladimirShitov merged 6 commits into
mainfrom
fix/senkin-match-original
Sep 16, 2026
Merged

VladimirShitov merged 6 commits into
mainfrom
fix/senkin-match-original

Conversation

@VladimirShitov

@VladimirShitov VladimirShitov commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Describe your changes

Fix the implementation to match the competition 2022 results

Checklist before requesting a review

  • I have performed a self-review of my code

  • Check the correct box. Does this PR contain:

    • Breaking changes
    • New functionality
    • Major changes
    • Minor changes
    • Bug fixes
  • Proposed changes are described in the CHANGELOG.md

  • CI Tests succeed and look good!

benjaminfreyuu and others added 6 commits September 7, 2026 22:12
The 2026-08-14 run had senkin_tmp_train hit the 8h walltime on the CITE datasets
and OOM/crash on the rest. Two causes:

1. LightGBM set no num_threads, so it defaulted to one thread per core the
   container *sees* (the whole node) while the job is cgroup-throttled to
   meta["cpus"] -- the threads oversubscribe and thrash. The original solution
   ran on Kaggle with dedicated cores so never hit this. Pin num_threads to
   meta["cpus"] (results-preserving; same class of fix as guanlab in #59).

2. senkin has no applicability guard, so it ran on all 8 datasets including
   Multiome and the ADT->GEX swap, where it wastes hours and OOMs. Add an
   exit_non_applicable guard (via src/utils/exit_codes.py) so it only runs on the
   GEX->ADT CITE direction, and point the component test at bmmc_cite/normal.

Verified: viash test passes (2/2) on the normal (GEX->ADT) direction; the guard
correctly skips the swap direction.

Note: pinning threads removes the oversubscription, but senkin runs 4 LightGBM
models (134 targets x 5 folds) + 2 NNs in one job, which the original spread
across separate multi-hour Kaggle sessions - it may still need a walltime above
8h or a lighter config on the full data.
…agnostic

Uses the fixed senkin-tmp-cite-pred (fix/match-original-pipeline) and
restores the original feature blocks: log1p(CPM) inputs, CLR-TSVD 200,
correlated genes selected on the log-normalized RNA per batch (plus genes
whose name matches a protein), TSVD-100 and PCA-64 of the sqrt/z-score/
batch-median normalization, and the four LightGBM prediction blocks, all
z-scored per cell before the two neural networks.

The batch column is used as is (or a single batch when absent) instead of
parsing day/donor out of it, which only made sense for the NeurIPS 2022
naming. Predictions are rescaled to the target scale with one global affine
transform fitted on the out-of-fold training predictions, so RMSE/MAE are
meaningful while every per-cell and per-protein correlation is unchanged.
The predict step checks that the test cells match the trained bundle and
uses light resource labels.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tmp-cite-pred#5 is merged

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@benjaminfreyuu benjaminfreyuu 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.

Looks correct!

@VladimirShitov
VladimirShitov merged commit d12b413 into main Sep 16, 2026
3 checks passed
@VladimirShitov
VladimirShitov deleted the fix/senkin-match-original branch September 16, 2026 11:58
rcannood pushed a commit that referenced this pull request Sep 16, 2026
* senkin: pin LightGBM threads and skip non-applicable datasets

* senkin_tmp: match the original pipeline and make the wrapper dataset agnostic

* senkin_tmp: pin the library to the verified commit

* senkin_tmp: pin the library to the commit merged with main (#4)

* senkin_tmp: pin the library to a830343 (robust correlation_score)

* senkin_tmp: install the library from main now that lueckenlab/senkin-tmp-cite-pred#5 is merged

---------

Co-authored-by: Benjamin Frey <124636707+benjaminfreyuu@users.noreply.github.com>
rcannood pushed a commit that referenced this pull request Sep 16, 2026
* senkin: pin LightGBM threads and skip non-applicable datasets

* senkin_tmp: match the original pipeline and make the wrapper dataset agnostic

* senkin_tmp: pin the library to the verified commit

* senkin_tmp: pin the library to the commit merged with main (#4)

* senkin_tmp: pin the library to a830343 (robust correlation_score)

* senkin_tmp: install the library from main now that lueckenlab/senkin-tmp-cite-pred#5 is merged

---------

Co-authored-by: Benjamin Frey <124636707+benjaminfreyuu@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants