# 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 **状态**: 🔍 等待测试验证 **预期结论**: ⭐⭐⭐⭐ 设计特性(需确认)