update: 26B-A4B MoE架构说明 - Token ID路由索引bug
CI / build-and-test (push) Has been cancelled

关键特性:
- MoE架构:128专家,每token激活4B参数
- 但需加载全部26B参数到内存(14.5GB)
- 路由器需快速访问所有专家
- Token ID可能被用作路由索引,导致NaN

推测机制:
Token ID → Router索引错误 → Expert选择问题 → 特定位置NaN
这解释了为何NaN位置依赖输入token ID

对比:
26B-Standard(MoE,128 experts,bits=4):0 NaN 
26B-A4B(MoE,128 experts,bits=8):NaN依赖token ⚠️

量化参数可能是关键差异:
- bits=8 vs bits=4
- group_size=64 vs 32

建议:使用26B-Standard代替(完美无NaN)
This commit is contained in:
MarkBase Admin
2026-06-24 02:03:58 +08:00
parent 2a889faf4b
commit a8c58c76d6
+41 -20
View File
@@ -116,9 +116,27 @@ Token 200 → NaN at [200, 201, 209, 210]
--- ---
## 四、权重文件分析 ## 四、MoE架构关键特性
### 4.1 完整性检查 ### 4.1 内存需求说明
**重要特性**:
```
26B-A4B虽然是MoE模型(每个token只激活4B参数)
但需要加载全部26B参数到内存(约14.5GB)
以维持快速的路由和推理速度
基准内存需求量与26B密集模型相近
```
**影响**:
- ✅ 所有128个专家必须常驻内存
- ✅ 路由器需要快速访问所有专家
- ✅ 每个token激活4B参数,但推理需要全量26B
- ⚠️ 增加了路由计算的复杂度
---
### 4.2 权重文件完整性检查
**检查结果**: **检查结果**:
- 总tensors: 1697个 - 总tensors: 1697个
@@ -127,20 +145,7 @@ Token 200 → NaN at [200, 201, 209, 210]
- Router weights: 0 NaN ✅ - Router weights: 0 NaN ✅
- Expert weights: 0 NaN ✅ - Expert weights: 0 NaN ✅
**结论**: 权重文件完全正常,问题在forward pass **结论**: 权重文件完全正常,问题在forward pass的路由或专家计算
---
### 4.2 配置对比
| 参数 | 26B-A4B | 26B-Standard |
|-----|---------|-------------|
| 多模态Tokens | ✅ 有 | ❌ 无 |
| Quantization bits | **8** | **4** |
| Group size | **64** | **32** |
| Forward NaN | **依赖token** | **0** |
**关键差异**: 量化参数不同
--- ---
@@ -215,10 +220,26 @@ Token 200 → NaN at [200, 201, 209, 210]
### 7.2 可能的bug位置 ### 7.2 可能的bug位置
**可能位置**: **可能位置**:
1. Logits计算(LM head 1. **MoE Router路由计算** ⚠️
2. Softmax计算 - 128个专家的路由决策
3. MoE Router输出 - Token ID被错误地用作路由索引
4. Quantization反量化 - 导致特定专家或位置的计算出错
2. **Expert专家计算**
- 激活的专家计算有问题
- 某些专家的输出产生NaN
3. **Logits计算(LM head**
- 最终输出时索引错误
4. **Quantization反量化**
- bits=8 vs bits=4的差异
- group_size=64 vs 32的差异
**MoE特殊性**:
- Token ID → Router → Expert selection → Output
- 如果路由器使用token ID作为索引,可能导致特定位置的NaN
- 这解释了为什么NaN位置依赖输入token ID
--- ---