Download docs/benchmarks/plot-ds41-head.py from staccs/ds4-winhip: direct link, hf CLI and curl.
- Browser
- Download file 11.3 kB
-
https://huggingface.co/staccs/ds4-winhip/resolve/main/docs/benchmarks/plot-ds41-head.py
- Command line
-
hf download hf://staccs/ds4-winhip/docs/benchmarks/plot-ds41-head.py
-
curl -L -o plot-ds41-head.py https://huggingface.co/staccs/ds4-winhip/resolve/main/docs/benchmarks/plot-ds41-head.py
11.3 kB
| #!/usr/bin/env python3 | |
| """Tabulate the feat/optimize head campaign: the five-case suite and the | |
| 2K-64K frontier sweep. The vision surface has its own record and assembler | |
| (plot-ds41-vision.py, ds41-spark-vision-2026-10-14). | |
| Reads the three fresh-process suite passes (suite-run-N.csv) and the frontier | |
| attach passes present on disk (frontier-run-N.csv, one to three), checks the | |
| invariants the harnesses assert, and writes tables.md and summary.json beside | |
| them. Fails loud, never silently drops a row. | |
| """ | |
| import csv | |
| import json | |
| import math | |
| from pathlib import Path | |
| from statistics import mean, median | |
| import matplotlib | |
| matplotlib.use("Agg") | |
| import matplotlib.pyplot as plt | |
| DATA = Path(__file__).with_name("ds41-spark-head-2026-10-14") | |
| WARMPATH = Path(__file__).with_name("ds41-warmpath-2026-10-13") | |
| PASSES = 3 | |
| CASES = ["prose_short", "code_short", "table_short", "prose_long", "table_long"] | |
| FRONTIERS = list(range(2048, 65537, 2048)) | |
| GENERATED = 128 | |
| COLOR = "#087f8c" | |
| SUITE_COLUMNS = ["engine", "case", "rep", "cache", "prompt_tokens", | |
| "completion_tokens", "ttft_s", "total_s", "sse_deltas", | |
| "prefill_tps", "decode_tps", "e2e_tps", "finish", "prompt_sha"] | |
| FRONTIER_COLUMNS = ["ctx_tokens", "prefill_tokens", "prefill_cached_tokens", | |
| "prefill_tps", "gen_tokens", "gen_tps", "first_token_sec", | |
| "tok_per_step", "wall_s", "clock_mhz"] | |
| def read(path, columns): | |
| with path.open() as source: | |
| rows = list(csv.DictReader(source)) | |
| assert list(rows[0].keys()) == columns, f"{path.name}: unexpected columns" | |
| return rows | |
| def stats(values): | |
| return {"median": median(values), "min": min(values), "max": max(values), | |
| "samples": values} | |
| # ------------------------------------------------------------ the five cases | |
| def load_suite(): | |
| case_shas = {case["name"]: case["prompt_sha256"] | |
| for case in json.load((WARMPATH / "cases.json").open())} | |
| passes = [read(DATA / f"suite-run-{i}.csv", SUITE_COLUMNS) | |
| for i in range(1, PASSES + 1)] | |
| for index, rows in enumerate(passes, start=1): | |
| assert len(rows) == len(CASES) * 3, f"suite-run-{index}: {len(rows)} rows, expected 15" | |
| for position, case in enumerate(CASES): | |
| window = rows[position * 3:position * 3 + 3] | |
| assert [row["case"] for row in window] == [case] * 3, f"suite-run-{index}: case order" | |
| assert [row["rep"] for row in window] == ["0", "1", "2"], f"suite-run-{index}: {case} reps" | |
| assert [row["cache"] for row in window] == ["cold", "warm", "warm"], \ | |
| f"suite-run-{index}: {case} cache tags" | |
| assert len({row["prompt_sha"] for row in window}) == 1, \ | |
| f"suite-run-{index}: {case} bytes differ inside a pass" | |
| assert window[0]["prompt_sha"] == case_shas[case], \ | |
| f"suite-run-{index}: {case} bytes are not the archived ones" | |
| assert len({row["prompt_tokens"] for row in window}) == 1, \ | |
| f"suite-run-{index}: {case} prompt length varies" | |
| assert all(row["finish"] == "length" for row in window), \ | |
| f"suite-run-{index}: {case} finish reason" | |
| for row in rows: | |
| for key in ("ttft_s", "total_s", "decode_tps", "e2e_tps"): | |
| value = float(row[key]) | |
| assert math.isfinite(value) and value > 0, \ | |
| f"suite-run-{index}: {row['case']} rep {row['rep']} {key}" | |
| for case in CASES: | |
| tokens = {rows[CASES.index(case) * 3]["prompt_tokens"] for rows in passes} | |
| completion = {rows[CASES.index(case) * 3]["completion_tokens"] for rows in passes} | |
| assert len(tokens) == 1 and len(completion) == 1, \ | |
| f"{case}: the passes measured different work" | |
| return passes | |
| def suite_report(passes): | |
| cases = [] | |
| for position, case in enumerate(CASES): | |
| windows = [rows[position * 3:position * 3 + 3] for rows in passes] | |
| cold = [window[0] for window in windows] | |
| warm = [row for window in windows for row in window if row["cache"] == "warm"] | |
| cases.append({ | |
| "case": case, | |
| "prompt_tokens": int(cold[0]["prompt_tokens"]), | |
| "completion_tokens": int(cold[0]["completion_tokens"]), | |
| "prompt_sha": cold[0]["prompt_sha"], | |
| "cold_ttft_s": stats([float(row["ttft_s"]) for row in cold]), | |
| "cold_prefill_tps": stats([float(row["prefill_tps"]) for row in cold]), | |
| "warm_ttft_ms": stats([float(row["ttft_s"]) * 1000 for row in warm]), | |
| "decode_tps": stats([float(row["decode_tps"]) for window in windows | |
| for row in window]), | |
| "e2e_tps": stats([float(row["e2e_tps"]) for window in windows | |
| for row in window]), | |
| }) | |
| return {"passes": PASSES, "cases": cases} | |
| # ---------------------------------------------------------- the frontier set | |
| def load_frontier(): | |
| paths = sorted(DATA.glob("frontier-run-*.csv")) | |
| assert 1 <= len(paths) <= PASSES, f"{len(paths)} frontier passes on disk" | |
| runs = [read(path, FRONTIER_COLUMNS) for path in paths] | |
| for index, rows in enumerate(runs, start=1): | |
| assert [int(row["ctx_tokens"]) for row in rows] == FRONTIERS, \ | |
| f"frontier-{index}: frontiers" | |
| assert all(int(row["gen_tokens"]) == GENERATED for row in rows), \ | |
| f"frontier-{index}: generated tokens" | |
| assert all(int(row["prefill_cached_tokens"]) == 0 for row in rows), \ | |
| f"frontier-{index}: reused prompt tokens" | |
| for key in ("prefill_tps", "gen_tps"): | |
| assert all(math.isfinite(float(row[key])) and float(row[key]) > 0 | |
| for row in rows), f"frontier-{index}: {key}" | |
| inputs = [[int(row["prefill_tokens"]) for row in run] for run in runs] | |
| assert all(row == inputs[0] for row in inputs), "frontier: input counts differ across runs" | |
| return runs | |
| def frontier_report(runs): | |
| report = {"passes": len(runs), "frontiers": [], "metrics": {}} | |
| for key in ("prefill_tps", "gen_tps"): | |
| run_means = [mean(float(row[key]) for row in run) for run in runs] | |
| report["metrics"][key] = {"run_means": run_means, | |
| "median_run_mean": median(run_means)} | |
| for index, frontier in enumerate(FRONTIERS): | |
| row = {"frontier_tokens": frontier, | |
| "actual_prompt_tokens": int(runs[0][index]["prefill_tokens"]), | |
| "generated_tokens": GENERATED} | |
| for key in ("prefill_tps", "gen_tps"): | |
| values = [float(run[index][key]) for run in runs] | |
| row[key] = {"runs": values, "median": median(values), | |
| "min": min(values), "max": max(values)} | |
| report["frontiers"].append(row) | |
| return report | |
| # --------------------------------------------------------------- the outputs | |
| def fmt(value, digits=1): | |
| return f"{value:,.{digits}f}" | |
| def write_tables(suite, frontier): | |
| lines = [ | |
| "# DeepSeek V4.1 Flash on the feat/optimize head", | |
| "", | |
| "One DGX Spark / GB10. The author's five-case suite ran three fresh", | |
| "server processes; the 2K-64K frontier sweep ran three attach passes", | |
| "against one unguarded boot (the operator's one-engine protocol; see", | |
| "README). Every sample is retained; medians carry the min-max band.", | |
| "", | |
| "[Conditions and evidence](README.md).", | |
| "", | |
| "## Five-case suite", | |
| "", | |
| "| Case | Prompt tokens | Decode, tok/s | Cold prefill, tok/s | Warm TTFT, ms |", | |
| "| --- | ---: | ---: | ---: | ---: |", | |
| ] | |
| for row in suite["cases"]: | |
| lines.append( | |
| f"| {row['case']} | {row['prompt_tokens']:,} | " | |
| f"{row['decode_tps']['median']:.2f} " | |
| f"({row['decode_tps']['min']:.2f}-{row['decode_tps']['max']:.2f}) | " | |
| f"{fmt(row['cold_prefill_tps']['median'])} | " | |
| f"{fmt(row['warm_ttft_ms']['median'])} " | |
| f"({fmt(row['warm_ttft_ms']['min'])}-{fmt(row['warm_ttft_ms']['max'])}) |") | |
| passes = frontier["passes"] | |
| runs_header = " | ".join(f"Run {i}" for i in range(1, passes + 1)) | |
| rules = "|".join(["---:"] * (2 + passes + 2)) | |
| lines += ["", | |
| "Cold prefill is the first request of each fresh process (three samples", | |
| "per case); warm TTFT pools the six repeats. Decode pools all nine", | |
| "samples. The rates are client-side, prompt tokens over TTFT.", | |
| "", | |
| "## 2K-64K frontier sweep", | |
| "", | |
| "Full-prompt prefill; every request reports zero reused tokens and 128", | |
| f"generated tokens. {passes} complete pass(es) of the 32 frontiers;", | |
| "frontiers come from the corpus byte calibration, and the input column", | |
| "is the actual token count.", | |
| ""] | |
| for key, heading in (("prefill_tps", "Full prompt prefill"), | |
| ("gen_tps", "Decode (automatic embedded MTP)")): | |
| lines += [f"### {heading}", "", | |
| f"| Frontier | Input tokens | {runs_header} | Median | Min-max |", | |
| f"|{rules}|"] | |
| for row in frontier["frontiers"]: | |
| value = row[key] | |
| samples = " | ".join(f"{sample:,.1f}" for sample in value["runs"]) | |
| lines.append( | |
| f"| {row['frontier_tokens'] // 1024}K | {row['actual_prompt_tokens']:,} | " | |
| f"{samples} | {value['median']:,.1f} | " | |
| f"{value['min']:,.1f}-{value['max']:,.1f} |") | |
| summary = frontier["metrics"][key] | |
| lines += ["", | |
| f"Median of the three run means: {summary['median_run_mean']:,.2f} tok/s.", | |
| ""] | |
| (DATA / "tables.md").write_text("\n".join(lines) + "\n") | |
| def plot(frontier): | |
| fig, left = plt.subplots(figsize=(9.5, 5.2)) | |
| right = left.twinx() | |
| xs = [row["frontier_tokens"] / 1024 for row in frontier["frontiers"]] | |
| prefill = [row["prefill_tps"]["median"] for row in frontier["frontiers"]] | |
| prefill_lo = [row["prefill_tps"]["min"] for row in frontier["frontiers"]] | |
| prefill_hi = [row["prefill_tps"]["max"] for row in frontier["frontiers"]] | |
| decode = [row["gen_tps"]["median"] for row in frontier["frontiers"]] | |
| left.plot(xs, prefill, color=COLOR, linewidth=2, label="Prefill") | |
| left.fill_between(xs, prefill_lo, prefill_hi, color=COLOR, alpha=0.18) | |
| right.plot(xs, decode, color="#b45309", linewidth=2, label="Decode") | |
| left.set_xlabel("Prompt tokens (K)") | |
| left.set_ylabel("Prefill tok/s", color=COLOR) | |
| right.set_ylabel("Decode tok/s", color="#b45309") | |
| left.set_ylim(bottom=0) | |
| right.set_ylim(bottom=0) | |
| left.set_title("DeepSeek V4.1 Flash on one DGX Spark: prefill and decode") | |
| fig.tight_layout() | |
| fig.savefig(DATA / "throughput.png", dpi=180) | |
| def main(): | |
| suite = suite_report(load_suite()) | |
| frontier = frontier_report(load_frontier()) | |
| write_tables(suite, frontier) | |
| (DATA / "summary.json").write_text(json.dumps( | |
| {"suite": suite, "frontier": frontier}, indent=2) + "\n") | |
| plot(frontier) | |
| print("tables.md, summary.json, throughput.png written") | |
| if __name__ == "__main__": | |
| main() | |