Skip to content

Triage of the 2026-08-17 full run: 263 failed tasks, kbet_pg and 5 methods produced nothing #105

Description

@rcannood

Triage of the full de.NBI run of 2026-08-17 (5w8BFLN1vMRRLW). Nextflow reported SUCCEEDED, but exitStrat() in labels_denbi.config ignores most non-zero exits after retrying, so 263 of 4369 tasks actually failed. One metric produced no scores at all, and five methods produced no results at all.

Where the data is

Failures

exit n meaning
132 130 SIGILL, illegal instruction
137 65 OOM
140 30 SLURM walltime
1 28 application error
99 10 non-applicable, expected

19 of 26 scored methods have all six datasets. fadvi, geneformer, scanorama_correct, scgpt_finetuned and scprint produced nothing at all, and kbet_pg is absent from score_uns.yaml entirely.

Must fix: non-method components

  • kbet_pg: 124/124 SIGILL, metric missing from the whole run. pegasuspy pulls hnswlib, which ships no PyPI wheels and whose setup.py compiles with -march=native. The image was built on an AVX-512 runner, so bare import hnswlib dies on the de.NBI workers (EPYC-Rome and Broadwell, AVX2 at most). docker run ghcr.io/openproblems-bio/task_batch_integration/metrics/kbet_pg:build_main python -c "import hnswlib" exits 132. The twin kbet_pg_label drew an AVX2-only runner and passed 248/248 -- same source, same version, different lottery ticket. The image on build_main still has 47 zmm references today, so a re-run fails again unchanged.
  • bbknn: same landmine, not yet triggered. annoy has the same -march=native setup.py, and methods/bbknn:build_main currently carries 136 zmm references. It passed in this run; it will not pass in the next one.
  • Pin the ISA at build time so this stops being a lottery. Both packages have an escape hatch, and viash emits the ENV lines correctly from a type: docker setup step placed before the pip step:
    setup:
      - type: docker
        env:
          - HNSWLIB_NO_NATIVE=1
          - CXXFLAGS=-march=x86-64-v3
          - ANNOY_COMPILER_ARGS=-D_CRT_SECURE_NO_WARNINGS,-fpermissive,-march=x86-64-v3,-O3,-ffast-math,-fno-associative-math,-DANNOYLIB_MULTITHREADED_BUILD,-std=c++14
      - type: python
        pypi: [ ... ]
    Verified against openproblems/base_python:1: no AVX-512 in either extension, AVX2 kernels retained, both import. Affects kbet_pg, kbet_pg_label, bbknn, scanorama_correct, scanorama_integrate, scalex.
  • Move those env vars into the base images (openproblems/base_python, in openproblems-bio/openproblems) so no derived image anywhere can draw a bad ticket. The per-component fix above is the stopgap.
  • kbet: 65 OOM + 4 walltime, all on hypomap and mouse_pancreas_atlas. Successful tasks peak at ~398 GB RSS against veryhighmem (200 GB x attempt, clamped to maxMemory = 480.GB), so this is the hardware ceiling and not a mislabel. Needs a decision rather than a patch: subsample, or drop kbet now that kbet_pg_label measures the same thing for a fraction of the cost.

Method bugs

  • scanorama_correct: 6/6 SIGILL. Same -march=native problem as kbet_pg, via annoy. Confirmed by pulling the exact digest from the run, sha256:fc42f62d660a8804dc4469a4d489023f37076d348276b15aecc29278efbe3240: its annoylib.so has 136 AVX-512 references and reproduces the SIGILL on the real dkd input. The image has since been rebuilt and the current one runs clean, which is exactly the problem. Covered by the ISA pin above.
  • scgpt_finetuned: 8/10, one line. script.py:176 uses adata.X.A; .A was removed from scipy sparse matrices in scipy 1.14. Use adata.X.toarray().
  • geneformer: 8/10, HF 404. Duplicate of Method for geneformer has been blocked by new geneformer model! #96. Upstream ctheodoris/Geneformer renamed *_gc95M.pkl to *_gc104M.pkl and replaced gf-*-95M-i4096/ with Geneformer-V2-104M/ in the "add V2 models" commits of 2025-06-18, and every hf_hub_download tracks main, so it broke silently. Quickest unblock is to pin revision="42dbf0ae41244b93f1c3735fa393a966ffe64dfa" (2025-06-13, verified to still carry all four gc95M dictionaries and all four model directories); migrating to V2 is a separate call about what we are benchmarking.
  • scprint: 12/12, triton vs CUDA. The image has torch 2.2.0+cu121 and triton 2.2.0, but openproblems/base_pytorch_nvidia:1 now ships CUDA 13.1 at /usr/local/cuda. Triton 2.2's ptx_get_version() only maps CUDA 10/11/12 and raises RuntimeError: Triton only support CUDA 10.0 or higher. Triton bundles its own CUDA 12.3 ptxas; setting TRITON_PTXAS_PATH=/usr/local/lib/python3.12/dist-packages/triton/third_party/cuda/bin/ptxas makes detection return 12.3 (verified in-image). Bumping scprint/torch is the real answer. Related: Inconsistent preprocessing for scPRINT #81.

Resource labels

  • fadvi: 6/6 walltime, and it is a misconfiguration. config.vsh.yaml:100 is [midtime,midmem,midcpu] with no gpu, so SLURM sent it to -p cpu with no --gpus -- the log says GPU available: False, used: False -- and it hit the 4 h midtime ceiling on all six datasets. Add gpu and raise the time tier.
  • scalex: 5/6 walltime, same shape. script.py:41 passes gpu=0, but the engine is openproblems/base_python:1 (no CUDA) and the label has no gpu, so it always runs on CPU. dkd took 28 min, everything larger blew past 8 h. Needs base_pytorch_nvidia:1 plus a gpu label.
  • uce: 5/6 walltime, genuine. It did get its T4. dkd finished in 5 h 05, the rest hit hightime with ~40 h ETAs on a single card. veryhightime (24 h) is defined in _viash.yaml and used by no component; this is what it is for, though even 24 h may not cover hypomap and tabula_sapiens.
  • mnnpy (5/6) and batchelor_mnn_correct (5/6): walltime, probably real limits. dkd in 23 min and 4 h 57 respectively, everything larger over 8 h. Worth one bump to veryhightime, and if they still time out we record it as a scaling limit of the methods rather than chasing it.

Not a bug

The 10 exit-99 tasks are correct: cellplm, scgpt_zeroshot, scimilarity and geneformer declaring themselves human-only on the two mouse datasets.

Suggested order

The two AVX-512 images first, since they are broken right now and one of them silently deletes a metric from the benchmark. Then the one-liners (scgpt_finetuned, geneformer, scprint, fadvi), then scalex, then the time tiers. kbet needs a decision, not a patch.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions