GLM 5.3 Flash-sauhard · MacBook Pro M5 Max · 128 GB · MLX

321 billion parameters.
One laptop. Room to keep working.

GLM-5.3-Flash ships as a 305 GB checkpoint. We rebuilt it for one machine as GLM 5.3 Flash-sauhard: calibrated on real coding, agent and math work, pruned to the experts it needs, given a bit width per tensor and refit scale by scale. GLM 5.3 Flash-sauhard runs offline in 71.6 GB and leaves the rest of the Mac to you. The model it is built from edges out Claude Sonnet 5.5 at medium effort on the Artificial Analysis index.

71.6GBGLM 5.3 Flash-sauhard resident, of 128
92.4%GLM 5.3 Flash-sauhard: next-token agreement with the original
41.5tok/s**GLM 5.3 Flash-sauhard peak decode, measured
42vs 41AA index: original GLM-5.3-Flash vs Sonnet 5.5 (medium)
01 · The problem

The model is four times the machine

GLM-5.3-Flash is a mixture-of-experts model: 321 billion weights, of which about 18 billion fire for any one token. Every expert still has to sit in memory, because the next token may need any of them.

The Mac has 128 GB, and it is also the machine for the editor, the builds and Claude Code. So we set a hard rule: the model process gets at most 84 GB, and at least 45 GB stays free.

Turn the knob on the scale. A plain 4-bit quantization still weighs 168 GB. Getting under the line took three more steps.

GB
45 plates, one per layer, to scale with sizeNeedle: gigabytes on the platformServer cap, 84 GBThe Mac has 128 GB, and the model has to share it with everything else. The full model weighs 598 GB in BF16 and 305 GB as shipped. Pruning experts and spending bits where they count brings GLM 5.3 Flash-sauhard to 71.6 GB.
02 · Calibrate

First, watch it do our work

Generic quantizers calibrate on Wikipedia. We built 712 samples from the work this Mac actually does: GitHub files and commit edits, multi-turn agent traces with real tool calls, competition math, and 16K to 64K-token documents. 512 drive calibration; 200 are held out for scoring.

The 305 GB checkpoint never fits, so calibration streams it one layer at a time: load, run every sample through, record, free. For each layer it records how often each expert is chosen, how much it contributes, and how much error every tensor takes at 2 to 8 bits.

36,764sensitivity measurements
< 40 GBpeak memory while streaming
5 h 27 mfor all 45 layers
top-64reference logprobs kept for scoring
Decoder layers, streamed one at a timelayer 0 of 45
3 dense layers, then 42 mixture-of-experts layersonly the lit layer is in memory
Calibration mix · 512 samples
code · 192agentic · 160reasoning · 144long documents · 16
03 · Prune

Keep 153 of 288 experts in every layer

Each layer's router sends a token to 8 of its 288 experts. Some are busy, some almost idle. Removing the quiet ones cuts 47% of the expert weight.

We ranked experts with REAP, which scores how much an expert changes the output when it is chosen. The figure is real data from layer 20: sort height is how often the router picked each expert while it read our samples, and the stick in front shows the 8 picked for each new token.

Switch to "Busiest 153" and the kept share of traffic rises from 54% to 70%. That gap was our first surprise, and the third detour below.

Sort height: share of tokens routed there (measured)Composing stick: the 8 experts this token usedPruned compartmentLayer 20 of 42 MoE layers. REAP ranks experts by how much they contribute when chosen, not by how often. On GLM those scores are almost flat, so it keeps some quiet experts and drops some busy ones: its 153 carry 53.5% of this layer's routing, where the busiest 153 would carry 69.7%. Across all layers the averages are 54% and 68%.
04 · Quantize

Spend bits where the errors are

A uniform 4-bit model treats an attention projection and a rarely used expert the same. We gave each of 490 tensor groups its own width from the measured errors, with a solver that minimises total error under a 76 GB budget. The average came out at 3.48 bits per weight.

Then we changed how each group is rounded. Instead of taking a scale from the group's minimum and maximum, we search the clipping range and solve a least-squares fit weighted by how strongly real inputs use each channel. Same bytes, 10.5% less divergence from the full model: the largest single gain of the project.

Divergence from the full model

Assistant-token KL on 200 held-out samples · lower is better

  • REAP-153, round to nearest0.121
  • Mass-153, round to nearest0.123
  • Mass-162, 80 GB0.118
  • Mass-162, LSQ, 80 GB0.112
  • GLM 5.3 Flash-sauhard0.108
  • + DWQ, cosine0.106
  • + DWQ, MSE0.107

GLM 5.3 Flash-sauhard is the highlighted row. DWQ lowered this number a little more but read prompts and wrote code slightly worse, so it was not shipped.

routed experts: 84% of all weights

Open drawer: depth is the bit widthOne card per GB of packed weightsGLM 5.3 Flash-sauhard, by bit width. A solver measured how much error every tensor takes at each width, then chose widths that minimise total error under a 76 GB budget. Almost all of the routed-expert weight landed in 3 bits; attention, embeddings and shared experts got 4 to 8.
05 · Detours

Six things we believed that measurements overturned

Most of the time went into finding out why a number looked wrong. Each card is a belief we started with, struck through, and what we found instead.

Evaluation

A mean KL of 2.9 means the build is broken.

The error lives where the model reads, not where it writes.

Split by chat role, assistant tokens sat at KL 0.12 with 92% top-1 agreement. User and tool positions run at KL 3 to 7 for every build, the reference included, because no chat model predicts your prompt word for word.

Precision

Recalibrating in fp32 will fix it.

fp32 measured no better than bf16.

Splitting the metric by role made a five-hour fp32 recalibration pointless. We ran a slice anyway to be sure.

Pruning

REAP saliency picks the right experts.

On GLM, REAP scores are almost flat.

Median 5.7 against a cutoff of 5.5. The 153 it keeps carry 54% of routing on average, where the busiest 153 would carry 68%.

Rounding

Pruning choices matter most.

How you round matters more than what you cut.

Refitting every scale and bias by importance-weighted least squares cut assistant KL 10.5% at the same size. Pruning variants moved it 2 to 3%.

Recovery

Fixing every layer locally fixes the model.

All 45 layers improved; the model did not.

Blockwise distillation lowered every layer's error and nudged assistant KL to 0.106, but read prompts worse and coded slightly worse. We shipped the simpler build.

Engineering

The trainer's memory is fine.

It leaked 1.46 GB per layer.

MLX keeps a custom function's inputs alive, so each layer's expert weights stayed pinned: 110 GB projected by layer 43. Fixed, it ran flat at 24 GB, and sparse layers went from 17 minutes to 2.

06 · Where it lands

Sonnet-class at the effort people actually use

Most people run hosted models at their default, medium reasoning effort, so that is the comparison here. On the Artificial Analysis Intelligence Index, the original GLM-5.3-Flash scores 42: one point above Claude Sonnet 5.5 at medium, and six below GPT-6.1 Sol at medium.

Those are the original model's scores. GLM 5.3 Flash-sauhard matches it on 92.4% of next tokens, so expect a point or two lower until someone runs the suite on it. On our own tasks it scored 95% on HumanEval+, 92.5% on MBPP+, 84.8% on 105 tool calls and 97.5% on MATH-500 problems.

Original GLM-5.3-Flash vs Sonnet 5.5 (medium)

Ahead on real-work tasks (GDPval 1642 vs 1323), automation, long context and terminal agents. 6 of 11 benchmarks, 1 tie.

Original GLM-5.3-Flash vs GPT-6.1 Sol (medium)

Behind on knowledge recall, hard science and terminal agents. Ahead of Sol only on real-work and briefcase tasks.

Artificial Analysis Intelligence Index

API models at medium reasoning effort · October 2026

  1. Claude Opus 5.5medium51
  2. GPT-6 Astramedium50
  3. Claude Fable 5.1medium49
  4. GPT-6.1 Solmedium48
  5. GLM-5.3-Flash (original)full-precision base42
  6. GLM 5.3 Flash-sauhardestimated40–41*
  7. Claude Sonnet 5.5medium41
  8. Qwen3.8-Flash-Nextopen weights40
  9. Claude Haiku 5.5medium34
  10. GPT-6 Lunamedium30
AnthropicOpenAIOpen weightsOriginal GLM-5.3-FlashGLM 5.3 Flash-sauhard*

* Estimated from GLM 5.3 Flash-sauhard's 92.4% next-token agreement with the original; it has not been run on the Artificial Analysis suite.

Head to head at medium effort

Independent Artificial Analysis results · best in each row in bold · GLM base is the original GLM-5.3-Flash

BenchmarkGLM baseSonnet 5.5GPT-6.1 Sol
Intelligence Index424148
GDPval-AA (real work, Elo)1,6421,3231,450
AA-Briefcase (Elo)1,4531,4411,361
AutomationBench-AA60%55%63%
AA-LCR long context80%76%83%
Terminal-Bench 4.033%30%48%
SciCode52%53%53%
Humanity's Last Exam40%40%50%
CritPt15%17%28%
GDP.pdf15%20%30%
AA-Omniscience (−100 to 100)72040

Original, full-precision GLM-5.3-Flash. GLM 5.3 Flash-sauhard has not been run on these suites yet.

07 · The open field

Against everything else built for a 128 GB Mac

We surveyed what people have published on Hugging Face for this class of machine. GLM-5.3-Flash is the highest-ranked open model that fits at all, and every other public build of it is either far larger or reports lower fidelity. At an 80 GB budget we found nothing clearly better than GLM 5.3 Flash-sauhard.

The strongest challenger is a different model: ISTA-DASLab's 3-bit Qwen3.8-Flash-Next, 84 GB, matching its full-precision parent on its authors' task suite. Its base model scores two points lower than the base of GLM 5.3 Flash-sauhard, which is close to noise, so it is the next build we will test head to head.

Smaller and closer to the original

Open GLM-5.3-Flash builds · top-1 agreement with the full model, as each author reports it

does not fit 128 GB70%75%80%85%90%95%6080100120140160180200size on disk, GB84 GB capGLM 5.3 Flash-sauhardunsloth UD-IQ1_Sorcarouter 2-bitunsloth UD-IQ3_XXSunsloth UD-IQ4_XSorcarouter 3-bit

Every build that fits a 128 GB Mac reports 71 to 82% agreement; only builds of 157 GB and up reach 88%. Measurement methods differ; see the note under the table.

Open builds for 128 GB Macs

Size in GB; red is over our 84 GB server cap · fidelity is top-1 agreement / KL against the full model

BuildBase modelGBPublished fidelity
GLM 5.3 Flash-sauhardMLX · REAP 153 + 3.48-bit LSQGLM-5.3-FlashAA 427192.4% / 0.108measured, assistant tokens
ISTA-DASLab GSQ-RCO IQ3_Sllama.cpp · non-uniform 3-bitQwen3.8-Flash-NextAA 4083.6task avg 93.3 vs 93.1 BF16author, task suite
unsloth UD-IQ1_Sllama.cpp · all experts, ~1.6-bitGLM-5.3-FlashAA 4293.170.9% / 0.670author, generic text
unsloth UD-IQ4_XSllama.cpp · all expertsQwen3.8-Flash-NextAA 4093.7not published
patrickbdevaney REAP50llama.cpp · 144 experts, imatrixGLM-5.3-FlashAA 427284.3% (unquantized parent)author
orcarouter 2bit-liteMLX · all expertsGLM-5.3-FlashAA 4210277.2%, PPL +141%author
pfeifferj GSQ-RCO 3.0-bitllama.cpp (patched)GLM-5.3-FlashAA 42117.5KL ~0.142author
unsloth UD-IQ3_XXSllama.cpp · all expertsGLM-5.3-FlashAA 42120.481.6% / 0.284author, generic text
sh0wie REAP-288 4-bitMLX · 288 of 512 expertsQwen3.8-Flash-NextAA 4068HumanEval 91.5 vs 93.9author
Litwein REAP320 oQ3e DWQoMLX onlyQwen3.8-Flash-NextAA 4070.8KL 0.104 (held-out)author

These numbers are not like for like. GLM 5.3 Flash-sauhard's are measured on assistant tokens of held-out samples from our own workload; most others are measured on generic text over all tokens, and some only on tasks. The fair test is to run one harness over every build, which we have not done yet.

08 · My setup

My setup

This is the control panel that runs on the Mac every day. A launchd service keeps it up; one click starts, stops or switches between GLM 5.3 Flash-sauhard and a tuned Qwen3.8-Flash-Next, and any OpenAI- or Anthropic-compatible client can use the model, Claude Code included.

GLM 5.3 Flash-sauhard serves at up to 41.5 tok/s** from 71.5 GB, with the server capped at 84 GB so the editor, builds and Claude Code always have room. Context reaches 128K tokens***.

Set it up on your own Mac in five steps, or read the full benchmark report.

127.0.0.1:8090
The local model control dashboard: GLM 5.3 Flash-sauhard running at 41.5 tokens per second using 71.5 GB, a unified-memory bar with the 84 GB cap, model cards for GLM 5.3 Flash-sauhard and Qwen3.8-Flash-Next, connection addresses, settings and the server log.

* The index score for GLM 5.3 Flash-sauhard is inferred from its 92.4% next-token agreement with the original, not measured on the Artificial Analysis suite.

** 41.5 tok/s is the peak plain-decode rate we measured; typical runs are about 30 tok/s with 1K to 8K tokens of context and 26 at 32K. Speculative decoding with GLM's own draft head is built in but not yet verified. Full numbers in the benchmark report.

*** Long-context retrieval at 64K to 128K has not been measured on GLM 5.3 Flash-sauhard.