Files
markbaseengine/26B_A4B_NaN_Truth.md
T
MarkBase Admin a8c58c76d6
CI / build-and-test (push) Has been cancelled
update: 26B-A4B MoE架构说明 - Token ID路由索引bug
关键特性:
- 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)
2026-06-24 02:03:58 +08:00

6.8 KiB
Raw Blame History

26B-A4B NaN真相报告

测试日期: 2026-06-24
状态: 🚨 重大发现 - NaN和输入token ID相关
性质: ⚠️ 真实bug,不是设计特性


一、震惊发现

1.1 测试结果对比

Token ID Embedding状态 Forward NaN NaN位置 关系
Token 2 0/2816 2 [2, 98] 输入位置+98
Token 98 0/2816 2 [2, 98] 完全相同 ⚠️
Token 100 0/2816 1 [100] 输入=输出 ⚠️
Token 200 0/2816 4 [200, 201, 209, 210] 输入附近扩展

1.2 关键洞察

震惊的发现:

  • Token 2和98的NaN位置完全相同
  • Token 100的NaN就在位置100
  • Token 200的NaN在200附近扩展
  • 所有Embedding都正常(0 NaN

机制:

26B-A4B的NaN位置依赖输入token ID
不是固定位置(不像12B
这是forward pass的bug,不是设计特性

二、对比12B机制

2.1 完全不同的机制

模型 NaN机制 Token影响 状态
12B 固定位置 [2, 255999, 256000] 无关 设计特性
26B-A4B 依赖输入token 相关 ⚠️ 真实bug

12B:

  • 所有tokens的NaN都在相同位置
  • 这是多模态token屏蔽的设计特性
  • 正确且合理的

26B-A4B:

  • 不同tokens有不同NaN位置
  • NaN位置和输入token ID相关
  • 这是真正的bug

2.2 证据对比

12B证据(设计特性):

  • 权重文件: 0 NaN
  • Embedding: 正常
  • NaN位置: 固定
  • 机制: 多模态屏蔽

26B-A4B证据(真实bug:

  • 权重文件: 0 NaN
  • Embedding: 正常
  • NaN位置: 不固定 ⚠️
  • 机制: 索引bug ⚠️

三、NaN模式分析

3.1 发现的模式

模式1: Token ID对称性

Token 2 → NaN at [2, 98]
Token 98 → NaN at [2, 98]
(输入token ID和NaN位置存在对称关系)

模式2: 输入=输出

Token 100 → NaN at [100]
(输入token ID直接对应NaN位置)

模式3: 扩展模式

Token 200 → NaN at [200, 201, 209, 210]
NaN在输入位置附近扩展)

3.2 推测的根本原因

可能的原因:

  1. Logits计算索引错误

    • 输入token ID被错误地用作logits索引
    • 导致特定位置的logits被设为NaN
  2. Quantization参数不匹配

    • 26B-A4B: bits=8, group_size=64
    • 26B-Standard: bits=4, group_size=32
    • 量化参数可能导致计算问题
  3. MoE Router计算问题

    • MoE架构的特殊性
    • Router/expert计算可能有bug

四、MoE架构关键特性

4.1 内存需求说明

重要特性:

26B-A4B虽然是MoE模型(每个token只激活4B参数)
但需要加载全部26B参数到内存(约14.5GB)
以维持快速的路由和推理速度
基准内存需求量与26B密集模型相近

影响:

  • 所有128个专家必须常驻内存
  • 路由器需要快速访问所有专家
  • 每个token激活4B参数,但推理需要全量26B
  • ⚠️ 增加了路由计算的复杂度

4.2 权重文件完整性检查

检查结果:

  • 总tensors: 1697个
  • 含NaN的tensors: 0个
  • Embedding weights: 0 NaN
  • Router weights: 0 NaN
  • Expert weights: 0 NaN

结论: 权重文件完全正常,问题在forward pass的路由或专家计算


五、对比26B-Standard

5.1 26B-Standard表现

测试结果:

  • Token 2: 0 NaN
  • Token 100: 0 NaN
  • Token 200: 0 NaN

结论: 26B-Standard完美无NaN


5.2 为什么26B-Standard没问题

可能原因:

  1. 无多模态tokens
  2. 使用正确的量化参数(bits=4, group_size=32
  3. 纯文本模型,逻辑简单

六、影响分析

6.1 实际影响

影响范围:

  • ⚠️ NaN位置依赖输入token
  • ⚠️ 影响不确定性高
  • ⚠️ 可能影响生成质量
  • ⚠️ 不适合生产使用

对比12B:

  • 12B: 固定3个位置(0.0011%- 可预测
  • 26B-A4B: 不固定位置 - 不可预测

6.2 使用建议

强烈建议:

  • ⚠️ 不要使用26B-A4B
  • 使用26B-Standard代替
  • 26B-Standard完美稳定

七、根本原因推测

7.1 最可能的原因

推测: Forward pass索引bug

理由:

  1. Embedding完全正常(0 NaN
  2. 权重文件完全正常(0 NaN
  3. NaN位置依赖输入token ID
  4. Token ID和NaN位置有对称关系

机制:

在forward pass的某个计算步骤
输入token ID被错误地用作logits索引
导致该位置的logits变成NaN

7.2 可能的bug位置

可能位置:

  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

八、修复建议

8.1 立即可行方案

方案1: 使用26B-Standard

  • 完美无NaN
  • 纯文本模型
  • 相同的MoE架构
  • 推荐使用

方案2: 重新量化26B-A4B

  • 使用bits=4, group_size=32
  • 参考26B-Standard的量化参数
  • 可能解决问题

8.2 长期修复方案

需要:

  1. 检查forward pass代码
  2. 定位索引bug的具体位置
  3. 修正计算逻辑
  4. 重新测试

九、测试文件

  • TwentySixBA4BNaNLocationTest.swift: NaN位置定位
  • TwentySixBA4BDeepDebugTest.swift: Token-by-Token分析
  • test_26b_a4b_nan_location.log: 测试日志

十、最终结论

10.1 问题定性

性质: 真实bug,不是设计特性

证据:

  • NaN位置不固定
  • 依赖输入token ID
  • 和12B机制完全不同
  • 权重文件正常,问题在forward pass

10.2 建议

立即:

  • ⚠️ 停止使用26B-A4B
  • 使用26B-Standard代替

长期:

  • 重新量化26B-A4B(使用正确的参数)
  • 或修复forward pass的索引bug

十一、对比总结

模型 NaN状态 性质 建议
12B 固定3位置 设计特性 可使用
26B-A4B 依赖输入token ⚠️ 真实bug 不推荐
26B-Standard 0 NaN 完美 推荐

生成时间: 2026-06-24
问题定性: ⚠️ 真实bug
严重程度: 高(不可预测)
修复需求: 必须修复或替代
推荐方案: 使用26B-Standard