[Docs] Add an Engram feature page explaining Engram usage in vLLM (#57910)

Signed-off-by: NickLucche <nicolo.lucchesi@mistral.ai>

Nicolò Lucchesi committed Sep 21, 2026 at 19:15 UTC fba33e39cb74c7c31cc648ae530a85e0c6636f92
1 file changed +148
docs/features/engram.md new
+148
@@ -0,0 +1,148 @@
1 +# Engram: conditional memory via n-gram lookups
2 +
3 +Engram is a *conditional memory* module attached to specific layers of a
4 +transformer backbone. At each position, the preceding few tokens are hashed
5 +into large static embedding tables, and the retrieved rows are fused into the
6 +hidden state, gated by how well they match it. Where Mixture-of-Experts scales
7 +capacity through conditional computation, Engram scales it through conditional
8 +memory: parameters that are never computed over, only looked up, so capacity
9 +grows at O(1) per-token cost. The mechanism and its design rationale are
10 +described in [Conditional Memory via Scalable Lookup: A New Axis of Sparsity
11 +for Large Language Models](https://arxiv.org/abs/2601.07372).
12 +
13 +vLLM enables Engram automatically whenever the checkpoint declares Engram
14 +layers, so basic serving needs no extra flags. This page explains what Engram
15 +does and how to control its memory footprint and multi-GPU topology.
16 +
17 +## Supported models
18 +
19 +Engram layers are declared by the checkpoint, not chosen at serve time:
20 +
21 +| Architecture | HF config field | Notes |
22 +| --- | --- | --- |
23 +| `DeepseekV41ForCausalLM` | `engram_layer_ids` | e.g. `deepseek-ai/DeepSeek-V4.1-Flash` |
24 +| `Qwen4ExpForCausalLM` / `Qwen4ExpForConditionalGeneration` | `ple_layer_ids` | same mechanism, called PLE |
25 +
26 +Passing `--engram-config` for a model without n-gram embedding layers fails at
27 +startup, as does running on a non-CUDA-alike platform.
28 +
29 +## How it works
30 +
31 +Engram processes each position in two phases: *retrieval* and *fusion*.
32 +
33 +**Retrieval** maps the local token context to static table rows:
34 +
35 +1. **Tokenizer compression.** At startup, vLLM builds a many-to-one map from
36 + the tokenizer that collapses tokens which normalize alike (NFKC, accent
37 + stripping, lowercasing, whitespace collapsing), so `" The"`, `"the"` and
38 + `"THE"` hash identically. This concentrates semantic density into a much
39 + smaller id space; its size must match `engram_compressed_vocab_size` from
40 + the checkpoint, or startup fails — every hash multiplier derives from it.
41 +2. **Multi-head hashing.** For each n-gram order `n` (up to
42 + `engram_max_ngram_size - 1`), several hash heads each apply an independent
43 + multiplicative-XOR hash over the compressed suffix n-gram. Every (n-gram
44 + order, head) pair indexes its own prime-sized bucket range in the layer's
45 + table — disjoint across pairs, so collisions cannot collide twice — and
46 + the retrieved rows are concatenated into one memory vector per position.
47 +
48 +**Fusion** turns the retrieved rows into a context-aware contribution to the
49 +hidden state. The rows are context-independent priors and may be noisy (hash
50 +collisions, polysemy), so they are gated: a `wkv` projection produces one key
51 +per hyper-connection branch plus a shared value, and each branch computes a
52 +sigmoid gate over the normalized dot product between its hidden state —
53 +which has already aggregated global context through preceding attention —
54 +and its key. If the retrieved memory contradicts the current context, the
55 +gate tends toward zero and suppresses it. The gated value is added
56 +residually into the branch's stream (`hidden + gate * value`); positions that
57 +take no part in an n-gram (e.g. image spans) are masked so they pass through
58 +untouched.
59 +
60 +Engram sits only on the layers listed in the checkpoint. Placement is a
61 +deliberate hardware-algorithm trade-off: early enough that the backbone is
62 +relieved from reconstructing static patterns in its first layers, deep enough
63 +that vLLM can hide table lookups behind the compute of the preceding layers
64 +(see below).
65 +
66 +In vLLM, hashing, lookup, and gating run as fused Triton kernels over FP8
67 +rows with ue8m0 block scales. The layer layout — table sizes, n-gram size,
68 +head count — is fixed by the checkpoint and is not user-configurable. Only the
69 +storage and sharding described below are configurable, via
70 +`--engram-config`, which takes a JSON object and can also be set field by
71 +field as `--engram-config.<field>`
72 +([CLI reference](../cli/serve.md#-engram-config)).
73 +
74 +## CPU offload
75 +
76 +Engram tables dwarf typical embedding weights: [DeepSeek-V4.1-Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash)
77 +carries two Engram layers of roughly 384M table rows each, with 256-byte FP8
78 +entries plus their ue8m0 block scales — about 200 GB of table weights alone.
79 +Because lookups are deterministic — the indices are known from the token ids
80 +alone, before the forward pass — the tables need not sit in GPU memory at
81 +all. By default vLLM stores them in **pinned host memory** and serves lookups
82 +directly from the Triton kernel through unified virtual addressing (UVA),
83 +prefetching on a side CUDA stream so transfers overlap with the compute of
84 +preceding layers. The freed GPU memory goes to the KV cache.
85 +
86 +`cpu_offload` defaults to `true` (on): it follows the
87 +`VLLM_PLE_CPU_OFFLOAD` environment variable, which also defaults to `true`.
88 +An explicit `--engram-config` value takes precedence over the environment
89 +variable.
90 +
91 +To keep the tables resident on GPU instead (e.g. when host memory is
92 +scarce):
93 +
94 +```bash
95 +vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
96 + --engram-config.cpu_offload false
97 +```
98 +
99 +or equivalently `VLLM_PLE_CPU_OFFLOAD=0`. CPU offload requires a GPU with UVA
100 +support; vLLM fails fast when it is unavailable.
101 +
102 +## Data-parallel topologies (DeepSeek V4.1)
103 +
104 +By default (`embedding_across_dp: false`), each DP replica keeps its own
105 +TP-sharded copy of the tables — no cross-replica communication, but one host
106 +copy per replica.
107 +
108 +With `embedding_across_dp: true`, the hash heads are sharded across all
109 +TP × DP ranks into a single table copy. Each step gathers the hash ids of
110 +every co-located DP replica, each rank looks up the heads it owns, and the
111 +rows are exchanged back. This trades per-step DP collectives for a much
112 +smaller table footprint:
113 +
114 +```bash
115 +vllm serve deepseek-ai/DeepSeek-V4.1-Flash \
116 + --tensor-parallel-size 2 --data-parallel-size 4 \
117 + --engram-config '{"embedding_across_dp": true}'
118 +```
119 +
120 +`embedding_across_dp` is not supported with elastic expert parallelism yet.
121 +Qwen4Exp PLE tables are ETP-sharded instead and honor `cpu_offload` only.
122 +
123 +## Sharing host tables across DP replicas
124 +
125 +When the tables are CPU-offloaded and DP replicas are co-located on one node,
126 +`dp_shared_memory` stores **one copy of each TP shard in `/dev/shm`**, shared
127 +by all co-located replicas through `cudaHostRegister`. Each replica then
128 +prefetches only its own tokens — no per-step Engram DP collectives — and host
129 +memory drops from one table copy per replica to one per node.
130 +
131 +`dp_shared_memory` defaults to enabled whenever the other settings allow it,
132 +and falls back to per-replica (or DP-sharded) tables with a warning when:
133 +
134 +- the DP replicas are not co-located on a single node,
135 +- `/dev/shm` cannot hold the full tables — in containers, raise the limit
136 + with `--shm-size` or `--ipc=host`,
137 +- expert parallelism is elastic, which is unsupported.
138 +
139 +Requirements: `cpu_offload` enabled, `--data-parallel-size > 1`, and a shared
140 +IPC namespace across the co-located replicas.
141 +
142 +## Limitations
143 +
144 +- CUDA-alike platforms only.
145 +- DeepSeek V4.1 Engram does not support DBO or microbatching; disable
146 + `--enable-dbo` and set `--ubatch-size 0`.
147 +- `dp_shared_memory` requires `cpu_offload`, `data_parallel_size > 1`, and is
148 + unsupported with elastic expert parallelism.