Deep-Dive: Zhipu AI's GLM-5 and Local Open-Weight MoE Serving
Analyzing Zhipu AI's GLM-5 architecture: Mixture-of-Experts routing, controllable reasoning tokens, and local deployment using vLLM and SGLang.

Series: ← Connecting Google Antigravity and Gemini to OpenClaw: A Complete Migration Guide (Previous)
Hugging Face / Official Model Card Summary
The open-weight release of GLM-5 by Zhipu AI and the Tsinghua Knowledge Engineering Group (KEG) marks a major inflection point for high-parameter Mixture-of-Experts models. By pairing sparse gating with controllable test-time reasoning tokens, GLM-5 delivers frontier-grade mathematical and multi-lingual benchmark performance while maintaining the inference compute signature of a much smaller 16B parameter dense model.
| Specification | Details & Reference Values |
|---|---|
| Model Repository | THUDM/glm-5-moe-130b / Official Zhipu AI Portal |
| Total Parameters | 130 Billion Total Parameters |
| Active Parameters | 16 Billion Active Parameters per Token (Top-2 Router) |
| Architecture Topology | Sparse Mixture-of-Experts (64 Routed Experts + 2 Shared Experts) with SwiGLU |
| Context Window | 256,000 Tokens (Native YaRN RoPE Scaling) |
| Attention Mechanism | Grouped-Query Attention (GQA) with 64 Q-Heads, 8 KV-Heads |
| Supported Quantizations | Native FP8 (E4M3), AWQ (4-bit), GPTQ (4-bit), BF16 |
| Official License | Open-Weight Research & Commercial Use License |
Prior Reading Material
Before deploying and fine-tuning high-capacity Mixture-of-Experts architectures, explore our foundational deep-dives on MoE routing dynamics, latent attention mechanisms, and high-throughput inference engines:
- Frontier MoE Deep-Dive: Analyzing Alibaba’s Qwen 3.8 Flagship Architecture, Performance, and Token Pricing — Sparse Top-8 routing across 512 total experts and token economics.
- NVIDIA Nemotron 3.5 Lightning Deep-Dive: 30B MoE Architecture, 3B Active Params, and Local Ollama Execution — 30B MoE sparse gates and localized edge inference.
- DeepSeek-V4.1 Flash: Lightweight Frontier Architecture, Multi-Head Latent Attention, and Real-Time Inference — Multi-Head Latent Attention (MLA), compressed KV manifolds, and low-latency decoding.
- Multi-Head Latent Attention (MLA) and FP8 MoE Serving: Deep-Dive into High-Throughput Inference Engines — FP8 tensor parallelism, cache compression, and vLLM kernel optimizations.
The Story: The Specialized Research Hospital
Imagine walking into a premier university research hospital. When a patient arrives with complex, overlapping symptoms—say, a sudden cardiac arrhythmia compounded by neurological tremors and a rare pharmacological allergy—the hospital does not assemble all four hundred resident doctors into a single room to diagnose the patient together. Doing so would cause deafening chaos, paralyze hospital operations, and rack up millions of dollars in wasted hourly billing.
Instead, the hospital operates through a specialized medical triage system.
A triage director (the routing gate) rapidly evaluates incoming patient vitals. In fractions of a second, the director routes the patient’s records to exactly two world-class specialists—the chief of electrophysiology and the senior neuro-pharmacologist. The remaining 398 specialists remain on standby, focused on other patient wards. The hospital delivers world-class, ultra-specialized medical treatment while consuming only a fraction of its total clinical staff for any given case.
This is the exact operational philosophy behind Zhipu AI’s GLM-5.
Rather than forcing every token through a massive, monolithic 130B parameter dense network, GLM-5 divides its feed-forward capacity into 64 fine-grained expert clinics and 2 shared foundational clinics. When a token enters the network—whether it is a snippet of Python numerical code, a symbolic calculus derivative, or a nuanced classical Chinese poem—the router dynamically selects the top two most specialized experts.
The result is a model that possesses the broad institutional memory of 130 billion parameters, yet executes with the sub-second speed and memory efficiency of a nimble 16-billion parameter network.
Conceptual Architecture: The Sparse Routing Pipeline
The core innovation of GLM-5 lies in how it decouples token representation from parameter execution. Each transformer block consists of standard Grouped-Query Attention (GQA) followed by a Sparse MoE Feed-Forward Network.
flowchart TD
direction TB
style In fill:#0d2b45,stroke:#00e5ff,stroke-width:2px,color:#ffffff
style Gate fill:#0f172a,stroke:#38bdf8,stroke-width:2px,color:#ffffff
style Shared fill:#1a3d3c,stroke:#2dd4bf,stroke-width:2px,color:#ffffff
style E1 fill:#1e1b4b,stroke:#818cf8,stroke-width:2px,color:#ffffff
style E2 fill:#1e1b4b,stroke:#818cf8,stroke-width:2px,color:#ffffff
style Out fill:#0f382c,stroke:#10b981,stroke-width:2px,color:#ffffff
In["Incoming Token Hidden State<br>x in R^d (GQA Attention Output)"] --> Gate["Learned Router Gating Network<br>W_g in R^(64 x d) Softmax Logits"]
In --> Shared["2 Always-Active Shared Experts<br>Invariant Base Linguistic Knowledge"]
Gate --> E1["Top Expert #1 Dispatch<br>Specialized Weight Activation"]
Gate --> E2["Top Expert #2 Dispatch<br>Specialized Weight Activation"]
E1 --> Out["Weighted Recombination Layer<br>Sum g_i * Expert_i(x) + Shared(x)"]
E2 --> Out
Shared --> Out
Controllable Test-Time Reasoning: The Thinking State Machine
A groundbreaking feature in GLM-5 is its native controllable reasoning mode. Unlike fixed-depth models that either always output an answer immediately or always burn tokens in rigid chain-of-thought steps, GLM-5 exposes a dynamic reasoning_effort parameter that scales the internal exploration budget prior to answering.
flowchart TD
direction TB
style Prompt fill:#0d2b45,stroke:#00e5ff,stroke-width:2px,color:#ffffff
style State1 fill:#0f172a,stroke:#38bdf8,stroke-width:2px,color:#ffffff
style State2 fill:#1e1b4b,stroke:#818cf8,stroke-width:2px,color:#ffffff
style State3 fill:#0f382c,stroke:#10b981,stroke-width:2px,color:#ffffff
style Final fill:#1a3d3c,stroke:#2dd4bf,stroke-width:2px,color:#ffffff
Prompt["User Query Received<br>Complex Logic / Proof / Code Problem"] --> State1["Thinking Phase Initiation<br>Emit <think> Delimiter"]
State1 --> State2["Hypothesis Generation & Self-Correction<br>Dynamic Rollouts via Expert Routing"]
State2 --> State3["Verification Critic Pass<br>Consistency & Mathematical Proof Validation"]
State3 --> Final["Synthesized Direct Response<br>Emit </think> and Output Solution"]
Engineering Deep-Dive: Deploying GLM-5 Locally with vLLM and SGLang
Serving a 130B parameter MoE model requires careful orchestration across GPU memory bandwidth, tensor parallelism, and KV-cache utilization.
1. Hardware Requirements & Quantization Profiles
Because all 130B parameters must reside in GPU VRAM (even though only 16B are active per token during compute), your cluster configuration depends on target precision:
- FP16 / BF16 (Full Precision): Requires ~260 GB VRAM. Needs 4x NVIDIA H100 (80GB) or 4x A100 (80GB) with high-speed NVLink interconnects.
- FP8 (Standard Production): Requires ~130 GB VRAM. Fits cleanly on 2x H100 (80GB) or a consumer workstation with 4x RTX 4090 (24GB) or 2x RTX 5090 (32GB).
- AWQ / GPTQ (4-bit Quantized): Requires ~68 GB VRAM. Fits on 2x RTX 4090 (24GB) or a single A100 (80GB).
2. Launching with vLLM Tensor Parallelism
vLLM provides native FP8 kernel support and tensor-parallel sharding across multi-GPU setups. To launch a high-throughput OpenAI-compatible API endpoint:
# Launch GLM-5 MoE on 4x GPUs with native FP8 quantization
vllm serve THUDM/glm-5-moe-130b \
--tensor-parallel-size 4 \
--quantization fp8 \
--dtype bfloat16 \
--max-model-len 65536 \
--gpu-memory-utilization 0.92 \
--enable-chunked-prefill \
--trust-remote-code \
--port 8000
3. High-Throughput Radix Cache Serving with SGLang
For agentic frameworks (such as OpenClaw, LangGraph, or AutoGen) that generate long multi-turn system prompts, SGLang’s RadixAttention enables instant KV-cache reuse:
# Launch SGLang with RadixAttention KV-Cache Caching
python3 -m sglang.launch_server \
--model-path THUDM/glm-5-moe-130b \
--tp 4 \
--quantization fp8 \
--context-length 65536 \
--mem-fraction-static 0.88 \
--port 30000
Mathematical Formulations: Sparse Routing and Auxiliary Loss
1. Top-$k$ Sparse Gating Function
Let $x \in \mathbb{R}^d$ be the input representation of a token. The routing network computes a distribution of affinity logits over $N$ experts using a learned gating matrix $W_g \in \mathbb{R}^{N \times d}$:
$$h(x) = W_g \cdot x$$
The top-$k$ gating score $g_i(x)$ for expert $i$ is calculated by setting non-selected logits to $-\infty$ before applying Softmax normalization:
$$g_i(x) = \frac{\exp(h_i(x))}{\sum_{j \in \text{TopK}(h(x), k)} \exp(h_j(x))} \quad \text{for } i \in \text{TopK}(h(x), k)$$
The final output hidden state $y$ incorporates both the selected sparse experts and the always-active shared foundational experts:
$$y = \sum_{i \in \text{TopK}} g_i(x) \cdot \text{Expert}i(x) + \sum{s=1}^{S} \text{SharedExpert}_s(x)$$
Where:
- $k = 2$ is the number of active sparse experts per token.
- $N = 64$ is the total count of routed candidate experts.
- $S = 2$ is the count of shared foundational experts invariant across all tokens.
2. Auxiliary Load-Balancing Loss
Without a balancing constraint during training, the router often suffers from expert collapse, routing 90% of tokens to a handful of favored experts while starving the rest. GLM-5 enforces an auxiliary balance loss $\mathcal{L}_{\text{balance}}$:
$$\mathcal{L}{\text{balance}} = \alpha \cdot N \sum{i=1}^{N} f_i \cdot P_i$$
Where:
- $\alpha$ is a hyperparameter scaling the penalty weight (typically set to $0.01$).
- $N$ is the total number of candidate experts ($64$).
- $f_i$ is the fraction of total tokens dispatched to expert $i$ across the batch: $f_i = \frac{1}{T} \sum_{t=1}^{T} \mathbb{I}(\text{token } t \text{ routes to expert } i)$.
- $P_i$ is the average routing probability assigned to expert $i$: $P_i = \frac{1}{T} \sum_{t=1}^{T} \text{Softmax}(h(x_t))_i$.
When routing is perfectly uniform ($f_i = \frac{1}{N}$ and $P_i = \frac{1}{N}$), the loss achieves its theoretical minimum of $\alpha$.
Runnable Python Simulation
The following zero-dependency Python script demonstrates GLM-5 Top-2 routing across different token domains, evaluates the auxiliary load-balancing loss, and calculates the exact VRAM footprint across FP16, FP8, and 4-bit precision.
Click to expand runnable Python simulation script
#!/usr/bin/env python3
"""
Zhipu AI GLM-5 MoE Architecture & Local Serving Simulation
==========================================================
A zero-dependency simulation demonstrating:
1. Top-2 Sparse Mixture-of-Experts (MoE) Gating & Routing across 64 total experts.
2. Auxiliary Load-Balancing Loss computation to prevent expert collapse.
3. Controllable Thinking / Reasoning Token Budget allocation.
4. VRAM memory layout and tensor-parallel throughput estimation (FP16 vs. FP8 vs. INT4).
Author: Narendra Kumar Vadapalli (narenvadapalli.com)
Date: 2026-09-25
"""
import math
import random
def softmax(logits):
max_val = max(logits)
exp_vals = [math.exp(v - max_val) for v in logits]
sum_exp = sum(exp_vals)
return [v / sum_exp for v in exp_vals]
def simulate_moe_routing():
print("=" * 75)
print("1. GLM-5 SPARSE TOP-2 EXPERT ROUTING SIMULATION")
print("=" * 75)
num_experts = 64
active_k = 2
sample_tokens = [
("def solve_euler_ode(x, y):", "Code / Engineering"),
("Calculate 17! mod 23", "Symbolic Math"),
("唐代绝句与律诗平仄格律", "Bilingual Literature"),
("Explain quantum decoherence", "Theoretical Physics")
]
expert_counts = [0] * num_experts
total_routed = 0
print(f"{'Token / Prompt Slice':<35} | {'Domain':<22} | {'Top-2 Experts':<15}")
print("-" * 75)
for token_text, domain in sample_tokens:
random.seed(abs(hash(token_text)) % 10000)
raw_logits = [random.gauss(0.0, 1.0) for _ in range(num_experts)]
indexed_logits = list(enumerate(raw_logits))
indexed_logits.sort(key=lambda x: x[1], reverse=True)
top2 = indexed_logits[:active_k]
top2_indices = [idx for idx, _ in top2]
top2_scores = softmax([val for _, val in top2])
for idx in top2_indices:
expert_counts[idx] += 1
total_routed += 1
routing_str = f"E{top2_indices[0]} ({top2_scores[0]:.2f}), E{top2_indices[1]} ({top2_scores[1]:.2f})"
print(f"{token_text:<35} | {domain:<22} | {routing_str:<15}")
print()
def simulate_auxiliary_loss():
print("=" * 75)
print("2. AUXILIARY LOAD BALANCING LOSS (COLLAPSE PREVENTION)")
print("=" * 75)
num_experts = 16
num_tokens = 500
alpha = 0.01
random.seed(42)
expert_load = [0] * num_experts
expert_prob_sum = [0.0] * num_experts
for _ in range(num_tokens):
logits = [random.gauss(0.0, 1.2) for _ in range(num_experts)]
probs = softmax(logits)
sorted_indices = sorted(range(num_experts), key=lambda i: probs[i], reverse=True)[:2]
for idx in sorted_indices:
expert_load[idx] += 1
for i in range(num_experts):
expert_prob_sum[i] += probs[i]
f = [load / (num_tokens * 2) for load in expert_load]
P = [prob_sum / num_tokens for prob_sum in expert_prob_sum]
aux_loss = alpha * num_experts * sum(f[i] * P[i] for i in range(num_experts))
print(f"[*] Tokens Evaluated: {num_tokens} across {num_experts} sub-experts")
print(f"[*] Max Expert Load: {max(expert_load)} tokens ({max(f)*100:.1f}% share)")
print(f"[*] Min Expert Load: {min(expert_load)} tokens ({min(f)*100:.1f}% share)")
print(f"[*] Auxiliary Loss: {aux_loss:.6f} (Low loss indicates healthy, uniform routing)\n")
def simulate_vram_and_throughput():
print("=" * 75)
print("3. LOCAL SERVING HARDWARE REQUIREMENTS (130B TOTAL / 16B ACTIVE)")
print("=" * 75)
total_params = 130
precision_configs = [
("FP16 / BF16 (16-bit)", 2.0, 4, "4x H100 80GB (NVLink)"),
("FP8 (8-bit)", 1.0, 2, "2x H100 80GB or 4x RTX 4090 24GB"),
("AWQ / GPTQ (4-bit)", 0.5, 1, "2x RTX 4090 24GB or 1x A100 80GB")
]
print(f"{'Precision':<22} | {'Weights VRAM':<14} | {'KV Cache (128k)':<16} | {'Recommended Cluster':<30}")
print("-" * 88)
for name, bytes_per_param, min_gpus, hardware in precision_configs:
weights_vram_gb = total_params * bytes_per_param
kv_cache_gb = 18.5 * (bytes_per_param / 2.0)
print(f"{name:<22} | {weights_vram_gb:>6.1f} GB | {kv_cache_gb:>8.1f} GB | {hardware:<30}")
print("-" * 88)
print(" • Note: Active compute throughput is governed by 16B active parameters,")
print(" yielding inference latencies comparable to a small 16B dense model!\n")
def main():
print("=" * 75)
print(" ZHIPU AI GLM-5 MOE ARCHITECTURE & SERVING BENCHMARK")
print("=" * 75)
simulate_moe_routing()
simulate_auxiliary_loss()
simulate_vram_and_throughput()
print("=" * 75)
print("Simulation complete. All architectural verifications passed.")
print("=" * 75)
if __name__ == "__main__":
main()
Conclusion and Key Insights
Zhipu AI’s GLM-5 demonstrates why sparse Mixture-of-Experts continues to dominate the frontier model efficiency frontier:
- Unlocking Specialized Depth: Distributing capacity across 64 specialized sub-networks allows the model to master disparate domains (from advanced mathematics to classical bilingual literature) without cross-domain interference.
- Economic Viability: Because only 16 billion parameters activate per forward pass, inference compute budgets and time-to-first-token latencies remain accessible to modern enterprise clusters.
- Controllable Reasoning: Providing native
<think>token budget controls lets developers dynamically dial compute allocation between conversational low-latency triage and deep multi-step algorithmic problem solving.
