78 transformer blocks › 75 MoE blocks › Mixture of experts › Shared expert
Down projection
×learnedself.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
Map 2,048 gated features back to 6,144 features.
- in
- [B batch, T positions, 2048 shared d_ff]
- out
- [B batch, T positions, 6144 d]
- parameters
- 12,582,912 · × 75 MoE blocks = 943,718,400
Parameters
12,582,912 parameters per instance.
| Component | Calculation | Parameters |
|---|---|---|
| Weight matrix | 12,582,912 | |
| Per-instance total | 12,582,912 | |
This projection has no bias parameter.
The reference module holds the weight output by input, [out, in].
Across 75 independent MoE blocks: parameters.
Derived from the configured matrix dimensions; the model total matches the checkpoint’s tensors.
Codemodeling_glm_moe_dsa.py 465–478 · config.json 5–7
class GlmMoeDsaMLP(nn.Module):
def __init__(self, config, intermediate_size=None):
super().__init__()
self.config = config
self.hidden_size = config.hidden_size
self.intermediate_size = config.intermediate_size if intermediate_size is None else intermediate_size
self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False)
self.act_fn = ACT2FN[config.hidden_act]
def forward(self, x):
down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
return down_proj "attention_bias": false,
"attention_dropout": 0.0,
"dtype": "bfloat16",Sources2
Direct evidence
The dense feed-forward network is a SwiGLU MLP, down(silu(gate x) ⊙ up x), computed in the input’s precision.
mlp · huggingface/transformers / modeling_glm_moe_dsa.py
Pinned revision 5e4d6304de55 ↗ · lines 465–478
Read code excerpt
class GlmMoeDsaMLP(nn.Module):
def __init__(self, config, intermediate_size=None):
super().__init__()
self.config = config
self.hidden_size = config.hidden_size
self.intermediate_size = config.intermediate_size if intermediate_size is None else intermediate_size
self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False)
self.act_fn = ACT2FN[config.hidden_act]
def forward(self, x):
down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
return down_projDirect evidence
Attention projections have no bias (attention_bias is false) and the checkpoint stores its weights in bfloat16.
linear · zai-org/GLM-5 / config.json
Pinned revision c183ef8c61fa ↗ · lines 5–7
Read code excerpt
"attention_bias": false,
"attention_dropout": 0.0,
"dtype": "bfloat16",