Oct 13, 2026
Summary
First-party historical Patrick Whelan benchmark, inspected 2026-10-13. Source snapshot 11f3f8f931dc97a71499e7b9c2583d010a3c160b verified by archive PAX comment and GitHub currentOid; pinned runner/config/hardware/VLM files byte-match archive. This pins the published evidence, not the executable used in April. No inference rerun or model-weight download.
Hardware: one participating Apple M2 Max integrated GPU, 30 GPU cores, 12 CPU cores and 64 GB shared unified memory. Raw system data confirms those values; hardware profile explicitly says no discrete GPU and all inference on the M2 Max GPU. Shared 64 GB is system capacity, not dedicated VRAM or resident model use. Raw environment: Darwin 25.3.0 / ARM64_T6020 and Python 3.14.3. Do not borrow stale hardware-profile Sequoia 15.x or ai-gateway/vllm-mlx labels. Power, thermals, clocks, swap, wired-memory limit, GPU utilization and competing workload are unknown.
Dates: raw system_info.timestamp=2026-04-03T22:21:25.804547+00:00; this is collected once before a run list, so it is a campaign/system-capture timestamp, not exact model start. Result filename gemma-4-26b-moe_default_20260403_232148.json uses local completion time with no timezone recorded. README updated 2026-04-04 is a publication label, not every measurement date.
Configuration: direct mlx_vlm text-only helper on Apple MLX/Metal, no HTTP server involved. MLX/MLX-LM/MLX-VLM installed versions and exact runtime commit are not retained in JSON. Requested prompt length 512 and generation length/cap 128, printed batch_size=1; three measured trials retained after discarding Trial 1, plus an internal/explicit warmup. Achieved token-count telemetry is not stored, so actual input/output fields remain unknown. Source context_size=4096, threads=8 and gpu_layers=-1 are explicitly unused for MLX and are not recorded here as active allocation, CPU threads or layer placement. KV/cache precision, prefill chunk size, sampling settings, thinking behavior and memory-cache reuse are unreported for the historical runtime; no drafter is passed by the wrapper.
Native rates: PP 465.17 tok/s (sample SD 0.58; retained [464.722, 464.972, 465.83]); TG 61.62 tok/s (sample SD 0.2; retained [61.389, 61.732, 61.742]). Source aggregation rounds the three-trial arithmetic mean/sample SD to two decimals after parsing three-decimal CLI values. All values, means and SD were checked against raw Trial 2-4. The raw helper prints four trials and no CLI average; the wrapper computes the retained three-trial metric. No pooling across engines/models.
Timing exclusions: raw time_to_first_token_s mean 1.1 is explicitly computed as 512/prompt_tps by runner lines 718-719, not independently measured client or request TTFT. TTFT field is intentionally empty. Overall wall_time_s=22.43 measures the entire subprocess and can include HF downloads, model load and warmup; it is not inference-only latency or end-to-end response timing. Pinned local VLM helper shows the native result.prompt_tps/result.generation_tps rate forwarding described below; exact installed mlx-vlm generation implementation/version is not logged.
Artifact: mlx-community/gemma-4-26b-a4b-it-4bit. Source-configured HF artifact, additionally named in raw output; historical tested revision unknown. Raw quant is "N/A" because the MLX run dictionary lacks a quant key; quantization identification comes from source config/profile plus HF metadata, not that raw field. No weight digest is logged. Current artifact metadata inspected 2026-10-13 at HF revision 0d77464eeb233a2da68ebf9d7dc4edaac7db956d: MLX nominal 4-bit affine group 64; 30 8-bit group-64 module overrides. This revision is a current metadata reference, not a historical run pin. Model-card conversion-tool versions are not installed benchmark engine versions. Model context capacities from current HF metadata are not active benchmark allocations.
Distinct VLM text-only harness: source config sets vlm:true and raw output names this HF repository. Local mlx_vlm_benchmark.py constructs repeated "hello " text, encodes and truncates to 512 tokens, decodes it back to text, then calls mlx_vlm.generate(image=None,max_tokens=128). It performs one explicit warmup and four trials, forwarding result.prompt_tps/result.generation_tps. Actual re-tokenized input length and returned output token counts are not logged; 512/128 are requested workload and output cap, not verified achieved counts. EOS is not explicitly disabled here. Do not pool this with the random-token MLX-LM runs as an identical workload. VLM helper memory is mx.metal.get_peak_memory()/1024^3 after resetting the peak each trial, so its raw memory unit is GiB. The HF card identifies google/gemma-4-26B-A4B-it base revision 20da991ab4afab98e8f910c4a2e8f4fbefc404ad, a conversion-provenance reference, not the tested MLX revision.
Memory: raw retained peak_memory values [15.255, 15.255, 15.255], maximum 15.255 in engine output units. Wrapper overwrites peak_vram_mb with this value times 1024 (15621.1), but leaves a stale unified_memory_system_wide note. It is MLX allocator/process peak reporting, not dedicated VRAM or system-wide resident usage. VLM helper explicitly uses GiB; Dedicated-VRAM and memory-used fields remain empty. Config size_gb is an estimate, not measured disk bytes, and is not substituted for residency. No Mac power measurements.
Sources:
https://github.com/patrickwhelan-uk/llm-inference-benchmarks/blob/11f3f8f931dc97a71499e7b9c2583d010a3c160b/results/m2-mac-studio/gemma-4-26b-moe_default_20260403_232148.json
https://github.com/patrickwhelan-uk/llm-inference-benchmarks/blob/11f3f8f931dc97a71499e7b9c2583d010a3c160b/config-m2-mac-studio.yaml
https://github.com/patrickwhelan-uk/llm-inference-benchmarks/blob/11f3f8f931dc97a71499e7b9c2583d010a3c160b/run_benchmarks.py#L624-L738
https://github.com/patrickwhelan-uk/llm-inference-benchmarks/blob/11f3f8f931dc97a71499e7b9c2583d010a3c160b/hardware/m2-mac-studio.md
https://huggingface.co/mlx-community/gemma-4-26b-a4b-it-4bit/blob/0d77464eeb233a2da68ebf9d7dc4edaac7db956d/config.json
https://github.com/patrickwhelan-uk/llm-inference-benchmarks/blob/11f3f8f931dc97a71499e7b9c2583d010a3c160b/mlx_vlm_benchmark.py
Structured PP/TG fields are rounded to 0.1 tokens/s; the source means, sample deviations and all three retained trial values above preserve the published precision.