Skip to content

Composing Weight and Data Sparsity in MoE

Improving compute efficiency through varying compute per token

Token-Choice MoE with Null Experts
──────────────────────────────────

Input: x (T, D), router weights W (N+1, D), experts E, top-K, null copies M

# Router
logits = x @ W.T                                          # (T, N+1)
logits = cat([logits[:, :N], logits[:, N:].expand(M)])   # (T, N+M)  ← ADDED
scores = softmax(logits)
top_scores, top_idx = top-K(scores, k)

# Reorder tokens by expert
order = argsort(top_idx.flatten(), stable=True)
sorted_scores = top_scores.flatten()[order]
sorted_tokens = order // k
num_per_expert = histc(top_idx, bins=N+M)                #           ← CHANGED

# Truncate to real experts (null experts sort last)
num_real = num_per_expert[:N].sum()                      #           ← ADDED
sorted_scores[:num_real] /= per_token_sum(...)           # renorm    ← ADDED

# Expert computation (unchanged grouped_mm)
x_in = x[sorted_tokens[:num_real]] * sorted_scores[:num_real, None]
x_out = grouped_mm(x_in, E, num_per_expert[:N])          #           ← CHANGED

# Scatter back
y = zeros(T, D)
y.scatter_add_(sorted_tokens[:num_real], x_out)
return y
K^k_ρ
Task Benchmark 1.7B K41.0 18B-A3B 1.7B K80.5 18B-A3B Isaac 0.2 2B InternVL3.5-20B-A4B 20B–A4B
Pointing
Pointing — Aerial Grounding80.782.273.1—
Pointing — Perceptron Grounding58.859.251.5—
Pointing — RefCOCO87.687.887.491.9
Pointing — Overall75.776.470.7—
OCR
OCR — ChartQA79.080.375.186.6
OCR — DocVQA92.993.892.192.9
OCR — A-OKVQA (val)89.491.887.2—
OCR — TextVQA80.882.078.178.5
OCR — OCRBench873880857870
OCR — Overall85.987.283.6—
Counting
Counting — Aerial Counting53.057.052.0—
Counting — CVBench72.173.872.5—
Counting — PixMoCount68.669.466.7—
Counting — CountBench85.587.584.6—
Counting — Overall69.871.969.0—
General
General — VSR (Zero-Shot)79.680.678.6—
General — VQA v282.682.480.8—
General — RealWorldQA74.175.177.971.2
General — SEED-Bench76.875.874.2—
General — M3Exam (English)54.858.655.8—
General — NLVR282.683.276.4—
General — BLINK53.855.655.059.0
General — MathVista73.273.969.678.0
General — MME2221223720922318
General — AI2D79.178.974.585.9
General — ERQA40.639.436.841.6
General — Overall70.671.268.6—

Methodology

  1. Bold indicates the best model per row; em dashes (—) denote models not evaluated for that benchmark.
  2. Values are taken directly from the provided LaTeX table (mixed scales such as OCRBench/MME are shown as-is).
Task Benchmark 1.7B K41.0 18B-A3B 1.7B K80.5 18B-A3B Isaac 0.2 2B InternVL3.5-20B-A4B 20B–A4B
Pointing
Pointing — Aerial Grounding80.782.273.1—
Pointing — Perceptron Grounding58.859.251.5—
Pointing — RefCOCO87.687.887.491.9
Pointing — Overall75.776.470.7—
OCR
OCR — ChartQA79.080.375.186.6
OCR — DocVQA92.993.892.192.9
OCR — A-OKVQA (val)89.491.887.2—
OCR — TextVQA80.882.078.178.5
OCR — OCRBench873880857870
OCR — Overall85.987.283.6—
Counting
Counting — Aerial Counting53.057.052.0—
Counting — CVBench72.173.872.5—
Counting — PixMoCount68.669.466.7—
Counting — CountBench85.587.584.6—
Counting — Overall69.871.969.0—
General
General — VSR (Zero-Shot)79.680.678.6—
General — VQA v282.682.480.8—
General — RealWorldQA74.175.177.971.2
General — SEED-Bench76.875.874.2—
General — M3Exam (English)54.858.655.8—
General — NLVR282.683.276.4—
General — BLINK53.855.655.059.0
General — MathVista73.273.969.678.0
General — MME2221223720922318
General — AI2D79.178.974.585.9
General — ERQA40.639.436.841.6
General — Overall70.671.268.6—

Methodology

  1. Bold indicates the best model per row; em dashes (—) denote models not evaluated for that benchmark.
  2. Values are taken directly from the provided LaTeX table (mixed scales such as OCRBench/MME are shown as-is).
@article{kilian2026composing,
  title={Improving MoE Compute Efficiency by Composing Weight and Data Sparsity},
  author={Kilian, Maciej and Mkrtchyan, Oleg and Zettlemoyer, Luke and Shrivastava, Akshat and Aghajanyan, Armen},
  year={2026}
}

We believe in building in the open and empowering the community. You can start creating with Isaac today.