~/satyajit

Muse Spark Open: 816B on two Mac Studios, and what the arithmetic needs

mdjsonmcp

2026-10-16 · 18 min · mixture-of-experts · kv-cache · apple-silicon · quantization · gguf · licensing · multimodal

A 1:44 narrated explainer, drawn in code. Every number and picture in it is this article's own; the sources are below.

› transcript

Hi, I'm Gossamer! Muse Spark Open is Meta's new open model, and Meta says it runs on two Mac Studios. Here is how something that big fits on a desk. The idea: almost every parameter is an expert that sleeps. Each token wakes only eight of them, and they work in a narrower space. A token arrives at a layer. A router scores every expert and picks eight. First the token is squeezed to half its width. Only the chosen experts run, in that narrow space. The rest stay asleep, so each one costs half what it would. Then the result is projected back to full width and gated into the residual stream. Memory for the context is the other problem. If every layer remembered every token, a million tokens would need over two hundred and sixty gigabytes. Instead, three of every four layers only look back a short window. Just the global layers keep everything, so the whole cache is about sixty-nine gigabytes. Now the bytes. Full precision never fits. The four-bit build fits two Mac Studios with the whole cache and room to spare. That is what the claim means. Unsloth's two-bit files fit a single Mac. Their own chart shows the price: the smaller the file, the further it drifts from the full model. The two-bit file that fits the smaller Mac drifts more than the one Unsloth recommends for agents. So the trick is not magic. Sleeping experts and forgetful layers are what put a model this size on a desk. Eight experts per token. Short memory in most layers. Four bits on two Macs. Every source is in the full article. I'm Gossamer. Bye!

Why read this

Notabletop 60%

Muse Spark Open counted from GGUF and MLX headers, its 1M cache derived from the layer pattern, and the two-Mac and one-Mac claims checked against file sizes.

  • Original analysis
  • Widely used
  • Concrete numbers to act on

LLM architectureNeeds a workstation GPUCustom licencePractitioner model

How this was scored
Is it new?
1 of 3: An incremental tweak
Can I trust it?
2 of 3: Measures key facts from files, code or configs
Can I run it?
1 of 3: API-only, gated or restrictive licence
Will I understand it?
2 of 3: Mechanism from first principles with figures
Can I act on it?
2 of 3: A concrete recipe, numbers or comparison
Will it last?
1 of 3: Relevant for months
Does it affect many?
2 of 3: A widely used model, tool or lab release
Only here?
2 of 3: A teardown or measurement few others did

Score 60 of 100, ranked 331 of 577 rated articles. Each question is answered 0–3 by hand, and a 3 is rare. How articles are scored

On 15 October Meta Superintelligence Labs released the weights of Muse Spark Open and called it "the most capable US open-weight model to date". The launch thread gives three specs: "816B total / 42B active parameters", a "1M token context window", and "Natively multimodal across text, image, video, audio". The next post says it "is optimized to run on two Apple M5 Ultra Mac Studios with the latest MLX framework". An hour later Unsloth posted Dynamic 2-bit GGUFs to "Run on a Mac Studio", singular.

Four of those claims are about bytes and one is about a benchmark table, and all five can be checked from files. Three things first:

Throughout, measured means I computed it from a file or a run. Reported means the publisher's figure, not re-run. Reasoned means my arithmetic on the other two.

meta-models/Muse-Spark-Open-816B-A42B@0fb0247 · snapshot 2026-10-16
announced
816B total / 42B active
measured
822,036,529,664
parameters
822.04B
repo size
1.64 TB
architecture
MuseSparkForConditionalGeneration
task
image-text-to-text
library
transformers
license
other
safetensors
65 shards
largest file
29.60 GB
files
78
downloads
815
likes
352
gated
manual
languages
en
parameters by dtype
BF16821.91BF32130.0M
facebookmetapytorchmusemuse-spark

Gated (manual approval). Architecture read from Unsloth's GGUF headers, the mlx-community 4-bit conversion and transformers' muse_spark modeling code. Licence: Muse Model License.

repo last modified 2026-10-15

What is public

Here is what existed on Hugging Face on 16 October, with sizes summed from each repository's file list (measured):

CheckpointRepositoryFilesGated
BF16meta-models/Muse-Spark-Open-816B-A42B1,644.33 GByes
NVFP4meta-models/Muse-Spark-Open-816B-A42B-NVFP4533.01 GByes
FP8amd/Muse-Spark-Open-816B-A42B-Quark-PTPC-FP8832.75 GBno
MLX 4-bitmlx-community/Muse-Spark-Open-816B-A42B-4bit532.78 GBno
MLX 3-bitmlx-community/Muse-Spark-Open-816B-A42B-3bit436.14 GBno
GGUF, 8 quantsunsloth/Muse-Spark-Open-816B-A42B-GGUF175.64 to 505.50 GBno

The card's hardware guidance is "at least 700GB of VRAM for NVFP4 and 2TB for BF16" (reported). There is no paper and no method diagram; the figures here are Meta's benchmark table and Unsloth's quantization charts.

The architecture, read from the headers

A GGUF file opens with its metadata and every tensor's name, shape and type, so a few HTTP range requests per shard give the whole architecture without downloading 225 GB. Unsloth's UD-IQ2_XXS build is six shards listing 1,429 tensors, plus 881 in mmproj-BF16.gguf, which carries the vision and audio encoders.

What a layer looks like (measured, from shapes and metadata, cross-checked against the transformers code):

The latent projection keeps 256 experts affordable: at the full 8,192 width each would hold 100.7M parameters, about 1.6T across 62 layers (reasoned), and the down-projection is shared by all eight chosen experts. Nemotron 3.5 Super VL and Kimi K3 use the same trick; the mixture-of-experts explainer covers why routed experts are where the parameters go.

Summing every tensor shape gives 819,991,575,808 parameters in the language model and 2,045,074,432 in the encoders, 822,036,650,240 in all (measured). Hugging Face's own count for Meta's gated BF16 safetensors is 822,036,529,664, which agrees to within 120,576 parameters, so the GGUF is the same model.

Now the two headline numbers. Take out the input embedding and the output head, 1,655,177,216 parameters each, and the language model is 816,681,221,376: that is the "816B". A text token runs 8 of 256 experts in each layer plus everything that is not an expert, which is 42,781,801,728 without the vocabulary tables (measured): that is the "42B", and Unsloth's guide writes it as "~42.7B active". With the output head counted it is 44.44B, and with both tables 46.09B. Both headline numbers hold, on the convention that leaves the vocabulary out.

The routed experts are 798.86B of the 819.99B, 97.4% of the language model (reasoned), and idle for any one token. That is why a Mac is plausible at all.

The encoders the card half-describes

The card's "Perception Encoder" row says 1.8B parameters, 50 layers, width 1,536 and 14 x 14 patches. The mmproj header agrees: the vision tower is 1,851,736,576 parameters in 50 blocks (measured). It also carries something the card's architecture rows never mention: an audio encoder of 101,054,976 parameters, built from causal 1-D convolutions in four stages of width 256, 512, 1,024 and 2,048 with strides 16, 6, 5 and 4. One audio token therefore covers 1,920 input samples (reasoned). The sample rate is in Meta's gated processor config, so I cannot turn that into tokens per second.

One catch: the mlx-community 4-bit conversion has no audio tensors at all (measured, from its 100 headers). On the Mac path, check that your build takes audio before relying on it.

The tokenizer is Llama 4's

The vocabulary is 202,048, and the repo carries a 3,622,230-byte file called l4_200k_base. Its git blob hash, 6d1ad505, is the hash of Llama 4 Scout's tokenizer.model, which I downloaded and hashed (measured). In the tokenizer.json files the first 200,000 entries and all 439,802 merges are identical to Llama 4's; only the 2,048 special-token slots are reassigned, 20 of them to named tokens such as <|start|>, <|message|> and <|audio|> (measured). Muse Spark Open reads text exactly as Llama 4 did.

Under the run exception for this page I loaded that tokenizer with the tokenizers library on a shared 4-core cloud VM and counted (measured): the licence text is 1.379 tokens per word, this site's Muse Glimmer article 1.634, and a 37 KB Python file 2.73 characters per token. A 1,048,576-token context is therefore about 760,000 words of plain prose, or about 2.9 MB of Python (reasoned).

One more detail from the chat template in the GGUF metadata (measured): reasoning_effort switches nothing in the weights. It writes Reasoning strength: 8, 32, 256 or 512 into the system prompt, and defaults to xhigh.

What a million-token cache costs

The layer pattern decides what "1M context" costs. layer_types lists 62 entries: every fourth layer starting at layer 1 is full_attention, the other 46 are sliding_attention with a 2,048-token window (measured). layer_rope_theta is 500,000 on every sliding layer and 0 on every global one, so the layers that see the whole context have no positional encoding. That is the design of Muse Glimmer, Meta's 30B agent model from August, at about 27 times the size; the RoPE explainer covers the sliding layers' half.

Per token, each layer caches a key and a value for 16 heads of width 64: 2,048 values, 4,096 bytes in BF16. Only the 16 global layers keep every token:

16×2×16×64×2 bytes=65,536 bytes per token16 \times 2 \times 16 \times 64 \times 2 \text{ bytes} = 65{,}536 \text{ bytes per token}

At 1,048,576 tokens that is 68.72 GB. The 46 sliding layers stop growing at 2,048 tokens and add a fixed 0.39 GB. The whole cache is 69.1 GB in BF16, or 34.6 GB in an 8-bit format (reasoned). If all 62 layers were global, it would be 266.3 GB: 3.9 times more. The 3:1 pattern is the difference between a 1M context that fits beside the weights and one that does not. Nemotron 3.5 Super VL gets a million tokens into 8.6 GB with eight attention layers; the attention and KV-cache explainer has the general arithmetic.

Two Mac Studios: checking the arithmetic

Apple's spec page lists the M5 Ultra Mac Studio with 96 GB of unified memory, configurable to 256 GB or 512 GB, and 1.2 TB/s of memory bandwidth (reported). Meta's blog says the same: "up to 512 GB per Mac Studio, so two machines can hold an entire model". I take Apple's "512GB" as 512 GiB, which is 549.76 GB, so two machines are 1,099.51 GB.

Meta never says which precision runs on the two Macs. The files say it for them:

So "two Mac Studios" is true and comfortable at 4-bit, and slightly conservative: a 3-bit build's bytes fit on one. Nobody has published what 3-bit costs in accuracy for this model.

How fast, at most

Decoding reads every active weight once per token, so bandwidth sets a ceiling. The mlx-community 4-bit build quantizes the experts of 60 layers and keeps layers 0 and 61's experts, all attention, the latent projections and the output head in BF16 (measured). That is 54.4 GB per token, 39.2 GB of it the BF16 path (reasoned). Two Macs read their halves in turn, so the ceiling is 1.2 TB/s over 54.4 GB: about 22 tokens per second before any Thunderbolt hop or overhead (reasoned). Meta publishes no Mac throughput to check it against.

Meta's NVFP4 checkpoint has the same split: Hugging Face counts 773,094,113,280 packed FP4 values in it, exactly 60 layers of 256 experts (reasoned from its dtype counts; the files are gated).

Unsloth's 2-bit on one Mac Studio

Unsloth's guide says "The 2-bit UD-IQ2_XXS quant will fit on 256GB RAM". The six shards sum to 225.57 GB (measured), and a 256 GB Mac Studio has 274.88 GB. The vision and audio projector is another 4.10 GB in BF16. That leaves about 45 GB for the cache and macOS (reasoned), and the GPU on a Mac can use only part of unified memory unless you raise its wired limit.

A 512K-token BF16 cache needs 34.7 GB and fits; the full 1M needs 69.1 GB and does not, unless the cache is 8-bit, at 34.6 GB (reasoned). So the claim holds, at half the context or with a compressed cache.

"Dynamic" means the bits are uneven (measured, from tensor types): every routed expert is IQ2_XXS, 2.06 bits per weight and 91.3% of the file, while attention, the latent projections and the head stay at Q6_K or Q8_0. Per token that build reads about 25.1 GB, a ceiling of about 48 tokens per second at 1.2 TB/s (reasoned).

Line chart of KL divergence against GGUF disk size from 175 to 505 GB, log scale, for general, chat and combined evaluation sets. All three fall as size grows. General KLD is about 0.5 at IQ1_S, about 0.25 at IQ2_XXS, about 0.13 at IQ2_S and about 0.011 at Q4_K_XL; chat KLD is lower throughout.
KL divergence from the full model against file size for each Unsloth GGUF. Lower is closer to BF16. The numbers are Unsloth's and have not been re-run here (Unsloth, Muse Spark Open guide, KLD benchmarks).

Unsloth's own charts complicate this. The guide says "quants below UD-IQ2_S do degrade for general tasks, so we generally recommend using UD-IQ2_S as the minimum quant to use for agentic tasks". UD-IQ2_S is 275.50 GB (measured): 0.62 GB more than a 256 GB Mac Studio holds before macOS or a single token of cache. The quant that fits the cheaper machine is the one Unsloth tells you not to use for agents.

Line chart of top-1 token agreement with the full model against GGUF disk size. General top-1 accuracy rises from about 78 percent at IQ1_S through about 86 percent at IQ2_XXS and about 90 percent at IQ2_S to about 97 percent at Q4_K_XL; chat top-1 accuracy rises from about 92 percent to about 98 percent.
How often each quant's most likely next token matches the full model's. Read off the chart, IQ2_XXS agrees about 86% of the time on general text and IQ2_S about 90%. Unsloth's numbers, not re-run (Unsloth, Muse Spark Open guide, top-1 accuracy).

That step, about 86% to about 90% general top-1 agreement (read by eye), is one of the largest on the curve. For an agent emitting tool call after tool call it can be the difference between JSON that parses and JSON that does not; nobody has published tool-call accuracy per quant yet.

"Most capable US open-weight": what it rests on

Benchmark table comparing Muse Spark Open (xhigh) with Inkling, Nemotron 3 Ultra, Beam, Mistral Large 4, Qwen3.8-2.4T-A95B, GLM 5.3 and Kimi K3 on eleven rows: JobBench, MCP-Atlas, GDPval-AA v2, HLE-Diamond, SciCode, AA-Omniscience, Terminal-Bench 2.1, DeepSWE 1.1, ZeroBench, BabyVision and SimpleVQA. Muse Spark Open's column is highlighted; the best score in each row is shaded.
The comparison Meta posted with the launch. It shows 11 of the model card's 20 capability rows. Every number is Meta's (Meta, launch thread on X, image 2; also the model card).

The card's table has 20 capability rows and seven comparators. Three are from US labs: Thinking Machines' Inkling, NVIDIA's Nemotron 3 Ultra and Reflection's Beam. Mistral Large 4 is French; Qwen3.8, GLM 5.3 and Kimi K3 are Chinese. My tally of Meta's numbers:

The launch image is a selection. Of its 11 rows Muse Spark Open leads 6; of the 9 it leaves out, including the index, GPQA Diamond, OSWorld, Toolathlon and SWE-Atlas, it leads 1 (my tally). Nothing in it is wrong; it is the half of the table that looks best.

Nemotron 3.5 Super VL, the US open model this site covered the day before, is not in Meta's table; at 120B total it is a smaller class, and its card gives Terminal-Bench 2.1 as 66.70 (reported, a different harness).

One hint sits in the blog's asset names: its hero image is muse-spark-1-2-open-weights-hero-light-v1.webp (measured, from the page source). The chart in our Muse Wonder article puts Meta's closed Muse Spark 1.2 at 40 on the same index, one point above this model's 39. This is probably an open-weights Muse Spark 1.2 with extra safety training. That is my inference; Meta does not say it.

The safety rows are where it is furthest from everyone: on StrongREJECT v2 with adaptive attacks, lower is better, it scores 0.5 against 62.9 to 86.4 for every other model with a score (reported).

The licence, quoted

The Muse Model License opens like MIT: permission "to use, copy, modify (including fine-tune), create derivative works, distill, merge, publish, distribute, sublicense, and/or sell copies". Then come the conditions.

The commercial limit is section 3:

If the Licensee or any of its affiliates provide a third party with access to artificial intelligence models as a product or service, via API or a similar interface, where the third party receives outputs of such models ("Model as a Service"), and the aggregate gross revenue of the Licensee and its affiliates exceeds twenty (20) million US dollars (or the equivalent in other currencies) during any consecutive twelve (12) month period, the Licensee must notify Meta and enter into a separate written agreement with Meta before offering the Software or any Derivatives as part of that Model as a Service business.

It then excludes "internal use, research, or any commercial activity that is not Model as a Service" and use "to power features of the Licensee's own product or service". So the limit is narrow: a company reselling the model's outputs through an API needs a deal with Meta once its whole group, not the model, earns more than twenty million dollars a year. A product that uses the model inside its own features never does.

Two other conditions are broader than they look:

The usage policy in Exhibit A also rules out "Military, warfare, nuclear industries or applications, espionage" and "Operation of critical infrastructure, transportation technologies, or heavy machinery". Meta's summary, "limited commercial terms, which allow many developers to use the model for free", is accurate for most readers. It is not an open-source licence, and it is a step back from Muse Glimmer's Apache 2.0.

What I could not check

The take

Under the "two Mac Studios" line is an architecture built to make it true. 97.4% of the language model is routed experts that sit idle for any one token; the experts run in a half-width latent, so 256 per layer cost half what they would; and three of every four layers forget everything older than 2,048 tokens, which keeps a million-token cache at 69 GB instead of 266. Muse Glimmer was designed backwards from a 24 GB card. Muse Spark Open looks designed backwards from a terabyte of unified memory.

Each claim holds with a condition attached. 816B and 42B are exact without the vocabulary tables. Two Mac Studios hold the 4-bit build with the full context; one holds the 2-bit build at half the context, in a quant Unsloth calls too lossy for agents. "Most capable US open-weight" is true by a wide margin, while the model leads 7 of its own table's 20 rows. And the licence is free for nearly everyone who is not a large API reseller, as long as they write "Built with Muse Spark Open", including under any model distilled from it.


Sources: Meta's launch thread, blog and model card and licence; Unsloth's post, GGUFs and guide; the mlx-community 4-bit build; transformers' muse_spark code (read, not run); Apple's Mac Studio specs; Llama 4 Scout's tokenizer. Headers and file sizes read on 16 October. Figure 1 is Meta's, figures 2 and 3 Unsloth's; both interactives are mine.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Muse Spark Open: 816B on two Mac Studios, and what the arithmetic needs", ai.thesatyajit.com, October 2026.

bibtex
@misc{ghana2026musesparkopen,
  author = {Satyajit Ghana},
  title  = {Muse Spark Open: 816B on two Mac Studios, and what the arithmetic needs},
  url    = {https://ai.thesatyajit.com/articles/muse-spark-open},
  year   = {2026}
}
share