Skip to content

bench(probe): R2 batch-control record, attempts 1 and 2 (RTX 5070) - #1714

Merged
MakazhanAlpamys merged 4 commits into
mainfrom
probe/batch-control
Oct 7, 2026
Merged

MakazhanAlpamys merged 4 commits into
mainfrom
probe/batch-control

Conversation

@MakazhanAlpamys

Copy link
Copy Markdown
Owner

Measurement record, published as measured. Nothing in the rule or the numbers was changed after the runs.

What this is. The R2 batch-control probe on the RTX 5070 Laptop (8 GB) box: does a larger micro-batch recover the read-bound step on the disk tier, on one NVMe and striped over two? The rule (benchmarks/probe-rtx5070-batch-control.md, section 2) was committed before the first run; the driver and the GPU samplers are in benchmarks/harness/.

What it records.

  • Attempt 1 (2026-10-06): NO VERDICT. Position 0 was voided twice by the pre-registered validity rule; recorded as measured.
  • Attempt 2 (2026-10-07, 10:07-13:26Z, measurement window with no other load): complete. SINGLE drive: b2 NEAR-FREE, agrees with the reference; b3 PARTIAL, disagrees at b3. STRIPED: b2 and b3 PARTIAL, agree. Sections 5.2 and 6 carry the numbers and the verdict; raw results are under benchmarks/results/probe-rtx5070/batch-control/.

Scope. Only benchmarks/ changes; no source, no docs. The four commits are the ones made during the runs, re-parented onto current main because the branch had been cut from the two-drive striping branch that #1536 squash-merged.

Next. None for this record. A later probe appends a new section; the sections here stay as they are.

MakazhanAlpamys and others added 4 commits October 7, 2026 19:14
…e the rule

batch_control_probe.py runs the R2 batch control: one stream_probe.py
process per arm, SINGLE and STRIPED at batch 1, 2 and 3, two rounds (the
second the exact reverse of the first), after a CPU-only cache check, a
build arm and a 300 s settle. It imports the two-drive gate's stamps,
pre-arm checks, power/PDH sampler and void rule unchanged, requires an
empty card (0 MiB) before every arm, voids an arm another process read
1 GB during, and runs the read-free floor (--ablate --arms B_nocopy)
after every SINGLE arm's step block. An out-of-memory error, an arm past
a 600 s cap, or a spill (the card as full as what-bounds §18's spill and
the step slower than read plus compute in series) is a result that
skips the larger batches of that layout, not a void.

batch_control_rule.py is the record's rule from the committed files
alone (--summarize). batch_control_sampler.py adds nvidia-smi every 2 s
and the Windows GPU memory counters every 1 s, per adapter and for the
arm's own process.

stream_probe.py, outside the timed region: each timed step records its
wall-clock start (started_unix; the same four lines as 6ee60ce on
probe/two-drive-sustained, so the branches merge cleanly); an
out-of-memory error inside a --step or --ablate block is written as an
"oom" point and the run exits 3; every step point carries a SHA-256 per
row of its token ids and the allocator's counters.

Nothing has run: two --dry-runs into a scratch folder, a synthetic check
of the rule on fake arm files, and a mocked run of the arm flow (fake arm
processes that only write JSON).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
probe-rtx5070-batch-control.md asks whether tok/s on the cold
70B-shaped NF4 step at seq 512 scales with batch 1 -> 2 -> 3 as the
read-bound model of what-bounds §21 predicts (the step is the larger of
the read and B(S) = 1.241971 s + 0.0101240 s x S), on one drive and on
two striped drives, and what peak VRAM each batch needs on the 8 GB card.

The rule (§2), per layout and batch: validity rows for the SINGLE
batch-1 step (15.0-21.5 s, the gate's band), the path under test
(including the exact SINGLE cache folder and identical token rows across
the arms of one batch) and the STRIPED batch-1 step (7.69-12.0 s); a fit
row (out of memory, a 600 s cap, allocated above the card, or a spill:
7,620 MiB in use, §18's spill reading, and the step slower than read
plus compute in series); the class of the two-round mean of
step(b1)/step(b) (NEAR-FREE >= 0.95, NONE when b x e <= 1.05, else
PARTIAL); and that class against the model's. Every threshold is quoted
from a committed record. Power and SM clock are recorded and not judged:
the two spills on record on this card disagree on the clock (§18 at
1.8 GHz, gate-836 §8 at 2782 MHz).

The model predicts one drive near-free to batch 3 and two drives
compute-bound from batch 2, so the second drive would be worth about 4%
at batch 3. The SINGLE arms are the L2L step-0 control (§1, §1a); they
run PR #1536's per-drive reader with one drive at 2c6ed08, not
origin/main's. §4 holds the complete commands; the run belongs to
another session. Results pending.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ds as measured)

Run from 5a4df9be (the rule commit) on 2026-10-01 23:35, --plan all. Position 0
(SINGLE b1) was void twice: a SearchIndexer.exe read of 4.94 GB, then a 14.6 h
laptop suspend right after the re-run started. By the rule's own text a second
void in one position stops the sequence and row 2 gives no verdict; no round
arm was judged. Every file is kept as measured, void arms under _void/_void2.

Section 5.1 records what the files say, including what they do not: C: read
at a steady 2.0-2.2 GB/s in the first arm (about half of section 21's rate),
the indexer is ~1.8% of that traffic and is not shown to be the cause. The
rule (section 2) is untouched; attempt 2 runs whole with a new --run-prefix.

The repo's pre-commit hooks added a final newline to the raw JSON files and
trimmed one trailing space in a log line; nothing else in the data changed
(a whitespace-insensitive diff against the driver's output is empty).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…L (DISAGREES AT b3); STRIPED b2/b3 PARTIAL (AGREES)

Attempt 2 of the batch control (--run-prefix batch2), 2026-10-07 10:15:46Z-10:45:52Z,
from aef2d31a (src/ byte-identical to 2c6ed08 and to the merged #1536 head 0130e02).
Rows 1-3 did not fire; the rule (section 2, unedited) judged both layouts:

- SINGLE (R 18.327 s): b2 NEAR-FREE e 1.027 (1.068, 0.985), AGREES; b3 PARTIAL
  e 0.899 (0.938, 0.861), DISAGREES AT b3; no labels; crossover (1024, 1536]
  tokens against the model's 1688; batch 3 fits (6.312 GB allocated, 6876 MiB).
- STRIPED (R 8.839 s): b2 PARTIAL e 0.713, b3 PARTIAL e 0.497, both AGREE;
  crossover (512, 1024] against the model's 750.

One void (round 0 SINGLE b3: BackgroundDownload.exe read 3.10 GB), re-run once in
place as section 4 prescribes; its files are kept under the _void name. Windows
Search was running (the owner had not stopped it); the run started after
SearchIndexer.exe read 0 bytes for 5 min 16 s, per the 2026-10-04 ruling, and it
was not a top reader in any arm. Records as measured; section 5.2 and section 6 written
from the rule's output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MakazhanAlpamys MakazhanAlpamys added the ci:full Run the full CI matrix on this PR (a maintainer adds it at approval) label Oct 7, 2026
@MakazhanAlpamys
MakazhanAlpamys merged commit b925bb1 into main Oct 7, 2026
26 of 34 checks passed
@MakazhanAlpamys
MakazhanAlpamys deleted the probe/batch-control branch October 7, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:full Run the full CI matrix on this PR (a maintainer adds it at approval)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant