~/satyajit

Comet 60B: Nemotron 3.5 Super VL with half of every expert pool cut

mdjsonmcp

2026-10-16 · 19 min · mixture-of-experts · pruning · distillation · vision-language-models · quantization · nvidia

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

› transcript

Hi, I'm Tessellate! Comet sixty B is a smaller copy of an NVIDIA vision language model. Here's what was cut. The idea: keep every layer. In each expert block, keep the half that matters most, narrow each one, and drop the rest. A token reaches a mixture of experts block, and a router scores the experts for it. In the parent, it picks twenty-two of five hundred and twelve small networks. Comet keeps two hundred and fifty-six of them, and trims each one's hidden width. The router still picks twenty-two, so a token does about the same work as before. The model's own config names the method. Run sample text, images and video through it, and score each expert by what it adds. Drop the lowest scoring half, separately in every block. Trim the weakest channels inside each survivor, and refit what is left. Then train it to copy the original model, and finish with reinforcement learning. Each router row is like a fingerprint for one expert, so matching them shows which ones survived. Every block keeps its own half, scattered, in the original order. No block keeps a neat range. Stored parameters halve. But active parameters per token barely move, because each token still visits twenty-two experts. The cost shows up in vision. Sixteen of seventeen image and video scores fall, while agent scores mostly rise. So pruning experts halves the memory a model like this needs, while the work per token stays almost the same. Half the experts kept. Memory halved, compute nearly unchanged. And vision pays most of the cost. Every source is in the full article. I'm Tessellate. Bye!

Why read this

Notabletop 60%

Diffs Comet against its parent tensor by tensor, recovers which experts each block kept, and recounts 'within 5%' from the card's own table.

  • Checked against the source
  • Concrete numbers to act on
  • Open code or weights

Quantization & compressionNeeds datacenter GPUsCustom licencePractitioner model

How this was scored
Is it new?
1 of 3: An incremental tweak
Can I trust it?
3 of 3: Reproduces the headline result, or shows from primary files it is wrong
Can I run it?
2 of 3: Open code or weights with real limits
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?
1 of 3: A specialist community
Only here?
2 of 3: A teardown or measurement few others did

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

On 2026-10-15 Multiverse Computing posted: "Meet Comet 60B, in collaboration with @nvidia. Built from Nemotron 3.5 Super VL: 50% fewer total parameters, Within 5% of original accuracy, Text, image & video. Open-source multimodal AI for agentic workloads."

The parent is the model I took apart a day earlier in Nemotron 3.5 Super VL: 88 layers, eight of which remember every token: a hybrid of 40 Mamba-2 layers, 8 attention layers and 40 latent mixture-of-experts layers, with a C-RADIO vision tower, 124.45B parameters in the checkpoint and 12.23B active per text token. I reuse its counts here rather than redo them.

Comet ships as three Hugging Face repositories, Comet_60B_A12B_BF16, _FP8 and _NVFP4, with one model card for all three and a press release. There is no paper. The model is credited to CompactifAI, Multiverse's "quantum-inspired" compression, which their 2024 paper (arXiv 2401.14109) describes as replacing weight matrices with tensor networks. So the question is mechanical: what was removed to halve the parameter count, and do the claims hold?

I did not run the model. Everything below comes from files: both config.jsons, both BF16 safetensors headers (22,087 tensors against 43,079), the router weights of every MoE block in both and a few whole experts (about 300 MB of HTTP range reads out of 371 GB of weights), the quantization configs and the card. Numbers are labelled measured (I counted it in a file), reported (Multiverse or NVIDIA says so) or reasoned (my arithmetic on the other two).

MultiverseComputingCAI/Comet_60B_A12B_BF16@3d89424 · snapshot 2026-10-16
announced
61.1B / 12.3B active
measured
61,126,735,112
parameters
61.13B
repo size
122.27 GB
architecture
NemotronH_Omni_Reasoning_V3
task
image-text-to-text
library
transformers
license
other
safetensors
26 shards
largest file
5.00 GB
files
45
downloads
17
likes
8
languages
en
parameters by dtype
BF1661.13BF3210.5KI642

Nemotron 3.5 Super VL with 256 of 512 routed experts per MoE block and each expert narrowed from 2,688 to 2,432 channels. Remote code (trust_remote_code). NVIDIA Nemotron Open Model License.

repo last modified 2026-10-15

What halving an MoE can mean

In the parent, every MoE block has 512 routed experts, each a pair of 1,024 × 2,688 matrices working in a 1,024-wide latent, and a router that sends each token to 22 of them. Those routed experts are 112.74B of the 124.45B parameters, 90.6% of the checkpoint (measured, in the parent article). Anything that halves the model has to go through them.

There are four obvious ways in:

The headers say which of these happened.

The diff, tensor by tensor

Comet's config.json differs from the parent's in exactly two fields (measured): n_routed_experts goes from 512 to 256, and moe_intermediate_size from 2,688 to 2,432. Every other field is identical: 88 blocks in the same order, hidden size 4,096, 128 Mamba-2 heads, 32 query and 2 key-value heads, 22 experts per token, the same vision config, the same one-layer MTP head, the same 1,048,576 maximum positions.

The safetensors headers agree. After collapsing expert indices, the two checkpoints have the same set of tensor names, and only four kinds of tensor change shape, in each of the 40 backbone MoE blocks and in the MTP block (measured):

TensorParentComet
gate.weight (router)[512, 4096][256, 4096]
gate.e_score_correction_bias[512][256]
experts.N.up_proj[2688, 1024] × 512[2432, 1024] × 256
experts.N.down_proj[1024, 2688] × 512[1024, 2432] × 256

No layer is missing. No new tensor appears. The Mamba-2 mixers, the attention mixers, the shared experts (still 5,376 wide), the latent projections, the embedding table, the output head and the whole vision path keep their shapes. There are no factor tensors anywhere: every weight in Comet is a plain dense matrix with either the parent's shape or a slice of it. Whatever "tensor network" means in this release, it is not in the weights.

So Comet is two of the four options at once: half the experts, and each surviving expert 9.5% narrower.

The config says how

The same config.json carries a block the parent does not have, compactifai_pruning, which reads like an export of the pipeline's own settings (measured; it also holds internal file paths, which I leave out). The fields that matter:

REAP is Cerebras' Router-weighted Expert Activation Pruning, arXiv 2510.13999. The idea derives in a few lines. When a token goes through an MoE block, the output is the sum, over the experts the router picked, of the router's gate value times that expert's output. If you delete an expert, the error you introduce on a token is roughly that gate value times the norm of that expert's output, and only on the tokens where the router would have picked it. So run calibration data through the model, and for each expert average gate × output-norm over the tokens routed to it. The experts with the smallest scores contribute least to the block's output; delete those. The paper argues this beats merging experts for generative tasks, and reports near-lossless code generation on Qwen3-Coder-480B and Kimi-K2 after removing half the experts.

"Domain protection over 6 groups" reads as: the scores were computed separately on reasoning, code, general, agentic, image and video data, so that an expert that matters only for video is not pruned because text calibration never wakes it. The config does not say how the six were combined, and there is no write-up to check it against.

The channel step applies the same reasoning one level down. Inside an expert, a hidden channel's contribution is its activation times the norm of the matching column of the down projection, pushed through the latent's up-projection (fc2). Channels with the smallest average contribution go, and the down projection is then refitted by ridge-regularised least squares so that the narrower expert reproduces the wider one's output on calibration tokens as closely as it can. That is the ls ridge 0.0001.

The arithmetic checks out. 40 blocks × 256 removed experts × 2 matrices is 20,480 tensors, and the MTP block's 256 × 2 make 20,992, the dropped_tensors count (reasoned).

Which experts went

The checkpoint renumbers the surviving experts 0 to 255, so it does not say which of the parent's 512 they were. The routers do. A router row is the vector the router dots with a token's hidden state to score one expert, and fine-tuning moves it only slightly. For every MoE block I read both routers in full and matched each of Comet's 256 rows to the parent row with the highest cosine similarity (measured):

No block keeps a contiguous range; the survivors are scattered differently in every block, which is what a data-driven score looks like. Two more things fall out of the match. First, the router rows drifted further in deeper blocks: the median matched cosine is 0.999 in the first blocks and 0.988 to 0.992 in the last few (measured). Healing moved the late layers more. Second, the parent's e_score_correction_bias, the per-expert bias the router uses for load balancing, does not predict survival. In every block, kept and dropped experts have the same mean bias to within 0.03 (measured). REAP is measuring something the load balancer was not.

The channels behave the same way. For four experts I spot-checked (blocks 1, 45 and 87), the 2,432 up-projection rows match 2,432 distinct parent rows in order, with cosines above 0.98 (measured). The kept rows moved 5% to 7% in relative norm from the parent's, and the down projections 9% to 15%, which is the least-squares refit plus healing (measured on those four, reasoned cause).

Everything else moved a little

Unchanged shape is not unchanged weights: the card says the pruned model was healed by distillation from the parent, then trained with GRPO-style reinforcement learning. I compared the first 2 MB of a dozen tensors that kept their shape (measured):

So the vision tower is intact: same architecture, same 0.65B parameters, nearly the same weights. Whatever Comet lost on vision, it lost in the experts, not the encoder (reasoned).

The MTP number has an explanation in a second file. _convert.json, which records how the Megatron checkpoint was exported, says the main weights came from a reinforcement-learning checkpoint while all 528 MTP tensors were "reference graft": copied from the healed, pre-RL model (measured). The config also names a separate MTP source dated 2026-09-21. The draft head was therefore never trained against the RL'd model it drafts for. MTP decoding is lossless, so this cannot change outputs; it can lower the acceptance rate, which the card does not report (reasoned).

60B total, 12B active?

Summing every tensor in both BF16 headers (measured):

ComponentNemotron 3.5 Super VLComet 60B
Routed experts112.74B51.00B
Mamba-2 mixers4.39B4.39B
MTP draft head2.94B1.40B
Shared experts1.76B1.76B
Vision encoder and connector0.84B0.84B
Embedding table0.54B0.54B
Output head0.54B0.54B
Latent projections, routers, norms0.42B0.38B
Attention mixers0.29B0.29B
Total124.45B61.13B

61,126,735,112 against 124,453,395,976: 50.9% fewer parameters (reasoned). The card's 61.1B is exact. The language model alone falls from 120.67B to 58.89B. The 60 in the name rounds down the whole checkpoint; the press release's "120 billion" for the parent rounds down only its language model.

Active per text token, counted the same way as in the parent article (22 routed experts per block plus everything always on and the output head; not the embedding lookup, the MTP head or the vision side): 12.23B for the parent, 11.73B for Comet (measured from shapes, with the selection rule from config). The card's 12.3B and 12.8B add the embedding table; its 11.2B and 11.7B drop the output head too, and match mine less its 0.54B. A reply under the post asked whether this is "basically more active parameters". It is slightly fewer: the token still visits 22 experts, but each is 9.5% narrower, so the routed share of a token's compute falls from 121.1M to 109.6M per block and the whole active count by 4.1% (reasoned).

This is the trade the design makes. Memory to hold the model halves; compute per token barely moves. That is the right trade for an MoE, where the routed pool is storage and the rest of the network is the work.

What the half buys

Checkpoint sizes, summed from the repositories' safetensors files (measured):

FormatNemotron 3.5 Super VLComet 60B
BF16248.91 GB122.26 GB
FP8not published66.28 GB
NVFP475.01 GB40.48 GB

The FP8 checkpoint follows NVIDIA's FP8 layout for Nemotron 3 Super: experts and Mamba-2 projections in FP8, everything else in BF16. The NVFP4 checkpoint copies the parent's NVFP4 layout, and its hf_quant_config.json lists 20,563 NVFP4 modules and 113 FP8 ones (measured); 113 is the 80 Mamba-2 projections, the 32 attention projections and the output head (reasoned). Because the experts were halved and the BF16 and FP8 parts were not, Comet's NVFP4 file averages 5.3 bits per parameter (reasoned), against the 4.82 NVIDIA's report computes for the parent (reported).

The card's minimums follow from these sizes: BF16 on 2 H200s, FP8 on 1 H200, NVFP4 on 1 B300 (reported). The attention and Mamba-2 layers are identical, so the KV cache is still 8 KiB per token in BF16 and the recurrent state a constant 168 MB per sequence, as priced in the parent article. What changes is the room left for them: on 4 H200s the card reports KV capacity of 24.0M tokens against 14.1M (reported).

The card's throughput table reports Comet serving 20% more chat and 23% more agentic output tokens per GPU on the same 4 H200s, with inter-token latency down from 23.4 ms to 19.1 ms on chat (reported, vLLM with MTP, NVIDIA's Dynamo traces). Active parameters fell only 4.1%, so where does 20% come from? Two places, I think (reasoned). One is the cache room: more concurrent sequences, more prefix-cache hits. The other is batching. One token reads 22 experts either way, but a decode step for a batch reads every expert any token in the batch picked. With 32 tokens per step and uniform routing, the parent touches about 386 of its 512 experts per block and Comet about 242 of 256, so the expert weights read per step fall from 4.26 GB to 2.41 GB per block in BF16, about 43% less. At 128 tokens per step both models read nearly every expert, and the saving approaches the full 55%. Real routing is skewed, so true counts are lower, but the direction holds. The widget's batch slider runs this.

"Within 5%": which 5%

The card has the right table: Multiverse ran the parent and Comet on the same vLLM build, harnesses, prompts, judges and sampling, 35 scores in all. Every score is reported; the counts are mine (measured from the card).

The card's own summary is that Comet BF16 is "within 3 points of the original on 28 of the 35 scores below and within 5 points on 32". Both hold. It is ahead on 9 rows: all three τ²-Bench domains and their average, AutomationBench-AA, SciCode, SWE-bench Pro, GDP.pdf mean and BabyVision.

The post says "Within 5% of original accuracy". Five points and five percent are far apart on low-scoring benchmarks. As a relative drop, Comet BF16 is within 5% of the parent on 26 of 35 rows. The nine that are not:

BenchmarkParentComet BF16Change
AA-Omniscience Index5.082.83−44.3%
GDP.pdf all-pass6.205.20−16.1%
HLE, no tools28.5925.35−11.3%
OCRBench v2 CN, EvalScope61.2755.88−8.8%
Terminal-Bench 2.160.6755.76−8.1%
Video-MME v2, group score18.2616.82−7.9%
GDPval-AA v2.174.5169.05−7.3%
V*90.5884.82−6.4%
Video-MME v2, linear score33.8231.74−6.2%

AA-Omniscience is an index that can go negative (Comet's NVFP4 scores −8.29 against the parent NVFP4's 5.38), so its percentage means least. By area (reasoned from the card's rows):

That fits the mechanism (reasoned): pruning removes capacity the calibration set does not exercise, and the channel refit's calibration was text. If image tokens routed to experts text rarely woke, they lost them.

Bar chart titled Text and Agentic Benchmarks comparing Nemotron 3.5 Super and Comet 60B on eight benchmarks: GPQA Diamond 90.40 versus 88.57, HLE 30.03 versus 24.51, AA-LCR 69.50 versus 67.81, SciCode 46.89 versus 46.35, Terminal-Bench 2.1 64.19 versus 57.30, SWE-bench Pro 52.44 versus 51.48, tau-squared-Bench 81.48 versus 81.01, GDPval-AA 76.14 versus 69.62.
The card's text and agentic chart. The Comet bars are the FP8 column of the card's own table; the parent bars match neither the card's table nor NVIDIA's card (Comet 60B model card, Text and Agentic chart).

The charts use different numbers from the table

The model card and the press release both lead with bar charts, and the charts do not plot the table.

Bar chart titled Where Comet 60B Leads, pairing Nemotron 3.5 Super and Comet 60B: AutomationBench-AA 31.16 versus 33.38, SciCode 45.36 versus 46.35, SWE-bench Multilingual 67.00 versus 69.33, SWE-bench Pro 50.30 versus 51.48, tau-squared-Bench 78.93 versus 81.01, telecom 76.75 versus 83.11, banking 21.13 versus 22.68, BabyVision 26.80 versus 30.93.
The release's chart of rows where Comet leads. The parent bars here are the card's table; the Comet bars are its FP8 scores, and the banking row is τ³-Banking (Multiverse Computing press release).

None of this changes the table, the one like-for-like comparison. On it, FP8 is as good as BF16: within 3 points on 27 of 35 rows, a mean change of −1.10 points against −1.46. The card itself says single-run benchmarks move 1 to 2 points between runs, so gaps under about 3 points are noise.

Bar chart titled Vision and Video Benchmarks comparing Nemotron 3.5 Super and Comet 60B: MMMU-Pro 70.35 versus 66.88, MathVision 70.20 versus 69.34, CharXiv reasoning 73.70 versus 72.90, OCRBench v2 EN 67.30 versus 66.28, MMLongBench-Doc 60.00 versus 58.51, Video-MME 74.80 versus 72.44.
The card's vision and video chart: six of the 17 vision rows, FP8 Comet against the chart baseline. The card's table has all 17, and 16 of them fall (Comet 60B model card, Vision and Video chart).

Licence, and loose ends

The card puts Comet under the NVIDIA Nemotron Open Model License and says it is "Licensed by NVIDIA Corporation". The parent's public repository is under OpenMDW 1.1, which, as I noted in the parent article, is closer to MIT and places no restriction on how a derivative is licensed. The stricter licence is permitted, but it is not inherited from the public parent; it may come with the early access Multiverse says it had (reasoned). "Open source" here means open weights under a custom licence; the model code is NVIDIA's, under Apache 2.0.

The card still has loose ends (measured): an unfilled release date, TODO markers in the citation block, format links to Comet-1.0-60B-* repositories that do not exist (the organisation lists only the three Comet_60B_A12B_* repos), and an FP8 command that spells the organisation MMultiverseComputingCAI. None of it touches the weights.

The sibling: Hypernova 60B

Multiverse's earlier Hypernova-60B-2605 did the same thing to OpenAI's gpt-oss-120b, and the two configs show the recipe (measured): 36 layers became 32, 128 experts per layer became 80, and the expert width went from 2,880 to 2,560, with 4 experts per token kept. Hypernova also dropped layers; Comet did not. Both are structured pruning plus healing, and neither checkpoint contains a tensor network.

What I would take away

For more on pruning experts by router statistics, see runtime dynamic compression, which swaps REAP selections at runtime, and the Soft-REAP experiment in Qwen3.8-Flash-Next. For the NVIDIA tooling the FP8 and NVFP4 checkpoints were made with, NVIDIA Model Optimizer and Nemotron in NVFP4. For the basics, the mixture-of-experts architecture page.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Comet 60B: Nemotron 3.5 Super VL with half of every expert pool cut", ai.thesatyajit.com, October 2026.

bibtex
@misc{ghana2026comet60b,
  author = {Satyajit Ghana},
  title  = {Comet 60B: Nemotron 3.5 Super VL with half of every expert pool cut},
  url    = {https://ai.thesatyajit.com/articles/comet-60b},
  year   = {2026}
}
share