LLM·

DeepSeek-V4.1-Flash runs prefill on 8B parameters and decode on 16B — Causal Encoder-Decoder — What does it mean?

The news. A September 17, 2026 report introduces DeepSeek-V4.1-Flash, a 552B-parameter multimodal mixture-of-experts model with a one-million-token context window. It activates 16B parameters per decode token but only 8B during prefill — a split the report calls the Causal Encoder-Decoder. Alongside it, Compressed Sparse Attention 2 reuses KV state across layers, FP4 (four-bit floating point) compresses cached values, and SWA Bounded Replay cuts the persistent KV footprint to about one eighth of DeepSeek-V4-Flash. The global KV cache that must stay in HBM is 890 bytes per token, about a quarter of the previous model's. Read the report →

Picture the prep shift. A crate of vegetables comes in and the recipe gets applied to the whole crate at once — so if you add one step to that recipe, you have just added it a million times, once per item in the crate. Prefill is the prep shift: the model is applied to every prompt token in one batched pass, so one extra billion active parameters is arithmetic you pay for once per token in the prompt. That is why prefill typically sits on the compute-bound side of the roofline: batching the prompt's tokens together lets each weight be reused across many tokens, so the arithmetic units rather than the memory bus become the limit.

Now the service shift. Plates go out one at a time, and the recipe is applied once per plate. Decode is the service shift: one token per step, so the same extra billion parameters costs you once, not a million times. Decode's problem is a different one — between steps the GPU is mostly waiting on HBM to deliver weights and the growing KV cache, not waiting on arithmetic.

Most models hand both shifts the same recipe. A dense model has one parameter count by construction; a conventional mixture-of-experts routes to the same number of experts whichever phase it is in. The Causal Encoder-Decoder breaks that assumption: it gives the input-heavy path a smaller active-parameter path than the one-token-at-a-time path. So the cheapest place to spend active parameters is the phase where they are multiplied by the fewest tokens — which here is decode, the phase most people assume they have to economize on.

Prefill vs Decode on the Roofline

Decode~1 FLOP/bytePrefill~100 FLOP/byte← memory-boundcompute-bound →

Same GPU, fundamentally different bottlenecks

ApproachWhat gets splitDo the phases activate different parameters?
One model, one poolnothing — prefill and decode interleave in the same batchNo
Chunked prefillthe prompt, into slices that share a batch with decodeNo
Prefill/decode disaggregationthe machines — one pool prefills, another decodesNo
Causal Encoder-Decoderthe parameters — a smaller active path for prefillYes

Put numbers on it. Hold one request fixed: a 1,000,000-token prompt and 1,000 generated tokens (the output length is illustrative — the report does not fix one). A forward pass costs roughly 2 FLOPs (floating-point operations) per active parameter per token, the standard rule of thumb. It counts only the parameter-dependent arithmetic — it leaves out attention over the context, cache traffic and everything else a request pays for, which at a million tokens is substantial — so treat these as one term of the bill, not the whole bill. Prefill touches 8B active parameters across all 1,000,000 prompt tokens: about 2 × 8 × 109 × 1061.6 × 1016 FLOPs. Decode touches 16B across 1,000 output tokens: about 2 × 16 × 109 × 1033.2 × 1013 FLOPs. On that term prefill does roughly 500× more arithmetic than decode, even though decode is the phase running the bigger path. Now give both phases a uniform 16B budget, changing nothing else: prefill's parameter-dependent work doubles to ≈ 3.2 × 1016 FLOPs while decode's stays exactly where it was. In this calculation, all of the extra parameter-dependent arithmetic lands on prefill, the phase that was already compute-bound. The KV side of the same request is where the other numbers live: at 890 bytes per token, a full 1M-token context holds about 890 MB of global KV in HBM before you serve a second user.

How much this wins depends on the shape of the request. Take a 200-token prompt with 1,000 output tokens (illustrative): shrinking the prefill path still cuts parameter-dependent prefill work, but that work is now a far smaller share of the request, so the saving shrinks with it. The arithmetic favors this design most when prompts are long — which is the regime a one-million-token model is built for. It also looks complementary to the machine-level split rather than a replacement for it, since the two divide different things: one divides the worker pools, the other divides the parameters. Disaggregation splits the machines; the Causal Encoder-Decoder splits the active-parameter path. The report stops there: it does not describe how the two paths share weights, how a request crosses between them, or how the KV cache is handed over.

Goes deeper in: LLM Serving → Prefill/Decode Disaggregation → Full Disaggregation

Related explainers

Frequently Asked Questions

Check what you knowMap your AI & GPU knowledge across every track — free, role-based