# Qwen3.5 on M4 Pro: dated precision matrix

A fixed March M4 Pro report with repeated generation, first-token and memory measurements across available precisions.

- Type: Performance report
- Evidence: source_reported; site reproduced: false
- Model family: Qwen
- Model: Qwen3.5 0.8B / 2B / 4B / 9B / 27B / 35B-A3B
- Original author: weklund
- Original project: https://github.com/weklund/mlx-coding-bench
- Pinned document: https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P%2B4E%2B20GPU_64GB/2026-03-06__19%3A47%3A24/REPORT.md
- Source revision: 5ae9b491f7a0539d5abef949eded6bd57785a981
- Source commit time (not experiment date): 2026-07-01T19:16:36Z
- Checked: 2026-10-17
- Experiment date: 2026-03-06
- Runtime topics: MLX
- Hardware topics: apple
- Reported setup: {"system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory", "node_count": 1, "parallelism": null, "kv_dtype": null, "context_limit_tokens": null, "experiment_date": "2026-03-06"}
- Performance figures: attributed selections with per-point conditions; no cross-source ranking

## Conditions

Unknown is null. Recipe options are not measured benchmark settings.

```json
{
  "conditions": {
    "model_revision": null,
    "weight_hash": null,
    "runtime_execution_revision": null,
    "input_tokens": null,
    "output_tokens": null,
    "concurrency": null,
    "cache_state": null,
    "quantization": null,
    "speculative_decoding": null,
    "temperature": null,
    "top_p": null
  },
  "test_profiles": [
    {
      "label": "Generation speed",
      "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P%2B4E%2B20GPU_64GB/2026-03-06__19%3A47%3A24/REPORT.md",
      "conditions": {
        "model_revision": null,
        "weight_hash": null,
        "runtime_execution_revision": null,
        "input_tokens": 256,
        "output_tokens": 100,
        "concurrency": null,
        "cache_state": null,
        "quantization": "int4 / int8 / BF16 as listed per model",
        "speculative_decoding": null,
        "temperature": null,
        "top_p": null,
        "runtime_version": "MLX 0.31.0 / mlx-lm 0.30.7",
        "repetitions": 20,
        "warmup_iterations": 1
      }
    },
    {
      "label": "First-token latency and peak memory",
      "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P%2B4E%2B20GPU_64GB/2026-03-06__19%3A47%3A24/REPORT.md",
      "conditions": {
        "model_revision": null,
        "weight_hash": null,
        "runtime_execution_revision": null,
        "input_tokens": 4096,
        "output_tokens": null,
        "concurrency": null,
        "cache_state": null,
        "quantization": null,
        "speculative_decoding": null,
        "temperature": null,
        "top_p": null,
        "runtime_version": "MLX 0.31.0 / mlx-lm 0.30.7",
        "repetitions": 20,
        "warmup_iterations": 1
      }
    }
  ],
  "recipe_parameters": null,
  "deployment_options": []
}
```

## Reading notes

- Generation and first-token/memory tests use different prompt lengths.
- The report states 20 iterations, one warmup and mean/standard deviation.

## Limits

- Only listed model/precision cells were tested.
- The historical report is retained as dated evidence, not current Qwen3.8 performance.

## License declaration

{"declared_spdx": "MIT", "scope": "Repository metadata only; per-file, model, data and conversion terms remain separate."}


## Editorial answer

The operator report is dated 6 March 2026 and names an M4 Pro with ten performance and four efficiency CPU cores, twenty GPU cores and 64 GB unified memory. It uses MLX 0.31.0 and mlx-lm 0.30.7, one warmup followed by twenty measured iterations. These are historical Qwen3.5 results, not measurements of current Qwen3.8 or another Apple chip.

By Run AI Here editorial · 2026-10-17

AI-assisted source reading and original editorial synthesis; no independent model execution.

## Which exact machine and stack were tested?

The operator report is dated 6 March 2026 and names an M4 Pro with ten performance and four efficiency CPU cores, twenty GPU cores and 64 GB unified memory. It uses MLX 0.31.0 and mlx-lm 0.30.7, one warmup followed by twenty measured iterations. These are historical Qwen3.5 results, not measurements of current Qwen3.8 or another Apple chip.

Sources: https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L3

## Why are the generation and latency tables separate?

Generation uses a 256-token prompt and 100-token output. First-token latency and peak-memory tables use a 4,096-token prompt. The 4B int4 example consequently reports 68.0 ± 0.4 generated tokens/s in one profile and 6.14 ± 0.25 seconds to first token in the other. Those values cannot be assembled into one measured end-to-end 256-token request.

Sources: https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L21

## What does the dense versus MoE example show?

The selected int4 rows put 27B at 11.8 ± 0.2 tokens/s and 35B-A3B at 25.6 ± 0.5 under the generation profile. At the longer prompt their reported peaks are 22.1 and 23.7 GiB. That is an observed speed/memory tradeoff on this stack; it does not prove equal coding quality or a broad rule that one architecture is better.

Sources: https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L45

## Which claims are not reproduced here?

The source adds qualitative recommendations and secondary-source quality claims after its measured tables. We keep those separate from the directly reported MLX timing and memory cells. Missing BF16 cells stay missing; they are not zero-speed or failed measurements. Weight hashes, cache state and concurrent-user counts are not specified by the selected report.

Sources: https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L58

## Selected source-reported figures

Each point retains its own configuration, measurement unit and source. No site reproduction or cross-source ranking.

```json
[
  {
    "label": "Qwen3.5-4B int4 generation",
    "metric": "generation",
    "value": 68.0,
    "unit": "tokens/s",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.4
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-4B int4",
      "quantization": "int4",
      "input_tokens": 256,
      "output_tokens": 100
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L27",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-4B int4 first token",
    "metric": "ttft",
    "value": 6.14,
    "unit": "seconds",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.25
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-4B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L40",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-4B int4 memory",
    "metric": "peak_memory",
    "value": 6.4,
    "unit": "GiB",
    "statistic": "reported peak memory",
    "uncertainty": null,
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-4B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L53",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-9B int4 generation",
    "metric": "generation",
    "value": 38.5,
    "unit": "tokens/s",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.4
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-9B int4",
      "quantization": "int4",
      "input_tokens": 256,
      "output_tokens": 100
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L28",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-9B int4 first token",
    "metric": "ttft",
    "value": 10.88,
    "unit": "seconds",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.61
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-9B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L41",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-9B int4 memory",
    "metric": "peak_memory",
    "value": 9.0,
    "unit": "GiB",
    "statistic": "reported peak memory",
    "uncertainty": null,
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-9B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L54",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-27B int4 generation",
    "metric": "generation",
    "value": 11.8,
    "unit": "tokens/s",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.2
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-27B int4",
      "quantization": "int4",
      "input_tokens": 256,
      "output_tokens": 100
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L29",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-27B int4 first token",
    "metric": "ttft",
    "value": 36.57,
    "unit": "seconds",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.99
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-27B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L42",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-27B int4 memory",
    "metric": "peak_memory",
    "value": 22.1,
    "unit": "GiB",
    "statistic": "reported peak memory",
    "uncertainty": null,
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-27B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L55",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-35B-A3B int4 generation",
    "metric": "generation",
    "value": 25.6,
    "unit": "tokens/s",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.5
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-35B-A3B int4",
      "quantization": "int4",
      "input_tokens": 256,
      "output_tokens": 100
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L30",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-35B-A3B int4 first token",
    "metric": "ttft",
    "value": 5.52,
    "unit": "seconds",
    "statistic": "mean of 20 measurements",
    "uncertainty": {
      "standard_deviation": 0.1
    },
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-35B-A3B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L43",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  },
  {
    "label": "Qwen3.5-35B-A3B int4 memory",
    "metric": "peak_memory",
    "value": 23.7,
    "unit": "GiB",
    "statistic": "reported peak memory",
    "uncertainty": null,
    "conditions": {
      "system": "Apple M4 Pro 10P+4E / 20 GPU cores / 64 GB unified memory",
      "node_count": 1,
      "parallelism": null,
      "kv_dtype": null,
      "context_limit_tokens": null,
      "experiment_date": "2026-03-06",
      "runtime": "MLX 0.31.0 / mlx-lm 0.30.7",
      "repetitions": 20,
      "warmup_iterations": 1,
      "concurrency": null,
      "model_revision": null,
      "cache_state": null,
      "model": "Qwen3.5-35B-A3B int4",
      "quantization": "int4",
      "input_tokens": 4096,
      "output_tokens": null
    },
    "evidence_state": "source_reported",
    "site_reproduced": false,
    "evidence_url": "https://github.com/weklund/mlx-coding-bench/blob/5ae9b491f7a0539d5abef949eded6bd57785a981/measurements/llm_benchmarks/Apple_M4_Pro_10P+4E+20GPU_64GB/2026-03-06__19:47:24/REPORT.md#L56",
    "source_document_sha256": "ff21a1f8a2597867e191a376cea28af293d47dfff82bb423193009b05c7ef5a3"
  }
]
```
