CoolFace
Datasetpublic

JacobPEvans/mlx-benchmarks

MLX Benchmarks Structured benchmark results for MLX-quantized and other locally-hosted LLMs on Apple Silicon. Covers throughput, time-to-first-token, tool-calling, code generation, reasoning, knowledge, and math suites. Results are produced by a sweep harness that wires upstream evaluation tools against a local vllm-mlx inference server: EleutherAI/lm-evaluation-harness — coding, reasoning, knowledge, math linusvwe/MLXBench — throughput and time-to-first-token vllm… See the full description on the dataset page: https://huggingface.co/datasets/JacobPEvans/mlx-benchmarks.

sourceHugging Faceapache-2.0updated 12d agoView on Hugging Face
1likes532downloads
Dataset Card

MLX Benchmarks

Structured benchmark results for MLX-quantized and other locally-hosted LLMs on Apple Silicon. Covers throughput, time-to-first-token, tool-calling, code generation, reasoning, knowledge, and math suites.

Results are produced by a sweep harness that wires upstream evaluation tools against a local vllm-mlx inference server:

All data here is generated on Apple Silicon hardware (MINISFORUM MS-A2 / M4 Max class), stored in flat columnar Parquet for easy querying, and appended to via unique-filename commits so historical shards are never overwritten.

Quickstart

python
from datasets import load_dataset

ds = load_dataset("JacobPEvans/mlx-benchmarks")
print(ds)

# Example: average throughput per model
import pandas as pd
df = ds["train"].to_pandas()
throughput_rows = df[df.suite == "throughput"]
print(
    throughput_rows.groupby("model")["metric_value"]
    .mean()
    .sort_values(ascending=False)
)

Raw Parquet fetch (token-optimal for agents):

bash
curl -sSL \
  https://huggingface.co/datasets/JacobPEvans/mlx-benchmarks/resolve/main/data/train-00000-of-00001.parquet \
  -o run.parquet

Schema

Each input benchmark run produces a JSON envelope (see schema.json in this repo for the authoritative v1 spec). The envelope is exploded row-wise into flat scalar columns — one row per entry in the envelope's results[] array. Skipped runs become a single sentinel row with null metric columns and skipped=true. This mirrors the columnar layout used by the Open LLM Leaderboard contents dataset.

ColumnTypeNotes
suitestringOne of: throughput, ttft, tool-calling, code-accuracy, framework-eval, capability-comparison, coding, reasoning, knowledge, evalplus, math-hard
modelstringFull model identifier
git_shastringCommit SHA of the generator at run time
timestampstringISO-8601 UTC start of the run
triggerstringschedule, pr, workflow_dispatch, or local
schema_versionstringEnvelope schema version (currently "1")
pr_numberint64PR number if triggered by a pull request, else null
skippedboolTrue for sentinel rows where the suite was skipped
osstringOperating system at run time
chipstringCPU/chip identifier
memory_gbint64Total system RAM
vllm_mlx_versionstringBackend version if captured
runnerstringRunner label or local
metric_namestringIndividual test/measurement name
metric_metricstringMetric family (e.g. throughput, latency, score)
metric_valuefloat64Numeric value
metric_unitstringUnit (tok/s, seconds, ratio, ...)
tags_jsonstringJSON-serialized tag dict (per-suite custom metadata)
errors_jsonstringJSON-serialized list of non-fatal errors from the run

Nested fields from the envelope (tags, errors) are preserved as JSON-serialized strings so no information is lost — rehydrate with json.loads(row["tags_json"]).

Update cadence

New rows are appended on every sweep via a unique-filename commit pattern (data/run-{timestamp}-{sha}-{suite}-{model}.parquet). Historical shards are never overwritten. load_dataset() concatenates all data/*.parquet files into a single train split at load time.

License

Apache 2.0 — same as the underlying upstream evaluation tools.