dnathinker-checkpoints / lab_message_2026_04_27_v3.md
explcre's picture
Upload lab_message_2026_04_27_v3.md with huggingface_hub
8f07afa verified

Reply to lab β€” 2026-04-27 ~05:40 UTC

Status absorbed. The split looks right to me β€” H100 and lab are not duplicating if we lock in this division of labour:

H100 (single GPU)

Locked in to the headline LLaVA-mode chain + everything that needs the multi-turn RFT / reasoning expansion / sanitiser commits (all on mllm-integrate-server2):

  • T3 zs_raw bench (36% in flight)
  • T3 zs_enriched bench (queued)
  • Stages 1–4 of post_bench_pipeline.sh: T1 / T2 / T3 / joint-multitask fusion-SFT in LLaVA mode (the control for your arch ablation)
  • Stage 3b T3 reasoning-only ablation
  • Stage 3c T3 multi-turn RFT + retrain
  • Stage 3d T3 reasoning-trace expansion on post-RFT JSONL (gated)
  • Stage 3e T2 reasoning-trace expansion (gated on your T2 regen marker)
  • Stage 3f T1 reasoning-trace expansion (already accumulating; 333/333 today, will keep accumulating daily)
  • Reaper slurm/genqual_reaper_v5.sh auto-fires eval_t3_oracle.py + run_generation_eval.py on every predictions.jsonl as it lands β€” no wait for the post-bench pipeline.

So Table 1 row 4 ("Fusion SFT, LLaVA, per task") + the joint multitask headline + T3-specific RFT/reasoning rows all come from H100.

Lab cluster (multi-GPU)

Locked in to ablations + RL + the lab-only data pipeline:

  • 226075/076/077 arch ablation (LLaVA / unified+ntp / unified+mdlm) β†’ Table 3 Phase 2 row.
  • 226057 sv_gspo_v5 β†’ Table 1 row 5/6 (RL on top of Loop-SFT).
  • 226086 NTv3-8m encoder β†’ multi-encoder grid for Table 3 Β§4c.
  • 226090 T1+T3 full enriched JSONL HF upload β†’ unblocks H100's full-N benches once landed.
  • 226095 T2 regen v4 β†’ unblocks H100's Stage 3e (T2 reasoning expansion) + a clean T2 re-bench with promoter+enhancer TFBS scans.

When 226090 + 226095 land on HF I'll grab them, re-fire T2 zero-shot on the new enriched data (need the proper enhancer-side TFBS evidence for the T2 paper row), and pivot Stage 3e to fire 333 T2 reasonings immediately.

On 226075-077 loss curves

Loss 6β†’8 with bf16 NaN at step 1000 eval β€” I see why you're worried, but two notes:

  1. The 92edaf7 fix (saving final/pytorch_model.bin always) means even if eval keeps NaN-ing, the final adapter is recoverable from the latest periodic-save checkpoint. Good.
  2. The 17.6 β†’ 0.06 collapse on the earlier unified+ntp run was almost certainly the collator bug pre-bda9ee0. Now that the SFT collator sanitises before tokenisation, the model can no longer cheat on peak_name=… / Observed dataset row … / label_source=…. Loss floors should be closer to "real" (~3–5 at 1 epoch on 105k).

If the unified+mdlm run is still tracking similar to LLaVA at step 2000+, that itself is a paper-worthy result (architecture-mode ablation says: same data + same encoder + LoRA β†’ DNA head doesn't matter much, the LLM head is good enough). Worth committing to even if curves stay noisy.

🚨 Enformer oracle (225956) β€” investigate

53h zero-progress is almost certainly a stuck dataloader or NFS hang, not "almost done". Suggested debug, in order of effort:

# 1. Confirm the process is alive (if it's a zombie just kill it):
ps -o pid,stat,etime,cmd -p $(squeue -h -j 225956 -o %N | xargs -I{} ssh {} 'pgrep -f run_oracle_enformer'  || echo MISSING)

# 2. py-spy dump to see exactly where it's stuck (no GPU
#    interference β€” read-only stack inspection):
sudo py-spy dump --pid <pid>
# Common: stuck in DataLoader workers waiting on a NFS file open.

# 3. If py-spy points at a DataLoader worker:
#   - Kill the job. Re-launch with --num-workers=0 (single-process
#     dataloader; bypasses fork-NFS bug entirely) and --logging-steps 1
#     so we see step ticks immediately.
#   - That gets you 50% throughput vs 8 workers but at least
#     finishes.

# 4. If py-spy points at flash_attn or model.forward:
#    Probably a bf16 NaN in the warmup; restart with fp32 master
#    weights or --bf16=false for the first 500 steps.

# 5. Check the actual log for the ABSOLUTE LATEST line (not just
#    "Loading weights 100%"):
tail -1 /path/to/225956/log
ls -la /path/to/225956/log    # last-modified timestamp
# If timestamp is 53h ago, dataloader hang.
# If timestamp is < 5 min ago but logging is sparse, --logging-steps
# is mis-set (default 500 means 500 backward passes before first
# step log, which on Enformer is ~50 min).

If you'd rather have H100 take over Enformer training, I can fire it once T3 bench finishes (~5h). H100 is fast enough that 20-epoch Enformer should take ~12–15h. Just tell me the input-data path (your /extra/zhanglab0 path) + epoch count and I'll launch slurm/run_oracle_enformer.sh-equivalent locally. But β€” DeepSTARR-7cell at val_pearson=0.136 is what every T3 paper row in the post-bench pipeline scores against, and it's "good enough" in the sense that we use deltas (activity_delta_src, activity_relative_shift) where weak oracles still rank correctly. Enformer is a Table 4 cross-oracle robustness check, not the headline. So skipping it for v1 is fine if it costs another 50h of GPU.

Innovative-component work prioritisation

Per your note "make the whole pipeline with all innovative component work is important", the pipeline today has every component wired:

Component Path Status
LLaVA-mode fusion-SFT train_fusion_sft.py --architecture-mode llava βœ… default; lab 226075
Unified-mode (NTP / MDLM) --architecture-mode unified --dna-loss-kind {ntp,mdlm} βœ… wired; lab 226076/077
Diffusion (LLaDA) --architecture-mode diffusion NOT YET WIRED (train_fusion_sft.py:88 says "Phase 3 = diffusion, not yet wired")
RFT multi-turn scripts/rft_t3.py --rounds 4 --candidates 4 βœ…; H100 Stage 3c
Reasoning expansion (OpenRouter Ling-1T) scripts/build_reasoning_traces.py βœ…; H100 333 T1 done, T2/T3 gated
Loop-SFT scripts/train_loop_sft.py βœ… wired; needs trajectory dataset
SV-GSPO scripts/train_sv_gspo.py βœ…; lab 226057

The single missing innovative component is Phase 3 diffusion. Roughly 1–2 days of work (need to add a DNAOutputHead for LLaDA

  • collator changes + reverse-process sampler). I can take this on H100 once Stage 4 finishes, or drop into the Phase 4 ("after submission") list. Your call.

What I'm doing in the meantime (next 5 hours)

  1. Reaper auto-scoring T1 zs (in flight, ~25 min remaining).
  2. Watching for your full-enriched HF push (~5h ETA per your message); when it lands I'll pull and re-fire T2 zs bench on the new enriched data.
  3. T1 reasoning loop will keep accumulating (333/day β€” ~10k rows in ~30 days at single-key, faster if more keys).

After T3 bench finishes: 4. Stages 1/2/3/3b/3c/3d/3f/4 fire automatically. 5. I might also pivot to Phase 3 diffusion implementation if you're OK with H100 spending ~2 days on it after Stage 4 lands.

Ask

  • Confirm split: H100 owns LLaVA-mode + RFT + reasoning + headline joint multitask. Lab owns arch ablation (226075-077) + SV-GSPO + multi-encoder + T2 regen + Enformer.
  • On Enformer hang: are you OK with H100 taking it over after T3 bench finishes? Or stick with DeepSTARR-7cell only and defer Enformer to extended-paper review pass?
  • On Phase 3 diffusion: drop now, or implement after H100's Stage 4 finishes? (~2 days.)

β€” H100 side