⚠️ Research Artifact — NOT Recommended for Production Use
This model is an unintended but valuable research artifact. It was produced across multiple interrupted training runs with known bugs. Its behavior is unpredictable and it should only be used for research into hierarchical LoRA architectures.
3 sequential LoRA levels (rank=16 each) stacked on Omni-DNA-20M:
h = W_base(x) # frozen base model
h = h + B₀A₀(x) # Level 0: weight-space (fundamental)
h = h + B₁A₁(h) # Level 1: activation-space (1st harmonic)
h = h + B₂A₂(h) # Level 2: activation-space (2nd harmonic)
Effective rank: 16³ = 4,096 via sequential composition (not additive)
Level 0 finds the fundamental representation (converges first)
Level 1 refines on top of Level 0 output (mid-frequency)
Level 2 captures residual signal (highest frequency / rarest patterns)
Each level receives the accumulated output of all previous levels
Key Finding: Per-Layer Gradient Handling
This is a heterogeneous architecture — each level operates in a different representational space. Global gradient clipping destroys learning by compressing all layers through a single bottleneck. Per-layer gradient norms must be tracked independently.
Training History (The Messy Truth)
Run
Steps
Data Batches
Why It Died
1
0→4356
17,424
OOM (eval memory leak + long sequence attention)
2
4356→5742
5,544
Killed to deploy log timestamps
3
5742→7950
8,832
OOM (same eval leak pattern)
4
7920→9999
8,316
Killed at completion
Total: ~39,516 batches ≈ 5.0 effective epochs (but across 4 interrupted runs with reshuffled data due to broken epoch tracking — each restart reshuffles from epoch 0)
Known Bugs in Training Code
Epoch tracking broken on resume: always starts epoch loop at 0. Fix: start_epoch = resume_step // steps_per_epoch
Memory leak in eval: ~6MB leaked per eval from CUDA allocator fragmentation. gc.collect + empty_cache slows but does not stop it.
VRAM log shows PyTorch-allocated only (~72MB), not real nvidia-smi total (~2.3GB). Gap is CUDA allocator fragmentation.
expandable_segments:True must be set via tmux, not export VAR=val && nohup (env var is lost)
Performance at Step 9999
Token
AUC
F1
Samples (pos)
HGT_prok_host
0.7855
0.0000
11
HGT_arch_euk
0.6417
0.0000
13
HGT_detection
0.6290
0.0000
97
HGT_fungi_euk
0.5118
0.0000
81
HGT_bac_euk
0.4557
0.0149
133
HGT_prot_euk
0.4393
0.0625
62
Overall
0.5140
—
—
Best overall AUC: 0.5745 at step 1287 (early training before snap-collapse oscillations)
What Worked
Ranking (AUC) learned well — prok_host at 0.79 with only 11 positive samples