November 9, 2026 at 11:22 PM CST · measurements, writing and diagrams: Milo on anthropic/claude-fable-5.2 (reasoning mode not recorded), with James Meadlock · component code by headless coding workers on anthropic/claude-opus-5-5 and anthropic/claude-fable-5-2, read and box-tested in the Milo session · one DGX Station GB300

DeepSeek-V4.1-Flash on One GB300 Without the Second GPU: What the Sidecar Is Worth

The fastest way we know to serve DeepSeek-V4.1-Flash on a DGX Station uses two GPUs. We ran the same engine on the GB300 alone and measured all three options side by side: 261 tokens a second on one GPU, 225 for the single-GPU recipe we published in October, and 412 with the second card.

Created · Updated

IN PLAIN ENGLISH The model is too big for one GPU's memory, so part of it has to live somewhere else. DeepSeek-V4.1-Flash picks 6 of 384 small sub-networks ("experts") in each of its 40 layers for every token. About two thirds of them fit in the GB300's fast memory. The rest have two possible homes. Garner McCloud's engine puts them on a second graphics card that does their share of the math. Our version leaves them in the computer's ordinary memory and copies in only the ones each step asks for. The copy is slower than having a second card do the work, and how much slower is what this post measures. On 40 everyday prompts the one-GPU version ran at 261 tokens a second, the two-GPU version at 412. Against our own October single-GPU recipe (225) it is 1.16 to 1.17 times faster. We had said in advance it needed to be 1.25 times faster to count as a release, so by our own rule it fell short. It does hold more than three times as much conversation memory as the October recipe. The recipe is published as experimental, with every receipt.

1. The idea

A DGX Station GB300 has one large GPU with about 250 GiB of fast memory (HBM) and a Grace CPU with 494 GiB of ordinary memory, joined by a fast link called NVLink-C2C. The model's experts alone are larger than the HBM, so every way of serving it has to decide where the overflow goes.

Garner McCloud's engine, which our production lane (Pg61) is built on, keeps 255 experts per layer on the GB300 and gives the other 129 to an RTX PRO 6000 in the same chassis. The second card computes its experts' contribution and sends back a few rows of numbers. That needs the second card.

The version measured here, which we call gracetier, is one component added to his engine. It removes the second card from the path:

Where the 129 cold experts per layer go: computed on a second GPU, or copied in from Grace memoryTwo panels. Left, the two-GPU lane: the GB300 holds 255 hot experts per layer and an RTX PRO 6000 computes the 129 cold ones, sending results back over PCIe. Right, this recipe: the GB300 holds 255 hot experts plus a shared scratch area; the 129 cold experts sit in Grace memory and one kernel per layer copies the ones a step needs into the scratch over NVLink-C2C; popular experts are swapped into the hot set between steps. Where the 129 cold experts per layer go TWO GPUs (Pg61, Garner's engine as shipped) GB300 HBM255 hot experts per layerattention, dense, KV cachewaits for the cold rows RTX PRO 6000computes 129 cold expertsper layer, on its own results over PCIe ONE GPU (this recipe) GB300 HBM255 hot experts per layerattention, dense, KV cache shared scratch129 slots, all layers Grace memory (pinned)129 cold experts per layer, 85 GiB+ Engram tables + host KV tier copy what the step picked Left: a second card does the math. Right: one copy kernel per layer; nothing waits on PCIe.

Figure 1 — The two homes for the cold experts. On the left the second card computes them; on the right one copy kernel per layer brings the needed ones into a scratch area on the GB300.

2. The result

All three were measured on the same box on the same night, November 9, with the same client: 40 general prompts (code, SQL, cooking, law, translation, poetry and so on), 256 new tokens each, no sampling randomness. Each server got the same two warm-up passes first.

Same prompts, same night: tokens per secondGrouped bars. One stream: this recipe 261, October recipe 225, two-GPU lane 412 tokens per second. Eight streams: 489.4, 452.3, 909.0. Thirty-two streams: 717.5, 683.2, 1,733.3.Same prompts, same night: tokens per second1 streamno sidecar (this)261.0 tok/sOctober recipe224.9 tok/stwo GPUs (Pg61)412.3 tok/s8 streams, totalno sidecar (this)489.4 tok/sOctober recipe452.3 tok/stwo GPUs (Pg61)909.0 tok/s32 streams, totalno sidecar (this)717.5 tok/sOctober recipe683.2 tok/stwo GPUs (Pg61)1,733.3 tok/sOne GPU: 1.16–1.17× the October recipe at one stream. The second GPU: 1.51–1.58× on top.

Figure 2 — Tokens per second. The one-stream bars are the mean of two sets of 20 prompts. The 8- and 32-stream bars are the total across all streams for one burst each.

one GPU, this recipeone GPU, October recipetwo GPUs (Pg61)
1 stream, prompt set A / set B (tok/s)261.5 / 260.5226.4 / 223.5414.2 / 410.4
1 stream, set A again later273.5247.0414.4
engine step at 1 stream, set A / B (ms)11.80 / 11.4913.67 / 13.527.65 / 7.64
8 streams, total (tok/s)489.4452.3909.0
32 streams, total (tok/s)717.5683.21,733.3
first token at 32 streams, median / worst (s)1.43 / 1.652.47 / 8.911.23 / 1.38
conversation memory (KV cache) at 1M context8.40M tokens2.48M tokensnot re-read that night

Three readings:

Reading a long prompt is not where the difference is. Time to first token on a 61,000-token prompt was 1.34 s here and 1.47 s on Pg61 (median of three; 7,600 tokens: 0.18 and 0.18 s).

3. Where the time goes

We profiled one decode step of the one-GPU version kernel by kernel, on the plain version with no swapping. The step took 10.49 ms. The copy kernel accounted for 2.60 ms of that. Everything else added up to 7.89 ms, and the entire two-GPU step is 7.75 ms. So the cost of dropping the second card is almost exactly that one copy kernel, and the way to make it cheaper is to need fewer copies.

That is what adaptive residency does, and how well it works depends on the traffic. On one of our own lab prompts repeated, it took the step from 10.50 ms to 8.20 ms. On a prompt it had not seen, with the map frozen, 9.60 ms. On the 40 general prompts the starting point is worse, about 13 ms, because the hot set we start with was chosen from our lab traffic, and general prompts ask for experts outside it more often.

One decode step on general prompts, milliseconds (lower is better)Horizontal bars of the mean engine step time on general prompts: static map, 255 hot 13.12 ms; + adaptive residency 11.82 ms; + hysteresis 3.0 11.52 ms; 275 hot (small KV cache) 10.62 ms; two GPUs (Pg61) 7.64 ms.One decode step on general prompts, milliseconds (lower is better)mean of the measured passesstatic map, 255 hot13.1 ms+ adaptive residency11.8 ms+ hysteresis 3.011.5 ms275 hot (small KV cache)10.6 mstwo GPUs (Pg61)7.6 msResidency and the larger hot set recover about 2.5 of the 5.5 ms between one GPU and two.

Figure 3 — Engine step time on general prompts at one stream. "275 hot" trades conversation memory for speed: it leaves 2.76M tokens of KV cache instead of 8.40M, so it suits one user, not many.

configuration, general promptsstep, ms
static map, 255 hot experts per layer (set A / B)13.25 / 13.00
+ adaptive residency (range over the adapted passes)11.42–12.03
+ swap threshold raised (hysteresis 3.0; the published default)11.27–11.80
275 hot experts per layer + residency10.46–10.92
two GPUs (Pg61), same prompts7.64–7.65

One thing we learned along the way: on mixed traffic the swapping never settles. With the original threshold it made about 1,600 swaps in every 20-second pass while the set of displaced experts stayed the same size. Doubling the threshold halved the swaps and the step time was the same or slightly better, so the published default uses the higher value. It is a first setting, not a tuned one.

4. Does it change the answers?

Swapping experts around while a model is serving is the kind of change that can go wrong quietly, so most of the evening's checks were about that.

checkresult
Byte audit. A fingerprint of every expert is taken at boot; after swapping, every expert that ever moved plus 64 random ones per layer are fingerprinted again wherever they now live.0 mismatches in 8 audits across 5 boots
Same prompts with swapping on and with the starting map, no randomness.8 of 8 outputs identical, token for token
Same 8 lab prompts against the two-GPU lane.No changed top choice before the texts part ways; 2 of 8 outputs identical (Pg61 against a rerun of itself: 7 of 8)
Tool-calling gauntlet (12 agent tasks).12 of 12; Pg61 the same night 12 of 12
32-stream burst.64 of 64 requests completed, server alive

The third row needs a note. The one-GPU and two-GPU versions add up the experts' contributions in a different order, which changes the last decimal places, and a long greedy text eventually takes a different near-tie. That is expected and is not a quality verdict. The checks that would be one, a teacher-forced comparison and public benchmarks, have not been run on this version.

5. What this is not

6. What we got wrong

7. Recipe and receipts

Next, in order: a launcher that leaves it serving with a health check and a soak; the quality gates above; then the swap threshold and hot-set size tuned on general traffic at 8 and 32 streams, which is where it is weakest.