Files
markbaseengine/26B_A4B_NaN_Analysis_Plan.md
T
MarkBase Admin 2a889faf4b
CI / build-and-test (push) Has been cancelled
CRITICAL: 26B-A4B NaN真相 - 真实BUG而非设计特性
重大发现:
 26B-A4B的NaN位置依赖输入token ID
 Token 2和98的NaN位置完全相同(对称bug)
 大部分tokens的NaN就在输入位置(Token 4-9)
 这是forward pass的索引bug,不是设计特性

测试证据:
Token 0: 175 NaN at [0 + 174固定位置]
Token 1: 1 NaN at [1](输入=输出)
Token 2: 2 NaN at [2, 98]
Token 3: 80 NaN at [3 + 79固定位置]
Token 4-9: 每个都是1 NaN在token ID位置
Token 98: 2 NaN at [2, 98](和Token 2完全相同!)
Token 100: 1 NaN at [100]
Token 255999: 1 NaN at [255999]
Token 256000: 3 NaN at [25407, 71032, 256000]

对比12B:
12B: 固定位置[2, 255999, 256000],和输入无关 → 设计特性 
26B-A4B: 依赖输入token ID → 真实bug ⚠️
26B-Standard: 0 NaN → 完美 

根本原因:
Forward pass索引bug
输入token ID被错误地用作logits索引
导致该位置的logits变成NaN

建议:
⚠️ 停止使用26B-A4B
 使用26B-Standard代替(0 NaN)
 或修复forward pass的索引逻辑

文件:
- TwentySixBA4BNaNLocationTest.swift
- TwentySixBA4BDeepDebugTest.swift
- 26B_A4B_NaN_Truth.md
- 26B_A4B_NaN_Analysis_Plan.md

定性:真实bug,严重程度(不可预测)
2026-06-24 01:44:39 +08:00

235 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 26B-A4B 2 NaN深度分析计划
**日期**: 2026-06-24
**状态**: 🔍 **分析中** - 需要验证NaN位置
---
## 一、已确认事实
### 1.1 权重文件完整性 ✅
**检查结果**:
- 总tensors: 1697个
- 含NaN的tensors: **0个**
- Embedding weights: 0 NaN
- Router weights: 0 NaN
- Expert weights: 0 NaN
**结论**: **权重文件完全正常,无corruption**
---
### 1.2 配置对比
| 参数 | 26B-A4B | 26B-Standard |
|-----|---------|-------------|
| Shard文件 | 3个 | 1个 |
| 总大小 | ~14.5 GB | ~14.5 GB |
| 量化bits | 8 (每层) / 4 (全局) | 4 |
| Group size | 64 | 32 |
| **多模态Tokens** | ✅ 有 | ❌ 无 |
| Forward NaN | **2个** | **0个** |
**关键发现**:
- 26B-A4B有多模态tokens
- 26B-Standard没有多模态tokens
- 这是**根本差异**
---
### 1.3 多模态Token配置
**12B 和 26B-A4B 完全相同**:
| Token名称 | Token ID | 用途 |
|---------|---------|------|
| BOI (Begin of Image) | **255999** | 图像开始标记 |
| BOA (Begin of Audio) | **256000** | 音频开始标记 |
| Image token | 258880 | 图像placeholder |
| Audio token | 258881 | 音频placeholder |
| EOI (End of Image) | 258882 | 图像结束标记 |
| EOA (End of Audio) | 258883 | 音频结束标记 |
**关键**: 12B的NaN在 **255999 和 256000**
---
### 1.4 Embed Tokens检查
**检查结果**:
```
Position 255999: ✓ No NaN
Position 256000: ✓ No NaN
Position 258880: ✓ No NaN
Position 258881: ✓ No NaN
Position 258882: ✓ No NaN
Position 258883: ✓ No NaN
```
**结论**: Embedding weights正常,NaN在forward pass产生
---
## 二、核心假设
### 2.1 主要假设 ⭐⭐⭐
**假设**: **26B-A4B的2个NaN是设计特性,不是bug**
**理由**:
1. ✅ 12B有相同的NaN问题,已证明是设计特性
2. ✅ 12B和26B-A4B有**相同的多模态token IDs**
3. ✅ 权重文件完全正常,无corruption
4. ✅ Embedding weights正常
5. ✅ 26B-Standard无多模态tokens,无NaN
**预测NaN位置**:
- **Index 255999** (BOI - Begin of Image)
- **Index 256000** (BOA - Begin of Audio)
---
### 2.2 替代假设
**假设2**: 量化参数不匹配
- 26B-A4B: bits=8, group_size=64
- 26B-Standard: bits=4, group_size=32
- 可能导致计算精度问题
**反驳**:
- 权重文件无NaN
- 如果是量化问题,应该有更多NaN
- 不太可能只影响2个位置
---
## 三、验证方案
### 3.1 关键测试:NaN位置定位
**测试代码**:
```swift
// 测试不同tokens
let testTokens = [2, 100, 200, 255999, 256000]
for tokenId in testTokens {
let result = try model.forwardOptimized(tokenId: tokenId, position: 0)
let nanIndices = result.enumerated()
.filter { $0.element.isNaN }
.map { $0.offset }
print("Token \(tokenId): NaN at \(nanIndices)")
}
```
**预期结果**:
```
Token 2: NaN at [255999, 256000]
Token 100: NaN at [255999, 256000]
Token 200: NaN at [255999, 256000]
Token 255999: NaN at [255999, 256000]
Token 256000: NaN at [255999, 256000]
```
**如果结果符合预期**:
- ✅ 确认是设计特性
- ✅ 与12B机制相同
- ✅ 不是weight corruption
---
### 3.2 对比测试
**测试1**: 26B-A4B vs 26B-Standard
```swift
// 26B-A4B: 预期2个NaN
let a4b_result = try a4b_model.forwardOptimized(tokenId: 2, position: 0)
// 预期: 2 NaN
// 26B-Standard: 预期0个NaN
let std_result = try std_model.forwardOptimized(tokenId: 2, position: 0)
// 预期: 0 NaN
```
---
## 四、初步结论
### 4.1 基于现有证据
**最有可能是**: **设计特性(像12B**
**证据强度**: ⭐⭐⭐⭐ (4/5)
- ✅ 权重文件完全正常
- ✅ 与12B配置完全相同
- ✅ 26B-Standard无此问题
- ⏳ 等待NaN位置确认
---
### 4.2 待验证
**需要**:
1. 运行forward pass测试
2. 确认NaN位置是否固定在255999, 256000
3. 如果确认,则100%确定是设计特性
---
## 五、影响分析
### 5.1 如果是设计特性
**影响**:
-**仅影响2个位置** (262,144中)
-**占比极小** (0.00076%)
-**不影哏正常文本生成**
-**权重文件完全正常**
**建议**:
- ✅ 可以继续使用
- ✅ 更新文档说明
- ✅ 使用26B-Standard作为替代(无NaN
---
### 5.2 如果是其他问题
**可能性**: 极低
- 权重文件已确认无NaN
- 配置逻辑清晰
- 与12B高度相似
---
## 六、下一步
### 6.1 立即执行
1. **创建测试文件**: `TwentySixBA4BNaNLocationTest.swift`
2. **运行测试**: 找出NaN精确位置
3. **对比12B**: 确认机制相同
4. **更新报告**: 最终结论
### 6.2 文档更新
如果确认是设计特性:
- 更新 `complete_model_comparison_report.md`
- 创建 `26B_A4B_design_feature.md`
- 更新推荐模型列表
---
## 七、相关文件
- 测试计划: `26B_A4B_NaN_Analysis_Plan.md` (此文件)
- 对比报告: `complete_model_comparison_report.md`
- 12B真相报告: `12B_final_truth.md`
- 测试文件: `Tests/MarkBaseTests/MoE26BA4BTest.swift`
---
**生成时间**: 2026-06-24
**状态**: 🔍 等待测试验证
**预期结论**: ⭐⭐⭐⭐ 设计特性(需确认)