61 transformer blocks › 58 MoE blocks › Mixture of experts › 256 routed experts
Up features
×tensorself.w3(x)
The parallel feature expansion.
- shape
- [B batch, T positions, 2048 expert d_ff]
Sources
Contextual evidence from Up projection
Each routed expert is its own SwiGLU MLP of moe_inter_dim hidden features.
expert · deepseek-ai/DeepSeek-V3.2-Exp / inference/model.py
Pinned revision 87e509a2e5a1 ↗ · lines 730–744
Read code excerpt
self.w1 = Linear(dim, inter_dim)
self.w2 = Linear(inter_dim, dim)
self.w3 = Linear(dim, inter_dim)… lines 733–743 omitted …
return self.w2((F.silu(self.w1(x).float()) * self.w3(x).float()).type_as(x))Contextual evidence from Up projection
Linear layers have no bias unless asked. FP8 weights carry one float32 scale per 128 × 128 block; the scales are quantization metadata and are excluded from parameter counts.
linear · deepseek-ai/DeepSeek-V3.2-Exp / inference/model.py
Pinned revision 87e509a2e5a1 ↗ · lines 15–193
Read code excerpt
block_size = 128… lines 16–178 omitted …
def __init__(self, in_features: int, out_features: int, bias: bool = False, dtype = None):
super().__init__()
self.in_features = in_features
self.out_features = out_features
self.weight = nn.Parameter(torch.empty(out_features, in_features, dtype=dtype or Linear.dtype))
if self.weight.element_size() == 1:
scale_out_features = (out_features + block_size - 1) // block_size
scale_in_features = (in_features + block_size - 1) // block_size
self.weight.scale = self.scale = nn.Parameter(torch.empty(scale_out_features, scale_in_features, dtype=torch.float32))
else:
self.register_parameter("scale", None)
if bias:
self.bias = nn.Parameter(torch.empty(out_features))
else:
self.register_parameter("bias", None)