Skip to content

TML Inkling 2 Small at Day 0: Serve TML Inkling with TokenSpeed

Nov 12, 2026
by TokenSpeed Team

Thinking Machines Lab (TML) has released Inkling 2 Small (thinkingmachines/Inkling-2-Small), the successor to its Inkling model. Inkling 2 Small is smaller and sparser than Inkling: it activates about 19B of its 594B parameters per token, adds an attention-residual path that lets every layer read a learned mix of earlier blocks, runs a 384-expert MoE in every layer, and ships with a separately trained speculative draft.

Working closely with TML, TokenSpeed enabled Day 0 support for Inkling 2 Small on NVIDIA Blackwell and AMD Instinct MI350X, with text and image input, TML's DSPARK speculative decoding, and JSON outputs that respect Inkling 2 Small's message framing. On 4× B300 replaying AgentX agentic coding sessions, a single user gets 492 tokens/s of decode, with the same output distribution as the target model alone, at any temperature. It is available to try out today; see the TokenSpeed deployment guide to get started.

This post walks through what changed from Inkling, how TokenSpeed serves Inkling 2 Small, and early end-to-end numbers. We continue to optimize every layer of the stack—pushing tokens toward the speed of light.

What's new in Inkling 2 Small ​

InklingInkling SmallInkling 2 Small
Size975B total / 41B active; 66 layers, hidden 6,144276B total / 12B active; 42 layers, hidden 4,096594B total / ~19B active; 48 layers, hidden 4,608
Attention heads64 query; 8 KV (full), 16 KV (sliding window)32 query; 8 KV everywhere48 query; 8 KV everywhere
Layer pattern5 sliding-window layers (window 512), then 1 full5 sliding-window layers (window 512), then 1 fullSame pattern, window 1,024
Relative attentionRelative logits, no RoPERelative logits, no RoPESame, with L2-clipped queries, keys and relative head
Attention outputOutput projectionOutput projectionSigmoid gate × attention sink, per head, then the projection
Residual pathPre-norm residualPre-norm residualAttention residuals: 8 blocks of 6 layers; each sublayer reads a learned mix of earlier blocks
Short convolutionsWidth 4, static tapsWidth 4, static tapsSame; input-dependent K/V taps on full-attention layers
MoE256 experts, top-6, 2 shared; first 2 layers dense256 experts, top-6, 2 shared; first 2 layers dense384 experts, top-8, no shared; every layer; capped SwiGLU
InputsText, image, audioText, image, audioText and image (new ViT encoder)
Speculative draft8 built-in MTP layers8 built-in MTP layersSeparate 5-layer DSPARK draft
CheckpointBF16, with NVFP4 and MXFP4 variantsBF16, with an NVFP4 variantOne native checkpoint: NVFP4 experts in layers 0–39, MXFP8 in 40–47, the rest BF16

Two of these changes shape how Inkling 2 Small is served. With about 19B active parameters and an MoE in every layer, single-user decode is bound by kernel launches and dependency waits rather than math. And the attention-residual depth mix runs twice per layer, so it has to be cheap. The rest carries over from Inkling (see our Inkling Day-0 post).

Inkling 2 Small's 48 layers as 8 attention-residual blocks of five sliding-window layers and one full-attention layer, with NVFP4 experts in layers 0–39 and MXFP8 in 40–47, and the eight sublayers inside every layer, new or changed ones highlighted

Figure 1. Inkling 2 Small’s 48 layers form 8 attention-residual blocks of five sliding-window layers and one full-attention layer. Bottom: the sublayers of every layer, with what’s new in Inkling 2 Small in blue.

Serving Inkling 2 Small on the TokenSpeed stack ​

Inkling 2 Small's model code follows TML's reference implementation and is vendor-neutral, and images for the new ViT encoder are preprocessed in TokenSpeed's Rust gateway, matching TML's processor byte for byte. Most kernels are portable Triton shared by both vendors, with vendor-specific kernels only where they matter most, such as the expert GEMMs, attention and collectives.

On NVIDIA Blackwell, a speculative round is a long chain of short kernels, so we worked on both the math and the gaps between kernels: expert GEMMs run directly on block-scaled tensor cores, kernels overlap under PDL with side work on side streams, the whole round replays as one CUDA graph, and relative attention in the full-attention layers runs on FlashAttention-4.

On AMD Instinct MI350X, we serve the checkpoint exactly as TML ships it, with Gluon kernels for the expert and projection GEMMs.

KV cache layout ​

Inkling 2 Small reuses the flat KV cache recipe we built for Inkling, with no new state types: full-attention history in 128-token pages, five sliding-window groups that keep only the last 1,024 tokens, and convolution state per request. The attention-residual mix and the relative logits are recomputed in every forward pass, and the DSPARK draft simply adds five ordinary attention layers to the full-history group.

Inkling 2 Small's per-rank cache at TP4: full-attention history in 128-token pages that grow with the context, next to fixed-size sliding windows, convolution state and short-conv ring per request

Figure 2. Inkling 2 Small’s per-rank cache at TP4. Only the full-attention history grows with the context; everything else is a fixed amount per request.

Structured outputs that respect the message framing ​

Inkling 2 Small frames every message with protocol tokens, so a byte-level JSON grammar could let a protocol token's bytes into a JSON string, where the gateway would read them as framing. TokenSpeed masks the reserved token IDs whenever generation is inside a JSON string, across rollback and the draft. The model can still reason first and then answer with valid JSON. To enable JSON output, see the deployment guide.

End-to-end performance and accuracy ​

NVIDIA B300 on agentic coding sessions ​

We replay AgentX agentic coding sessions on 4× B300 (TP4 + EP4) with and without DSPARK, using the deployment guide's command, for 20 minutes per concurrency point. The sessions come from the 256K-context AgentX traces: recorded coding-agent conversations of about 72 turns each, plus sub-agents, replayed as live multi-turn traffic. Prompts average 94k tokens, 94% of them prefix-cache hits, and replies average 860 tokens. Concurrency counts active sessions, not requests in flight, since sessions pause between model calls. Per-user decode is the median across requests.

Output tokens per second per GPU against P90 per-user decode for Inkling 2 Small on 4× B300 at concurrency 1 to 32, with and without DSPARK; the DSPARK curve sits above the target-only curve, from 368 versus 230 tokens/s per user at concurrency 1 to 314 versus 290 output tokens/s per GPU at concurrency 32

Figure 3. Output throughput per GPU against per-user decode at P90 for Inkling 2 Small on 4× B300, with and without DSPARK, at concurrency 1 to 32. Ninety percent of requests decode at least as fast as the P90 value. Labels give the concurrency; higher is better on both axes.

DSPARK makes per-user decode 81% faster than the target model alone at concurrency 1 (492 versus 272 tokens per second) and 65% faster at concurrency 8 (323 versus 195 tokens per second). At every concurrency from 1 to 32, it also delivers 6–20% more output per GPU.

With DSPARK at temperature 1 and max reasoning effort, Inkling 2 Small on B300 scores 87/90 on AIME26 across three seeds and 93.4% (185/198) on GPQA-Diamond.

Looking forward ​

Next, we are bringing PD disaggregation to Inkling 2 Small, along with more parallel layouts and platforms. Stay tuned.

Acknowledgments ​

We thank Thinking Machines Lab for the partnership, early access to Inkling 2 Small and their reference implementation, and NVIDIA and AMD for their support.

© 2026 LightSeek Foundation. CC BY 4.0.