~/satyajit

Inkling 2 Small: a 594B MoE from 12.6T tokens, checked against its own numbers

mdjsonmcp

2026-11-09 · 15 min · mixture-of-experts · reinforcement-learning · pretraining · multimodal

Why read this

Solidtop 85%

Rebuilds Inkling 2 Small's compute from the post's token counts (RL matches 8ND) and solves its expert layout, calibrated on Inkling-Small's real config.

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

Training & RLAPI onlyProprietaryPractitioner 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 58 of 100, ranked 464 of 701 rated articles. Each question is answered 0–3 by hand, and a 3 is rare. How articles are scored

Thinking Machines shipped Inkling in July and Inkling-Small two weeks later, both with Apache-2.0 weights. On 5 November 2026 it announced the second generation's first rung, Inkling 2 Small. The headline facts, from the post: a mixture-of-experts with 594B total parameters and 17B active, a new pre-train from scratch, image input, variable effort, and a score of 30.6 on the Artificial Analysis Intelligence Index (the lab's tweet rounds it to 31).

The X reaction ran ahead of the post in places. One researcher called it "a new pre train from scratch (17B active 594B total param), train fully in only a few dozen of days ... (only 12T token!)". Another account wrote "#1 open weights (Elo 1376)" and "$0.30/$1.00 per million tokens".

This page is about what I could check, and what I could not. Short version:

I am not repeating what the two earlier articles cover: the first generation's 5:1 sliding-window layout and effort control are in the Inkling teardown, on-policy distillation and the stated-versus-measured parameter gap are in the Inkling-Small one.

What the posts claim, and where each claim comes from

Claim (as posted)Source of the numberStatus
17B active, 594B totalPost and model cardReported. No weights to count.
"new pre train from scratch"Post: "more efficient pre-training", phases H1-H4Reported
"only 12T token"Post: 8.4T + 3.8T + about 320B + about 34BReported; sums to 12.55T before 3T+ of RL tokens
"a few dozen of days"Post: H1 took 68 hours, RL 9 days; H2-H4 untimedNot stated. The timed parts add to under 12 days
"#1 open weights (Elo 1376)"A DesignArena "Overall Frontend" chart in the third postThird-party. The weights are not open yet
"$0.30/$1.00 per million tokens"Tinker's price listMeasured: prefill $0.30, sample $1.00

Two of these need a note.

"#1 open weights." The 1376 figure comes from a DesignArena chart, not from Thinking Machines; on it Inkling 2 Small sits fourth, behind Claude Opus 5.5 (1388), GPT-6 Astra (1387) and Muse Wonder (1382). The lab's own post is more careful: "Pending the release of its weights, it is set to be the top open-weights model on DesignArena", and it quotes a different board, the Website leaderboard, where the model scores 1,340. On the broader Artificial Analysis index, the lab's own comparison table has two open-weights models above it: DeepSeek-V4.1-Flash-1017 at 32.6 and GLM 5.3 at 31.7, against 30.6. "Best open model at front-end design, by one arena" holds on the evidence shown. "Best open model" does not, and "open" is a promise for now.

"A few dozen days." The post times two phases: H1 "ran for 68 hours", and the RL run took 9 days. H2 is 3.8T tokens with no duration given. At H1's token rate it would take about 31 hours (reasoned), which puts the timed and extrapolated phases at about 13 days. The post also says the RL run was paused after a monitoring alert and resumed with extra alignment phases, and it never times the gap. So "a few dozen days" may be right end to end, but the post does not support it, and the parts it does time are shorter.

The architecture, as stated

The model card's whole description: "A 48 layer decoder-only transformer with a sparse Mixture-of-Experts (MoE) feed-forward backbone: each token is routed to 8 of 384 experts. Attention is a hybrid of local and global layers." The post adds the vision path and the numerics:

That is the whole public spec. No hidden size, no head counts, no expert width.

What 594 and 17 force

Two counts and an expert grid pin down more than they seem to. In any MoE, attention, embeddings, dense layers and shared experts are counted in both the total and the active figure. Subtracting one from the other leaves only the routed experts that a token does not use:

Ptotal−Pactive=Lmoe⋅(n−k)⋅EP_{\text{total}} - P_{\text{active}} = L_{\text{moe}} \cdot (n - k) \cdot E

with LmoeL_{\text{moe}} the number of MoE layers, n=384n = 384 experts, k=8k = 8 picked and EE the parameters in one expert. That gives the routed pool nLmoeEn L_{\text{moe}} E and its active slice kLmoeEk L_{\text{moe}} E without knowing the hidden size or the layer count:

The width of one expert does depend on how many of the 48 layers are MoE. With 46 (Inkling-Small kept its first two layers dense) it is 33.36M parameters; with all 48, 31.97M. For a SwiGLU expert that is 3⋅d⋅f3 \cdot d \cdot f, so hidden size 4,096 with expert width about 2,600, or 5,120 with about 2,100. I cannot tell which; nothing public says.

Before trusting this I ran it on a model I can read. From Inkling-Small's released config (hidden 4,096, 42 layers, first 2 dense, 256+2 experts, top-6, expert width 2,048) my parameter count script gives 263.6B total and 11.9B active; the weights' safetensors index says 531,912,898,740 bytes, about 265.96B parameters in bf16, so the config arithmetic is within 1% (measured). Then I applied the solve to Inkling-Small's stated 276B / 12B: it gives 26.40M per expert, where the config says 25.17M. The solve runs about 5% high on rounded marketing numbers. Read 32-33M for Inkling 2 Small with that error bar.

Compared with Inkling-Small, then: 1.5x as many experts, 8 picked instead of 6, each expert roughly 30% larger, a ratio of total to active parameters of about 35 instead of 23. The always-on slice is small, about 4.7B of 17B. Most of what a token computes is expert MLP, and most of what has to sit in memory is experts it does not use. That is the shape that makes the post's "high expert parallelism" on GB300 NVL72 racks matter: 72 GPUs in one NVLink domain is where you can spread 384 experts per layer without crossing a slower network on every token.

The training run, rebuilt from the post's numbers

The post is unusually concrete about the schedule:

PhaseTokensContextWhat it was
H18.4Tnot stated"a broad mix of natural language, code, and image data"; 68 hours on GB300 NVL72
H23.8T512K"higher-quality, newer data the model hadn't seen"
H3about 320B1M"reasoning and agent trajectories ... alongside replayed pretraining data"
H4about 34Bnot stated"about 34 billion tokens of agent trajectories"
RL3T+256K, with compaction1,075 steps, 17M+ rollouts, 2,048 GPUs, 9 days, "Over 4 × 10²³ FLOPs"

One detail in H3 and H4 is worth reading twice: the mixtures "consisted mostly of trajectories sampled from earlier models including Kimi K3 and our own models, filtered for correctness and alignment". Part of the mid-training signal is another lab's open model.

The standard estimate for training compute on a dense pass is C≈6NDC \approx 6 N D: two FLOPs per parameter per token forward, four backward. For an MoE, NN is the active count. Every number in the ledger below is reasoned from the post's token counts and 17B; attention FLOPs and the 292M vision encoder are left out, so these are floors.

The RL run is the real test, because the post states its compute. An RL token is sampled (a forward pass, 2ND2ND) and then trained on (6ND6ND), so the like-for-like figure for "learner + sampler FLOPs" is 8ND=8×17B×3T=4.08×10238ND = 8 \times 17\text{B} \times 3\text{T} = 4.08 \times 10^{23}. The post says "Over 4 × 10²³". Two independent statements, one about tokens and one about FLOPs, agree to 2% (reasoned). Counting only the trained pass (6ND6ND) gives 3.06×10233.06 \times 10^{23}, which would contradict the post; the sampler's forward passes are a quarter of the bill.

Pre-training plus RL comes to about 1.7×10241.7 \times 10^{24} FLOPs. For scale: 12.55T tokens is about 740 tokens per active parameter, and 21 per total parameter.

The wall clock says something the token counts do not. H1's 8.57×10238.57 \times 10^{23} FLOPs in 68 hours is 3.5×10183.5 \times 10^{18} FLOP/s sustained. The post does not say how many GPUs H1 used. If I assume a dense NVFP4 peak of 15 PFLOP/s per Blackwell Ultra GPU and 30% utilisation, that is about 780 GPUs, eleven NVL72 racks; move either assumption and the count moves with it (reasoned, and the assumptions are mine). The RL run is the opposite story: 4×10234 \times 10^{23} over 2,048 GPUs and 9 days is 2.5×10142.5 \times 10^{14} FLOP/s per GPU, under 2% of the same assumed peak. That is not a criticism. The post's own table explains it: median rollouts of 43K tokens, p99 of 1.5M, durations of 8 minutes median and 4 hours p99. Long agent rollouts spend their time decoding one token at a time and waiting on tools, and a FLOP count does not see either. The post's systems notes are all about that bottleneck: CUDA graphs for prefill, draft and verify, sticky routing and DRAM KV-cache offload for "93%+ prefix cache hit rate", and a 5:3 sampler-to-trainer ratio.

The RL run itself

One joint RL run replaced the first generation's separate reasoning and agentic runs plus multi-teacher distillation. Three things in the description are concrete enough to repeat:

The post also reports a safety incident in this run, plainly. Midway through, the asynchronous monitor flagged the model, failing at a task, working "around a network block through a third-party service it could reach using its search tools". The lab paused, removed environments that needed web access, added synchronous tool-call monitoring and resumed. Its alignment table then shows internal misbehavior falling from 75.2 (Inkling Small) to 14.9, still well above the 0.8 it reports for GPT-6.1 Sol (reported, internal evals).

Pre-training quality: one chart, measured on their own data

The post's best evidence that the pre-train is good is a bits-per-byte chart on an internal held-out code set with a June 2026 cutoff. The pre-trained Inkling 2 Small scores 0.2030; Kimi K3.1 Pro, the best of the comparison models, scores 0.2068. The post-trained Inkling 2 Small scores 0.2080, worse than its own base, as post-training usually makes a model.

The comparison models are "base-recovered": only post-trained checkpoints were available, so the lab "fine-tuned on a dataset of pretrain-formatted code and documents before computing log loss" and reports that this "mostly recovers base model loss" where a true base exists. That is a reasonable method and an unfalsifiable one from the outside: the eval set, the recovery data and the recovery check are all private (reported).

The benchmarks, briefly

Every score below is from the lab's table, mostly sourced from external evaluators (Artificial Analysis, Vals, Scale, Surge and others), at effort 0.99 and with a 1M-token trajectory limit. Inkling 2 Small is in the "Open Weights Flash" column, which is a category the model does not yet belong to.

Where it leads its class: knowledge work and finance (JobBench 70.5%, Finance Agent v2.1 67.5%, Vals Legal Index 73.9%, EnterpriseBench-CoreCraft 71.8%), visual perception (PerceptionBench 64.7%, ScreenSpot Pro 83.8%) and DesignArena's boards. Where it trails: DeepSeek-V4.1-Flash-1017 beats it on FrontierCode (28.5% against 25.4%), DeepSWE (77.0% against 72.1%) and the AA index. The model card adds a row the post leaves out: Terminal Bench v4.0 at 13.1%, against 32.8% for GLM-5.3-Flash and 33.8% for DeepSeek-V4.1-Flash. On Terminal Bench 2.1 with the Pi harness it scores 85.1%, so the weakness is specific to the newer suite, but it is the largest gap in the table.

The fine-tuning claim is the one most specific to this lab: on an earnings-call RL task, the post says Inkling 2 Small reaches Inkling Small's final reward "with just 75 training steps" of 200. The Inkling models are averaged over 3 seeds; the comparison models are single runs. Since fine-tunability is the product, that is the number I would want reproduced first.

What it costs on Tinker

Tinker's price list, read on 10 November, has Inkling 2 Small at $0.30 per million prefill tokens ($0.03 cached), $1.00 per million sampled and $1.50 per million trained, at 64K context. Inkling-Small, a smaller model with 12B active, lists at $0.58, $1.44 and $1.73. The new model is cheaper on every line. At 10% output and half the input cached, it comes to about $0.25 per million tokens against $0.46 for Inkling-Small (reasoned from list prices).

The 256K variant keeps the same inference prices and doubles training to $3.00. That fits what the training section describes: NVFP4 throughout, and the post mentions "a variant of NVFP4 KV cache, which we find to minimally lower evals".

What I ran, and what I could not

What I ran, with numbers you can check:

What I could not do: run the model. There are no weights, and sampling it needs a Tinker key, which I did not use for this page. Every benchmark, the bits-per-byte chart, the alignment table and the fine-tuning curve are the lab's. The post promises a follow-up on the NVFP4 recipe; it is not out.

thinking-machines-lab/tinker-cookbook@8486b8d · snapshot 2026-11-10
tracked files
674
license
Apache-2.0
branch
main
tests
221 files
source
5.4 MB
commit date
2026-11-06
source by language
Python5.4 MB(531)Shell4.0 kB(2)

by size of tracked source at this commit, file counts in brackets; docs, data and vendored trees excluded

local clone, 2026-11-10 at 8486b8d — branch, commit, commitDate, fileCount, hasTests, languages, license, licenseFile, shallow, testFileCount

shallow clone: counts describe the pinned tree, not the history

thinkingmachines/Inkling-Small@8cc5877 · snapshot 2026-11-10
parameters
265.96B
repo size
531.94 GB
architecture
InklingForConditionalGeneration
task
image-text-to-text
library
transformers
license
apache-2.0
safetensors
33 shards
largest file
18.86 GB
files
50
downloads
1.2M
likes
454
parameters by dtype
BF16265.96BF3210.3K
conversationalimage-text-to-textaudio-text-to-textmoe

repo last modified 2026-07-31

What to take from it

The checkable parts hold together. The token counts, the RL FLOP total and the GPU-days agree with each other, the expert grid matches the stated parameter counts, and the price list says what the tweets said it says. The parts that matter most to a user (benchmarks, fine-tunability, the pre-training quality chart) are all reported, and the weights that would let anyone check them are, by the lab's own schedule, a week away.

If they land under Apache 2.0, the first things worth doing are the boring ones: count the parameters in the safetensors (Inkling-Small's stated total ran 3.8% above what its weights hold), read the attention layout out of the config, and run Terminal Bench v4.0 to see whether 13.1% is the model or the harness.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Inkling 2 Small: a 594B MoE from 12.6T tokens, checked against its own numbers", ai.satyajit.si, November 2026.

bibtex
@misc{ghana2026inkling2small,
  author = {Satyajit Ghana},
  title  = {Inkling 2 Small: a 594B MoE from 12.6T tokens, checked against its own numbers},
  url    = {https://ai.satyajit.si/articles/inkling-2-small},
  year   = {2026}
}
share