Skip to content

Commit 9c4a8f3

Browse files
[codex] Clarify hardware test coverage (#24)
* Clarify hardware test coverage * Fix Tower valuation and add repo navigation --------- Co-authored-by: Codex <codex@openai.com>
1 parent 570de84 commit 9c4a8f3

12 files changed

Lines changed: 238 additions & 21 deletions

File tree

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
# JSONL: data files where byte-identity matters. We pin as `binary` (rather
2727
# than `text eol=lf`) so SHAs match across platforms without depending on
2828
# git's autocrlf settings being correct on the reproducer's side.
29+
.gitattributes text eol=lf
2930
*.jsonl binary
3031

3132
# Generated/raw artifacts — also pin as binary.
3233
*.log binary
3334
power.csv binary
3435
thermals.csv binary
36+
*.gz binary

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,24 @@ but I'm making it public so that other people can use it too.
1212
| Every claim in this repo with a status tag | [`claims.yaml`](claims.yaml) — strong / provisional / held / retracted matrix |
1313
| What we **didn't** measure (and where PRs are welcome) | [`NOT-HERE-YET.md`](NOT-HERE-YET.md) |
1414
| What this evidence can and can't support | [`KNOWN-LIMITATIONS.md`](KNOWN-LIMITATIONS.md) — caveats on what we did measure |
15+
| Where the benchmark folders start | [`benchmarks/README.md`](benchmarks/README.md) — agent-task benchmark landing page |
1516
| **"Coder-Next or 27B (or 27B-no-think) for my task?"** | [`COMPARISON.md`](COMPARISON.md) — head-to-head decision doc |
1617
| The full single-table comparison across all entries | [`SCORECARD.md`](SCORECARD.md) |
18+
| How repo size is managed | [`REPO-SPACE.md`](REPO-SPACE.md) — storage hotspots and artifact policy |
1719
| How to benchmark a new local model | [`tooling/ADDING-A-MODEL.md`](tooling/ADDING-A-MODEL.md) |
1820
| How to replay a specific past run | [`tooling/REPRODUCING.md`](tooling/REPRODUCING.md) |
1921

2022
## Operating point (read before quoting)
2123

22-
Agent-task benchmarks under [`benchmarks/`](benchmarks/) all use **Cyankiwi 4-bit AWQ** quants on ** RTX PRO 6000 Blackwell at 500 W cap**. Other quants (official FP8, Unsloth UD4 GGUF, BF16), other VRAM tiers (24 GB / 48 GB), other hardware classes (Mac M-series unified memory), and languages other than Python are **not characterized** by those entries. See [`COMPARISON.md` § What this benchmark doesn't characterize](COMPARISON.md#what-this-benchmark-doesnt-characterize) for the full validity-boundary list, and [`ROADMAP.md`](ROADMAP.md) for what's queued to fill those gaps.
24+
Agent-task benchmarks under [`benchmarks/`](benchmarks/) all use **Cyankiwi 4-bit AWQ** quants on **2x RTX PRO 6000 Blackwell at 500 W cap** unless an entry README says otherwise. Other quants, other VRAM tiers, other hardware classes, and languages other than Python are **not characterized** by those entries. See [`COMPARISON.md` section "What this benchmark doesn't characterize"](COMPARISON.md#what-this-benchmark-doesnt-characterize) for the model-benchmark validity boundaries, and [`ROADMAP.md`](ROADMAP.md) for what's queued to fill those gaps.
2325

24-
Rig-characterisation studies under [`hardware-tests/`](hardware-tests/) have their own operating-point scope — see each study's README. In particular, [`hardware-tests/qwen3.6-q8-fleet-2026-05-17/`](hardware-tests/qwen3.6-q8-fleet-2026-05-17/) ranks four hardware classes on **Q8_0 GGUF** under llama.cpp (with a Tower2 vLLM-FP8 appendix row for the model the llama.cpp/CUDA path crashes on).
26+
Rig-characterisation studies under [`hardware-tests/`](hardware-tests/) have their own operating-point scope. Start with [`hardware-tests/README.md`](hardware-tests/README.md) before quoting hardware claims. In particular, [`hardware-tests/qwen3.6-q8-fleet-2026-05-17/`](hardware-tests/qwen3.6-q8-fleet-2026-05-17/) ranks four hardware classes on **Q8_0 GGUF** dense and MoE workloads under llama.cpp, with a Tower2 vLLM-FP8 appendix row for the MoE model the llama.cpp/CUDA path crashes on.
2527

2628
## Layout
2729

2830
```text
2931
benchmarks/
32+
README.md agent-task benchmark landing page and navigation map
3033
dreamserver-75-pr-audit/
3134
GPT-5.5/ cloud, full audit
3235
Opus-4.7/ cloud, full audit
@@ -44,7 +47,10 @@ benchmarks/
4447
Qwen3-Coder-Next-AWQ/ local, full memo repo (DOCU BUY, 1 of 3 runs shipped — verdict reliability caveat in README)
4548
Qwen3.6-35B-A3B-AWQ/ local, no usable deliverable (0 of 3 runs shipped, kept as failure-mode entry)
4649
hardware-tests/
50+
README.md hardware-test landing page: coverage matrix, settled vs held questions
4751
vllm-power-sweep-2026-04-29/ rig characterisation: vLLM throughput vs GPU power cap, 28-cell sweep with raw CSVs + audit notes
52+
qwen3.6-q8-fleet-2026-05-17/ cross-platform dense + MoE Q8 hardware comparison
53+
local-ai-hardware-valuation-2026-05-17/ recomputable buyer valuation worksheet
4854
```
4955

5056
## Benchmarks
@@ -57,9 +63,12 @@ hardware-tests/
5763
| [`microbench-2026-04-28`](benchmarks/microbench-2026-04-28/) | 12 smaller-scope task families (5-30 min deliverables) split across 3 phases — coding (Phase 1), structured business tasks (Phase 2), unbounded business/writing (Phase 3). Designed to surface task-class-specific differences between local 30B-class quantizations. N=3 per cell. Three highest-signal task families published as full per-model entries: adversarial-hallucination, market-research, doc-synthesis. | `Qwen3.6-27B-AWQ`, `Qwen3-Coder-Next-AWQ` |
5864
| [`microbench-phase-b-2026-05-02`](benchmarks/microbench-phase-b-2026-05-02/) | Bumps the four highest-signal cells of `microbench-2026-04-28` from N=3 → N=10 to bound the headline failure rates with proper Wilson CIs, and adds **27B-no-think** as a third arm across the **full 12-family grid** (~240 runs total). Settles the `p3_doc` 27B word-trim loop as a stable ~40% failure shape, and bounds Coder-Next's `p3_market` 0/3 STRUCTURAL_FAIL as 0/10 at N=10 (Wilson 95% [0%, 27.8%]). | `Qwen3.6-27B-AWQ` (thinking), `Qwen3.6-27B-AWQ` (no-think), `Qwen3-Coder-Next-AWQ` |
5965

66+
For the benchmark landing page and per-folder navigation map, start with
67+
[`benchmarks/README.md`](benchmarks/README.md).
68+
6069
## Hardware tests
6170

62-
`hardware-tests/` holds rig characterisation runs — power, throughput, and thermal sweeps on the lab hardware itself, separate from agent-task benchmarks. They support the same evidence base (e.g. validating the operating power cap a model run was conducted under), but they live in their own tree because they answer hardware questions, not model questions.
71+
`hardware-tests/` holds rig characterisation runs — power, throughput, and thermal sweeps on the lab hardware itself, separate from agent-task benchmarks. Start with [`hardware-tests/README.md`](hardware-tests/README.md): it makes the dense-vs-MoE coverage, backend exceptions, and "settled vs held" boundaries explicit.
6372

6473
| Test | Shape | What it measures |
6574
|---|---|---|

REPO-SPACE.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Repo Space And Data Layout
2+
3+
This repo stores benchmark evidence, not just prose. That makes it useful, but
4+
it also means raw artifacts can grow quickly. The goal is to keep enough data
5+
for claims to be auditable while avoiding duplicate or low-value bulk.
6+
7+
## Snapshot
8+
9+
Measured on the working tree on 2026-05-17:
10+
11+
| Area | Size |
12+
|---|---:|
13+
| `hardware-tests/` | 107.66 MiB |
14+
| `hardware-tests/qwen3.6-q8-fleet-2026-05-17/` | 105.41 MiB |
15+
| `benchmarks/` | 92.62 MiB |
16+
| `tooling/` | 0.39 MiB |
17+
18+
Largest file families:
19+
20+
| Extension | Files | Raw size | Gzip size at level 6 | Potential saving |
21+
|---|---:|---:|---:|---:|
22+
| `.csv` | 909 | 77.04 MiB | 13.53 MiB | 82.4% |
23+
| `.jsonl` | 753 | 30.56 MiB | 2.28 MiB | 92.5% |
24+
| `.patch` | 150 | 22.72 MiB | 5.00 MiB | 78.0% |
25+
| `.htm` | 33 | 26.88 MiB | 2.21 MiB | 91.8% |
26+
| `.html` | 54 | 17.37 MiB | 2.17 MiB | 87.5% |
27+
28+
The only exact duplicate over 1 MiB found in this snapshot is the Qwen fleet
29+
prompt corpus:
30+
31+
- `hardware-tests/qwen3.6-q8-fleet-2026-05-17/workloads/prompts.jsonl`
32+
- `hardware-tests/qwen3.6-q8-fleet-2026-05-17/harness/workloads/prompts.jsonl`
33+
34+
Those files are byte-identical and cost about 6.07 MiB each. They were left in
35+
place in this PR because the harness copy helps the vendored harness remain
36+
standalone. A future cleanup can remove one copy if the harness default paths
37+
are changed and verified.
38+
39+
## Keep In Git By Default
40+
41+
- `README.md`, findings, audit notes, manifests, and source-of-truth claim docs.
42+
- Small structured receipts: `cell.json`, `grade.json`, `label.json`,
43+
`summary.json`, `cost.json`, and compact aggregate CSVs.
44+
- Canonical headline tables used by published prose.
45+
- Scripts needed to regenerate derived outputs.
46+
47+
## Compress Or Externalize By Default
48+
49+
- Long sampler time series such as `power.csv` and `thermals.csv`.
50+
- Full `inferences.jsonl` and transcript JSONL files when a compact receipt is
51+
enough for the claim.
52+
- Raw SEC filings, PDFs, HTML pages, and large patches that can be recovered
53+
from a source URL plus hash.
54+
- Generated visual artifacts when the source data and render script are present.
55+
56+
If a large raw artifact is needed for auditability, prefer `*.gz` plus a
57+
sidecar SHA256 file. If an artifact is needed only for archival completeness,
58+
prefer a GitHub release asset or another immutable object store and keep the
59+
URL, SHA256, byte count, and retrieval date in the repo.
60+
61+
## Suggested Next Cleanup
62+
63+
1. Decide whether published bundles must be runnable standalone, or only
64+
auditable inside the repo. That determines whether duplicate prompt corpora
65+
should stay.
66+
2. Convert raw sampler CSVs and long JSONL traces to `*.gz`, then update readers
67+
and docs to treat compressed text as the canonical raw format.
68+
3. Add a CI check that fails on exact duplicate files over 1 MiB unless the path
69+
is allowlisted in a manifest.
70+
4. For new benchmark entries, require a README at every public landing folder
71+
and a manifest line for every large raw artifact.

benchmarks/README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Benchmarks
2+
3+
Start here if your question is about model behavior on messy real-world tasks.
4+
This tree is separate from `hardware-tests/`: these entries ask what a model
5+
can actually produce when it has to research, code, audit, write, or build a
6+
deliverable. Hardware throughput and buyer-value questions live in
7+
[`../hardware-tests/README.md`](../hardware-tests/README.md).
8+
9+
## Reading Order
10+
11+
| If you want | Read first |
12+
|---|---|
13+
| Current model-selection synthesis | [`../COMPARISON.md`](../COMPARISON.md) |
14+
| Single-table benchmark summary | [`../SCORECARD.md`](../SCORECARD.md) |
15+
| Cross-cutting findings by date | [`findings-index.md`](findings-index.md) |
16+
| How to replay or add a run | [`../tooling/README.md`](../tooling/README.md) |
17+
18+
## What Each Benchmark Answers
19+
20+
| Folder | Primary question | Best first file |
21+
|---|---|---|
22+
| [`dreamserver-75-pr-audit`](dreamserver-75-pr-audit/) | Can the model complete a long-horizon 75-PR maintainer audit at all? | [`dreamserver-75-pr-audit/README.md`](dreamserver-75-pr-audit/README.md) |
23+
| [`dreamserver-1-pr-audit`](dreamserver-1-pr-audit/) | What is the floor task for local PR-audit competence? | [`dreamserver-1-pr-audit/README.md`](dreamserver-1-pr-audit/README.md) |
24+
| [`wallstreet-intern-test`](wallstreet-intern-test/) | Can the model build a traceable investment memo and supporting artifacts? | [`wallstreet-intern-test/README.md`](wallstreet-intern-test/README.md) |
25+
| [`microbench-2026-04-28`](microbench-2026-04-28/) | How do local models behave on 12 smaller task families at N=3? | [`microbench-2026-04-28/README.md`](microbench-2026-04-28/README.md) |
26+
| [`microbench-phase-b-2026-05-02`](microbench-phase-b-2026-05-02/) | Which early microbench signals survive an N=10 expansion and 27B no-think arm? | [`microbench-phase-b-2026-05-02/README.md`](microbench-phase-b-2026-05-02/README.md) |
27+
28+
## Model Entry Shape
29+
30+
Most model-entry folders use some subset of these artifacts:
31+
32+
| File or folder | Meaning |
33+
|---|---|
34+
| `README.md` | Human-readable entry summary, caveats, and read order. |
35+
| `grade.json` | Programmatic verdict and grader dimensions where a grader exists. |
36+
| `label.json` | Failure-mode label from the repo taxonomy. |
37+
| `receipt.json` | Model, harness, launch, token, and environment receipt. |
38+
| `cost.json` | Wall time, token throughput, and rough energy/cost fields. |
39+
| `summary.json` | Run-level finish reason and iteration/token totals. |
40+
| `transcript.jsonl` | Full model/tool loop when the entry publishes it. |
41+
| `deliverable/`, `report/`, `memo/`, `model/`, `prs/` | The actual artifacts the model produced. |
42+
43+
Read the benchmark README first, then the model-entry README, then the structured
44+
JSON receipts before diving into transcripts or deliverables.
45+
46+
## Storage Notes
47+
48+
Some benchmark folders intentionally keep raw source documents, patches,
49+
transcripts, and deliverables so claims stay auditable. Other entries are lean
50+
on purpose and publish only receipts, grades, labels, and summaries. For the
51+
repo-wide storage policy and current size hotspots, see
52+
[`../REPO-SPACE.md`](../REPO-SPACE.md).

hardware-tests/README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Hardware Tests
2+
3+
Start here if your question is about machines rather than model behavior. This
4+
tree answers hardware questions: throughput, power, thermals, backend maturity,
5+
and buyer-value ratios. It is separate from the agent-task benchmark tree.
6+
7+
## Coverage Matrix
8+
9+
The cross-platform fleet study is not just a 27B dense run. It covers both a
10+
dense model and a MoE model across the fleet, with one explicit Blackwell
11+
engine/quant exception for the MoE row.
12+
13+
| Host | Dense 27B Q8 | MoE 35B-A3B | Backend status | Use for |
14+
|---|---|---|---|---|
15+
| Blackwell 6000 Tower | llama.cpp CUDA, canonical | native llama.cpp Q8 retracted; vLLM FP8 defended row | CUDA Q8 MoE hits SOFT_MAX on sm_120; vLLM works | discrete-GPU speed, long-context engine sensitivity |
16+
| M5 Max MacBook Pro | llama.cpp Metal, canonical | llama.cpp Metal, canonical | clean Metal path | unified-memory Mac appliance behavior |
17+
| DGX Spark | llama.cpp CUDA aarch64, canonical | llama.cpp CUDA aarch64, canonical | clean CUDA aarch64 path | NVIDIA unified-memory desktop behavior |
18+
| EVO X2 / Strix Halo | llama.cpp Vulkan, canonical partial | llama.cpp Vulkan, canonical partial | Vulkan works; ROCm retry still pending | AMD APU / small-chassis behavior |
19+
20+
Canonical rows live in
21+
[`qwen3.6-q8-fleet-2026-05-17/aggregate/canonical-headline.csv`](qwen3.6-q8-fleet-2026-05-17/aggregate/canonical-headline.csv).
22+
Appendix and engine-comparison rows live in
23+
[`qwen3.6-q8-fleet-2026-05-17/aggregate/appendix-headline.csv`](qwen3.6-q8-fleet-2026-05-17/aggregate/appendix-headline.csv).
24+
Do not mix those two tables in a cross-host ranking.
25+
26+
## What Each Bundle Answers
27+
28+
| Bundle | Primary question | Main caution |
29+
|---|---|---|
30+
| [`qwen3.6-q8-fleet-2026-05-17`](qwen3.6-q8-fleet-2026-05-17/) | How do four local-AI hardware classes handle the same dense and MoE Qwen3.6 workloads? | Multi-user serving is held; Tower2 MoE uses a defended vLLM FP8 exception because native llama.cpp Q8 crashes. |
31+
| [`local-ai-hardware-valuation-2026-05-17`](local-ai-hardware-valuation-2026-05-17/) | What are buyers paying per usable memory GB, bandwidth, and measured 27B Q8 tok/s? | Prices and wall-power assumptions are time-bound inputs. |
32+
| [`vllm-power-sweep-2026-04-29`](vllm-power-sweep-2026-04-29/) | Where is the RTX PRO 6000 Blackwell LLM-serving power-cap plateau? | Tower2-only, vLLM-only, AWQ-INT4 models. |
33+
| [`ltx23-power-sweep-2026-05-05`](ltx23-power-sweep-2026-05-05/) | Does the same GPU power-cap curve apply to diffusion/video generation? | Workload-specific to the LTX-2.3 workflow tested. |
34+
| [`cpu-fullpower-2026-05-05`](cpu-fullpower-2026-05-05/) | Can the Tower2 Threadripper PRO CPU sustain rated 350 W on its cooling stack? | One rig, one cooling design, CPU-side validation only. |
35+
36+
## What The Cross-Platform Study Can Settle
37+
38+
- Single-user prefill, decode, and TTFT for the tested dense and MoE model
39+
rows.
40+
- Backend maturity and failure modes under the tested source SHA.
41+
- Chassis and thermal behavior under sustained local-inference operation.
42+
- Narrow buyer-value statements tied to the measured rows and dated prices.
43+
44+
## What It Does Not Settle Yet
45+
46+
- Best hardware for every quantization, model size, or engine.
47+
- Best multi-user serving hardware under proper batching engines.
48+
- Task quality of Q8 outputs.
49+
- Cross-day variance or unit-to-unit variance.
50+
- Total cost of ownership without plug-metered wall power on every host.
51+
52+
For the active gap list, read [`../NOT-HERE-YET.md`](../NOT-HERE-YET.md).
53+
54+
## Storage Posture
55+
56+
The hardware-test tree is the current repo-size hotspot because it preserves
57+
raw sampler CSVs, JSONL inference traces, and audit bundles. That is useful for
58+
trust, but it should stay intentional. See [`../REPO-SPACE.md`](../REPO-SPACE.md)
59+
for the measured size breakdown and the recommended path for compressing or
60+
externalizing future raw artifacts.

hardware-tests/local-ai-hardware-valuation-2026-05-17/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Current generated output, using the bundled price/spec assumptions:
6161
| System | Price | Usable AI GB | GB/s | `$/GB` | `$/GB/s` | 27B Q8 decode | `$/decode tok/s` |
6262
|---|---:|---:|---:|---:|---:|---:|---:|
6363
| Blackwell 6000 Tower, single-RTX-6000 anchor | $12,000 | 96 | 1792 | $125.00 | $6.70 | 49.78 | $241.04 |
64-
| Blackwell 6000 Tower, as-configured server | $33,000 | 96 | 1792 | $343.75 | $18.42 | 49.78 | $662.86 |
64+
| Blackwell 6000 Tower, as-configured server | $33,000 | 190 | 3584 | $173.68 | $9.21 | 49.78 | $662.86 |
6565
| M5 Max MacBook Pro 16 | $4,850 | 128 | 614 | $37.89 | $7.90 | 16.78 | $288.97 |
6666
| NVIDIA DGX Spark | $4,699 | 121 | 273 | $38.83 | $17.21 | 7.60 | $618.21 |
6767
| EVO X2 / Strix Halo | $3,000 | 124 | 256 | $24.19 | $11.72 | 7.82 | $383.59 |
@@ -91,8 +91,12 @@ is ecosystem, not raw memory value: Metal/macOS is not CUDA/Linux, and that
9191
matters for some serving stacks.
9292

9393
The Blackwell 6000 Tower is the opposite profile: expensive capacity, excellent
94-
bandwidth, excellent measured speed. It is a speed purchase, not the cheapest
95-
way to buy 100 GB-class memory.
94+
bandwidth, excellent measured speed. The as-configured server row now values
95+
the actual two-GPU memory asset: two 96 GB RTX PRO 6000 Blackwell cards,
96+
modeled as 190 GB conservative usable aggregate VRAM and 3584 GB/s aggregate
97+
bandwidth. Its measured `$/decode tok/s` still uses the one-GPU canonical
98+
MMBT row, so do not quote the aggregate-memory row as aggregate-speed evidence
99+
until a measured dual-GPU or sharded row is available.
96100

97101
## What this can and cannot settle
98102

0 commit comments

Comments
 (0)