40 layers › Engram
Gate per stream
×learneddot … gate = … · 356–362
How well each stream matches its key, as a number between 0 and 1.
- in
- [B batch, T positions, 4 streams, 5120 d] [B batch, T positions, 4 streams, 5120 d]
- out
- [B batch, T positions, 4 streams]
- parameters
- 40,960
The weight is the product of two learned 4 × 5,120 tensors, q_weight and k_weight. At an image position the gate is zero (model.py 363–364).
Parameters
40,960 parameters owned by this component
| Component | Calculation | Parameters |
|---|---|---|
| learned vector | 20,480 | |
| learned vector | 20,480 | |
| Per-instance total | 40,960 | |
Derived from the pinned reference implementation and configuration; equal to the element counts of the checkpoint’s own tensors on the text path. The quantisation scales, the vision encoder and the DSpark blocks are not counted.
Codemodel.py 328–365
class Engram(nn.Module):
"""Writes an n-gram lookup into the residual stream, gated by how well it matches that stream.
The hash ids fetch `n_hash_cols` rows; `wkv` turns them into one key per hc copy plus a shared
value. The gate is a normalized dot product of stream against key.
"""
def __init__(self, args: ModelArgs, layer_id: int, layout: EngramLayout):
super().__init__()
self.layer_id = layer_id
self.layer_hash_index = layout.layer_ids.index(layer_id)
self.dim = args.dim
self.hc_mult = args.hc_mult
self.clamp_value = 1e-6
self.embed = ParallelEngramEmbedding(layout.num_embeddings[self.layer_hash_index], layout.head_dim)
n_hash_cols = (layout.max_ngram_size - 1) * layout.n_heads
self.wkv = Linear(n_hash_cols * layout.head_dim, args.dim * (args.hc_mult + 1))
self.eps = args.norm_eps
self.q_weight = nn.Parameter(torch.ones(args.hc_mult, args.dim))
self.k_weight = nn.Parameter(torch.ones(args.hc_mult, args.dim))
def forward(self, x: torch.Tensor, hash_ids: torch.Tensor, token_mask: torch.Tensor | None = None) -> torch.Tensor:
"""x: [B, L, hc_mult, dim]; hash_ids: [B, L, n_hash_cols]; token_mask: [B, L], False shuts
the gate so those positions pass through untouched."""
kv = self.wkv(self.embed(hash_ids).flatten(-2))
key, value = kv.split([self.hc_mult * self.dim, self.dim], dim=-1)
key = key.float().unflatten(-1, (self.hc_mult, self.dim))
weight = self.q_weight.float() * self.k_weight.float() # only ever used as a product
h, eps = x.float(), self.eps
# normalized per (token, hc copy) over `dim`, NOT jointly over the copies
rstd = torch.rsqrt(h.square().mean(-1) + eps) * torch.rsqrt(key.square().mean(-1) + eps)
dot = (h * weight * key).sum(-1) * rstd * self.dim**-0.5
# signed sqrt before the sigmoid, matching the training kernel
gate = torch.sigmoid(torch.copysign(dot.abs().clamp_min(self.clamp_value).sqrt(), dot))
if token_mask is not None:
gate = gate.masked_fill(~token_mask.unsqueeze(-1), 0)
return (h + gate.unsqueeze(-1) * value.float().unsqueeze(-2)).to(x.dtype)Sources1
Direct evidence
Engram reads 24 table rows per position, projects them to four keys and one value, gates the value per stream by a normalised dot product of the stream and its key, and adds it to every stream; image positions get none.
engram · deepseek-ai/DeepSeek-V4.1-Flash / inference/model.py
Pinned revision 2cba9e42aa02 ↗ · lines 328–365
Read code excerpt
class Engram(nn.Module):
"""Writes an n-gram lookup into the residual stream, gated by how well it matches that stream.
The hash ids fetch `n_hash_cols` rows; `wkv` turns them into one key per hc copy plus a shared
value. The gate is a normalized dot product of stream against key.
"""
def __init__(self, args: ModelArgs, layer_id: int, layout: EngramLayout):
super().__init__()
self.layer_id = layer_id
self.layer_hash_index = layout.layer_ids.index(layer_id)
self.dim = args.dim
self.hc_mult = args.hc_mult
self.clamp_value = 1e-6
self.embed = ParallelEngramEmbedding(layout.num_embeddings[self.layer_hash_index], layout.head_dim)
n_hash_cols = (layout.max_ngram_size - 1) * layout.n_heads
self.wkv = Linear(n_hash_cols * layout.head_dim, args.dim * (args.hc_mult + 1))
self.eps = args.norm_eps
self.q_weight = nn.Parameter(torch.ones(args.hc_mult, args.dim))
self.k_weight = nn.Parameter(torch.ones(args.hc_mult, args.dim))
def forward(self, x: torch.Tensor, hash_ids: torch.Tensor, token_mask: torch.Tensor | None = None) -> torch.Tensor:
"""x: [B, L, hc_mult, dim]; hash_ids: [B, L, n_hash_cols]; token_mask: [B, L], False shuts
the gate so those positions pass through untouched."""
kv = self.wkv(self.embed(hash_ids).flatten(-2))
key, value = kv.split([self.hc_mult * self.dim, self.dim], dim=-1)
key = key.float().unflatten(-1, (self.hc_mult, self.dim))
weight = self.q_weight.float() * self.k_weight.float() # only ever used as a product
h, eps = x.float(), self.eps
# normalized per (token, hc copy) over `dim`, NOT jointly over the copies
rstd = torch.rsqrt(h.square().mean(-1) + eps) * torch.rsqrt(key.square().mean(-1) + eps)
dot = (h * weight * key).sum(-1) * rstd * self.dim**-0.5
# signed sqrt before the sigmoid, matching the training kernel
gate = torch.sigmoid(torch.copysign(dot.abs().clamp_min(self.clamp_value).sqrt(), dot))
if token_mask is not None:
gate = gate.masked_fill(~token_mask.unsqueeze(-1), 0)
return (h + gate.unsqueeze(-1) * value.float().unsqueeze(-2)).to(x.dtype)