# Local NoCap GPU-hours (CSV evidence only)

Estimate from **local** `train_time_ms` columns only. No Modal billing, no deploy queries.

## Method

- Sources: `nocap-repo/results/**/*.csv` and `cf-pages-nocap-agent-dev/data/*.csv`
- Per file: `train_time_ms` = max over rows (equals last non-empty in all scanned files)
- Hours = `train_time_ms / 3.6e6`
- Deduped **byte-identical** copies (SHA-256); preferred path keeps repo `log.csv` over public bundle / archive mirrors
- Scanned **101** CSVs with `train_time_ms` → **90** unique runs after dedupe (**11** identical copies dropped)

## Total

**72.03 GPU-hours** measured training clock (sum of unique runs).

## By experiment family

| Family | Runs | Hours | Share |
|--------|-----:|------:|------:|
| `f1` | 5 | 19.47 | 27.0% |
| `claim_stack` | 4 | 14.66 | 20.4% |
| `theory_split_qkv_p2400` | 4 | 5.76 | 8.0% |
| `colab_wave` | 4 | 3.93 | 5.4% |
| `curation` | 6 | 3.68 | 5.1% |
| `theory_tv6` | 2 | 3.58 | 5.0% |
| `systems_v1` | 20 | 2.95 | 4.1% |
| `theory_tv1` | 4 | 2.55 | 3.5% |
| `theory_tv7` | 4 | 2.45 | 3.4% |
| `indeea` | 9 | 2.00 | 2.8% |
| `horizon` | 4 | 1.58 | 2.2% |
| `theory_tv2` | 2 | 1.26 | 1.8% |
| `theory_tv4` | 2 | 1.26 | 1.7% |
| `theory_tv3` | 2 | 1.25 | 1.7% |
| `theory_tv8` | 2 | 1.22 | 1.7% |
| `theory_tv5` | 2 | 1.21 | 1.7% |
| `wave2` | 6 | 1.17 | 1.6% |
| `wave4` | 2 | 1.13 | 1.6% |
| `wave3` | 4 | 0.68 | 1.0% |
| `theory_research_atomic` | 2 | 0.23 | 0.3% |
| **Total** | **90** | **72.03** | **100%** |

### Rollups

- All `theory_*`: **20.78 h** (26 runs)
- All waves (`wave2`–`wave4` + `colab_wave`): **6.91 h** (16 runs)
- `systems_v1`: **2.95 h** (20 runs; 10 basename pairs across workspaces `decelzora` / `lov36492` with non-identical content — counted as separate runs)

## Top runs (by measured hours)

| Hours | Family | Max step | Path |
|------:|--------|---------:|------|
| 3.98 | `claim_stack` | 4768 | `results/claim_muon_par/log.csv` |
| 3.95 | `f1` | 4768 | `results/finals/f2b_record/log.csv` |
| 3.92 | `f1` | 4768 | `results/finals/f2_record/log.csv` |
| 3.89 | `f1` | 4768 | `results/f1_seal/log.csv` |
| 3.86 | `f1` | 4768 | `results/f1_seal_bcarol/log.csv` |
| 3.84 | `f1` | 4768 | `results/f1_baseline/log.csv` |
| 3.59 | `claim_stack` | 4768 | `results/claim_stack_v1/seed2029/cand_log.csv` |
| 3.56 | `claim_stack` | 4768 | `results/claim_stack_v1/seed2029/stock_log.csv` |
| 3.53 | `claim_stack` | 4768 | `results/claim_stack_v1/seed4242/cand_log.csv` |
| 1.81 | `theory_tv6` | 2400 | `results/theory_adam_lr_persistence_2400_v1/tv6_adamlr_persist_0030_seed42_2400/log.csv` |
| 1.77 | `theory_tv6` | 2400 | `results/theory_adam_lr_persistence_2400_v1/tv6_adamlr_persist_0018_seed42_2400/log.csv` |
| 1.76 | `theory_split_qkv_p2400` | 2400 | `results/decelzora_archive_20260714/p2400_split/log.csv` |
| 1.47 | `theory_split_qkv_p2400` | 2000 | `results/theory_split_qkv_cheap_p2400_v1/split_live/log.csv` |
| 1.43 | `theory_split_qkv_p2400` | 1900 | `results/theory_split_qkv_cheap_p2400_v1/partial_joint_preempt/log.csv` |
| 1.37 | `colab_wave` | 400 | `results/colab-accountA/w13_prior_off/log.csv` |
| 1.36 | `colab_wave` | 400 | `results/colab-accountA/w13_prior_on/log.csv` |
| 1.10 | `theory_split_qkv_p2400` | 1450 | `results/decelzora_archive_20260714/p2400_joint_restart/log.csv` |
| 1.02 | `colab_wave` | 300 | `results/colab-accountA/w11_fp16/log.csv` |
| 0.66 | `theory_tv1` | 800 | `results/theory_v1/tv1_prior_learn_base800/log.csv` |
| 0.64 | `theory_tv2` | 800 | `results/theory_v1/tv2_handoff_step600_800/log.csv` |

## Incomplete / partial flags

| Hours | Flags | Path |
|------:|-------|------|
| 1.426 | partial_path | `nocap-repo/results/theory_split_qkv_cheap_p2400_v1/partial_joint_preempt/log.csv` |
| 0.173 | few_rows | `nocap-repo/results/colab-accountA/w14_warmdown/log.csv` |
| 0.166 | partial_path, short_horizon(step=200/800), no_final | `nocap-repo/results/research_atomic_v1/partials/tv10_interleave_partial/tv10_order_interleave_seed7070_800/log.csv` |
| 0.062 | few_rows, partial_path, short_horizon(step=50/800), no_final | `nocap-repo/results/research_atomic_v1/partials/tv11_muonlr_025_partial/tv11_muonlr_025_seed8080_800/log.csv` |

**4** unique runs flagged (still included in the total; they contribute measured clock only).

## Deduped identical copies

| Kept hours | Kept | Dropped |
|-----------:|------|---------|
| 3.89 | `nocap-repo/results/f1_seal/log.csv` | `cf-pages-nocap-agent-dev/data/f1_seal.csv` |
| 3.86 | `nocap-repo/results/f1_seal_bcarol/log.csv` | `nocap-repo/results/claim_stack_v1/seed2029/f1_baseline.csv`<br>`cf-pages-nocap-agent-dev/data/f1_claim_w2.csv` |
| 3.59 | `nocap-repo/results/claim_stack_v1/seed2029/cand_log.csv` | `nocap-repo/results/claim_stack_v1/seed2029/claim_stack_s2_cand_seed2029_4768.csv`<br>`cf-pages-nocap-agent-dev/data/s2029_cand.csv` |
| 3.56 | `nocap-repo/results/claim_stack_v1/seed2029/stock_log.csv` | `nocap-repo/results/claim_stack_v1/seed2029/claim_stack_s2_stock_seed2029_4768.csv`<br>`cf-pages-nocap-agent-dev/data/s2029_stock.csv` |
| 3.53 | `nocap-repo/results/claim_stack_v1/seed4242/cand_log.csv` | `cf-pages-nocap-agent-dev/data/s4242_cand.csv` |
| 1.43 | `nocap-repo/results/theory_split_qkv_cheap_p2400_v1/partial_joint_preempt/log.csv` | `nocap-repo/results/decelzora_archive_20260714/p2400_joint_partial/log.csv` |
| 0.61 | `nocap-repo/results/theory_split_qkv_cheap_v1_decelzora/tv7_splitqkv_cheap_joint_seed3141_800/log.csv` | `nocap-repo/results/decelzora_archive_20260714/cheap_v1_3141/tv7_splitqkv_cheap_joint_seed3141_800/log.csv` |
| 0.61 | `nocap-repo/results/theory_split_qkv_cheap_v1_decelzora/tv7_splitqkv_cheap_split_seed3141_800/log.csv` | `nocap-repo/results/decelzora_archive_20260714/cheap_v1_3141/tv7_splitqkv_cheap_split_seed3141_800/log.csv` |

## Caveats

- **`train_time_ms` ≠ billed Modal GPU-hours.** This is wall-clock accumulated inside the training loop as logged.
- **Lower bound** of measured training clocks only: excludes idle GPU time, container spin-up, compile/warmup outside the logged timer (if any), failed spawns, retries that left no CSV, and jobs with no local artifact.
- Multi-workspace evidence (`decelzora`, `lov36492`, `bcarol`, `colab-accountA`, `indeea`) may reflect parallel or repeated campaigns; byte-identical copies are deduped, but near-duplicate runs with different logs are counted separately.
- Public bundle CSVs under `data/` are mirrors of claim/f1 logs and were folded into the unique set.
- Incomplete/partial runs are included at their measured `max(train_time_ms)` only.

_Generated from local CSV scan; total **72.03 h** across **90** unique runs._
