diff --git a/26B_A4B_NaN_Truth.md b/26B_A4B_NaN_Truth.md index 704fbea..3bc7646 100644 --- a/26B_A4B_NaN_Truth.md +++ b/26B_A4B_NaN_Truth.md @@ -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个 @@ -127,20 +145,7 @@ Token 200 → NaN at [200, 201, 209, 210] - Router weights: 0 NaN ✅ - Expert weights: 0 NaN ✅ -**结论**: 权重文件完全正常,问题在forward pass - ---- - -### 4.2 配置对比 - -| 参数 | 26B-A4B | 26B-Standard | -|-----|---------|-------------| -| 多模态Tokens | ✅ 有 | ❌ 无 | -| Quantization bits | **8** | **4** | -| Group size | **64** | **32** | -| Forward NaN | **依赖token** | **0** | - -**关键差异**: 量化参数不同 +**结论**: 权重文件完全正常,问题在forward pass的路由或专家计算 --- @@ -215,10 +220,26 @@ Token 200 → NaN at [200, 201, 209, 210] ### 7.2 可能的bug位置 **可能位置**: -1. Logits计算(LM head) -2. Softmax计算 -3. MoE Router输出 -4. Quantization反量化 +1. **MoE Router路由计算** ⚠️ + - 128个专家的路由决策 + - Token ID被错误地用作路由索引 + - 导致特定专家或位置的计算出错 + +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 ---