177 lines
7.8 KiB
Markdown
177 lines
7.8 KiB
Markdown
# Dual-MI50 Power × Context Sweep — V2 Audit
|
||
|
||
## Recommendation
|
||
|
||
**Do not set a production power cap from this CSV. The v2 sweep is still invalid.** The file records llama-bench's `stddev_ts` field—not mean throughput—because the harness extracts the final CSV column. In llama-bench CSV, the final columns are:
|
||
|
||
```text
|
||
..., avg_ns, stddev_ns, avg_ts, stddev_ts
|
||
```
|
||
|
||
The harness uses `$NF`, so the reported `pp_mean≈1–8` and `tg_mean≈0.2–0.4` are standard deviations in tok/s. They are not throughput. This exactly explains why they are orders of magnitude below the known sane values (~470 pp512 and ~60 tg) and why their context/power shape is physically incoherent.
|
||
|
||
Until the extraction is fixed and the sweep rerun, retain the existing known-safe cap—**225 W**—rather than interpreting these numbers as evidence for 200/180/160 W. No chat-versus-RAG split can be supported by this dataset.
|
||
|
||
Source audited: `mi50_pxc_v2_20260712_225435.csv` (most recent).
|
||
|
||
## Grid completeness
|
||
|
||
The intended grid was 4 powers × 3 contexts = 12 cells. The CSV contains only **9 cells**:
|
||
|
||
- Present: 225, 200, and 180 W × 512, 8192, and 32768 tokens.
|
||
- Missing: **all three 160 W cells**.
|
||
|
||
The script's 90-minute budget stopped the run before 160 W. Even with correct extraction, this file could not establish a four-level optimum.
|
||
|
||
## Recorded pivot tables
|
||
|
||
These tables reproduce the requested CSV fields, but the values are **misidentified `stddev_ts`, not mean tok/s**.
|
||
|
||
### Recorded `pp_mean` (invalid as throughput)
|
||
|
||
| Set cap | 512 | 8,192 | 32,768 |
|
||
|---:|---:|---:|---:|
|
||
| 225 W | 3.04 | 1.53 | 7.51 |
|
||
| 200 W | 3.20 | 1.58 | 7.71 |
|
||
| 180 W | 3.68 | 3.45 | 5.81 |
|
||
| 160 W | — | — | — |
|
||
|
||
### Recorded `tg_mean` (invalid as throughput)
|
||
|
||
| Set cap | 512 | 8,192 | 32,768 |
|
||
|---:|---:|---:|---:|
|
||
| 225 W | 0.37 | 0.17 | 0.24 |
|
||
| 200 W | 0.31 | 0.29 | 0.24 |
|
||
| 180 W | 0.32 | 0.27 | 0.17 |
|
||
| 160 W | — | — | — |
|
||
|
||
The physically impossible indicators requested in the prompt are present:
|
||
|
||
- `pp_mean` at 32K is 2.5–4.9× the 512/8K values despite being reported as throughput.
|
||
- Decode is ~0.2–0.4 tok/s, roughly two orders of magnitude below the expected ~60 tok/s.
|
||
- Prefill is ~1.5–7.7 tok/s, roughly two orders of magnitude below the expected ~470 tok/s at pp512.
|
||
|
||
These are not subtle noisy cells; the entire throughput dataset is the wrong metric.
|
||
|
||
## Spread audit
|
||
|
||
Flag criterion: `(max-min)/mean > 10%`. Because each outer repetition captured llama-bench's internal throughput standard deviation, these spreads describe variation in **standard deviation**, not variation in actual mean throughput. They are included only to show that the file is additionally noisy.
|
||
|
||
| Cap | Context | PP recorded range | PP spread | TG recorded range | TG spread | Flag |
|
||
|---:|---:|---:|---:|---:|---:|---|
|
||
| 225 W | 512 | 2.26–3.82 | 51.3% | 0.23–0.51 | 75.7% | PP + TG noisy |
|
||
| 225 W | 8,192 | 1.48–1.58 | 6.5% | 0.10–0.24 | 82.4% | TG noisy |
|
||
| 225 W | 32,768 | 7.46–7.56 | 1.3% | 0.20–0.28 | 33.3% | TG noisy |
|
||
| 200 W | 512 | 3.20–3.20 | 0.0% | 0.29–0.33 | 12.9% | TG noisy |
|
||
| 200 W | 8,192 | 1.41–1.75 | 21.5% | 0.26–0.33 | 24.1% | PP + TG noisy |
|
||
| 200 W | 32,768 | 7.69–7.74 | 0.6% | 0.21–0.27 | 25.0% | TG noisy |
|
||
| 180 W | 512 | 3.51–3.84 | 9.0% | 0.30–0.33 | 9.4% | Tight by threshold |
|
||
| 180 W | 8,192 | 3.44–3.45 | 0.3% | 0.16–0.38 | 81.5% | TG noisy |
|
||
| 180 W | 32,768 | 5.34–6.29 | 16.4% | 0.14–0.19 | 29.4% | PP + TG noisy |
|
||
|
||
Two outer reps are also too few for reliable distribution estimates, particularly when the underlying field is already the wrong one.
|
||
|
||
## Percent-retention audit
|
||
|
||
True pp/tg retention versus 225 W **cannot be computed** from this file. Dividing standard deviations by baseline standard deviations does not measure throughput retention.
|
||
|
||
For transparency, the ratios one would obtain from the mislabeled fields are shown below and explicitly rejected:
|
||
|
||
### Ratio of recorded PP-standard-deviation fields to 225 W
|
||
|
||
| Cap | 512 | 8,192 | 32,768 |
|
||
|---:|---:|---:|---:|
|
||
| 225 W | 100.0% | 100.0% | 100.0% |
|
||
| 200 W | 105.3% | 103.3% | 102.7% |
|
||
| 180 W | 121.1% | 225.5% | 77.4% |
|
||
| 160 W | — | — | — |
|
||
|
||
### Ratio of recorded TG-standard-deviation fields to 225 W
|
||
|
||
| Cap | 512 | 8,192 | 32,768 |
|
||
|---:|---:|---:|---:|
|
||
| 225 W | 100.0% | 100.0% | 100.0% |
|
||
| 200 W | 83.8% | 170.6% | 100.0% |
|
||
| 180 W | 86.5% | 158.8% | 70.8% |
|
||
| 160 W | — | — | — |
|
||
|
||
Applying <95% or <90% throughput flags to these ratios would be misleading, so no retention verdict is assigned.
|
||
|
||
## Hypothesis test
|
||
|
||
**Not testable with this CSV.**
|
||
|
||
- The recorded TG values do not tell whether decode remains flat with lower caps; they measure run-to-run/internal dispersion, not decode rate.
|
||
- The recorded PP values do not tell whether low-power prefill degradation worsens at 32K; they measure dispersion, not prefill rate.
|
||
- Therefore the operator's exact question—“is the optimal low-power config useless at the largest context?”—has no defensible answer from v2.
|
||
|
||
The apparent 180 W “retention” at 32K must not be interpreted. A lower standard deviation can coexist with much lower, equal, or higher mean throughput.
|
||
|
||
## Thermal read
|
||
|
||
| Set cap | 512 | 8,192 | 32,768 |
|
||
|---:|---:|---:|---:|
|
||
| 225 W | 39°C | 42°C | 44°C |
|
||
| 200 W | 40°C | 43°C | 44°C |
|
||
| 180 W | 40°C | 43°C | 47°C |
|
||
| 160 W | — | — | — |
|
||
|
||
- Maximum edge temperature was **47°C**; no 225 W cell exceeded 44°C.
|
||
- There is no evidence of edge-temperature throttling at 225 W.
|
||
- Lower caps being as warm or warmer is consistent with sequential run order/heat soak and does not indicate that lower power creates more heat.
|
||
- These temperatures are credible, but they cannot rescue the invalid throughput extraction.
|
||
|
||
## Root cause in the harness
|
||
|
||
Current code in `better_power_test.sh`:
|
||
|
||
```bash
|
||
v=$(echo "$out" | grep ... | tail -1 \
|
||
| awk -F',' '{gsub(/"/,"",$NF); print $NF}')
|
||
```
|
||
|
||
llama-bench documents the CSV suffix as:
|
||
|
||
```text
|
||
..., avg_ns, stddev_ns, avg_ts, stddev_ts
|
||
```
|
||
|
||
Therefore:
|
||
|
||
- `$NF` = `stddev_ts` — what v2 captured.
|
||
- `$(NF-1)` = `avg_ts` — the requested mean throughput.
|
||
|
||
Minimal correction:
|
||
|
||
```bash
|
||
extract_toks() {
|
||
local out="$1" tag="$2"
|
||
echo "$out" \
|
||
| grep -iE "(^|[\",])${tag}([\",]|$)" \
|
||
| tail -1 \
|
||
| awk -F',' '{gsub(/"/,"",$(NF-1)); print $(NF-1)}'
|
||
}
|
||
```
|
||
|
||
Safer correction: request JSON/JSONL and extract the named `avg_ts` field rather than relying on column position. Also retain llama-bench's `stddev_ts` separately as the **internal** variance metric instead of calling it an outer-rep throughput sample.
|
||
|
||
## Rerun requirements
|
||
|
||
1. Extract `avg_ts`, not `stddev_ts`.
|
||
2. Add a sanity gate before accepting a rep, e.g. pp512 >100 tok/s and TG >10 tok/s for this known configuration.
|
||
3. Preserve raw llama-bench output for at least one rep per cell so schema errors are auditable.
|
||
4. Complete all 12 cells, including 160 W, or explicitly mark the sweep partial.
|
||
5. Use at least 3 outer reps if wall-clock permits; two reps cannot characterize noise well.
|
||
6. Randomize/alternate cap order or perform a steady-state soak to reduce thermal-order confounding.
|
||
7. Record both `avg_ts` and `stddev_ts`; calculate retention from `avg_ts` only.
|
||
|
||
## Final answer
|
||
|
||
- **Is v2 trustworthy?** No. Power capping and temperatures appear valid, but throughput extraction is wrong.
|
||
- **Does decode stay flat as power falls?** Unknown.
|
||
- **Does large-context prefill degrade more?** Unknown.
|
||
- **Is a low-power optimum useless at 32K?** Unknown; the current data cannot answer it.
|
||
- **What cap should be set from this sweep?** None. Keep **225 W** as the conservative existing setting until a corrected v3 sweep captures `avg_ts`.
|
||
|
||
The prior invalidation was attributed to `-ngl 999`; v2 corrected that flag but introduced/retained a separate CSV-field bug. The sane throughput likely existed in the penultimate field of every raw llama-bench row, but it was discarded when only `$NF` was written to the summary CSV.
|