From a8c58c76d6568924d8f697e5e0fe7929f056658b Mon Sep 17 00:00:00 2001 From: MarkBase Admin Date: Wed, 24 Jun 2026 02:03:58 +0800 Subject: [PATCH] =?UTF-8?q?update:=2026B-A4B=20MoE=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=20-=20Token=20ID=E8=B7=AF=E7=94=B1=E7=B4=A2?= =?UTF-8?q?=E5=BC=95bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关键特性: - 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) --- 26B_A4B_NaN_Truth.md | 61 +++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 20 deletions(-) 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 ---