docs: 整理完整实验记录与最终配置(58.86->~68)

This commit is contained in:
OwnerSunshine530
2026-06-15 15:44:19 +08:00
parent 6625666010
commit 2662da850c
+49 -14
View File
@@ -1,19 +1,54 @@
# 实验记录 # 实验记录
> 在 AI Studio notebook 里跑 `bench.py` 后,把每次配置的实测值填进表里 > 本地 bench(A800,过滤到 5451 测试用户/1524480 记录)+ 评测提交结果
> 「本地分」用本地 test.csv + label_data.txt 算(仅作方向参考);「提交分」是验证集真实分数 > 本文件可入 git,但**不进提交包**
> 本文件可入 git,但**不进提交包**(打包只含 infer.py / requirements.txt / build_env.sh)。
| 任务 | 配置 | AUC | PCOC | 延迟(同步) | 本地分 | 提交分 | ## 关键认知
|------|------|-----|------|-----------|--------|--------|
| 基线 | 默认(当前最优: fp16+merge0.90+clamp) | _待测_ | _待测_ | _待测_ | _待测_ | 58.86 |
## 待跑(按计划顺序) 1. **AUC 锁死 ≈ 0.759**:精度(fp16=fp32)、sign-id(超界仅0.00%)、上下文(每用户均280长)三条线索全空。模型分桶固定 ≈ 9 分。
2. **总分天花板 ≈ 79.9**:延迟分上限 70(latency→0 不可能)+ 模型分 ~9.9。80+ 需 AUC>0.76(本模型不可达)。
3. **评测计时对"同步点"敏感**:消除 model(batch) 内的 GPU 同步点(尤其 MoE 的 .nonzero())在评测端收益被放大(评测 batch 数 ≈ 本地 6×)。
4. **本地 latency 不直接预测评测**:消同步/降访存的改动翻译得好;带 per-batch 开销的(varlen)翻译差甚至反向。
- [ ] Task 2: `python bench.py` 默认配置 → 填上面「基线」行的本地实测 ## 最终配置(infer.py CONFIG 默认)
- [ ] **Task 3(最关键)**: `bench.run_once({"fp16": False, "expert_merge": False, "signid_mode": "clamp"})` → FP32 天花板 AUC,判定 80+ 是否有 AUC 空间
- [ ] Task 4: clamp vs modulo(先查 max_sign_id 是否超 5M | 开关 | 值 | 作用 |
- [ ] Task 5: 混合精度 keep_fp32_modules 扫描 |------|----|----|
- [ ] Task 6: expert_merge 开/关的 AUC 代价 | fp16 | True | 半精度 |
- [ ] Task 7: 特征截断 + 上下文完整性核查 | emb_fp16 | True | Embedding 表也 FP16(查表带宽减半,AUC 逐位≈无损) |
- [ ] Task 8: 锁定阶段 A 配置并提交一次 | attn | "chunked" | 按用户分块 SDPA,降注意力 O(S²) |
| chunk_users | 4 | 每块用户数(本地最快) |
| vectorize_moe | True | 稠密向量化 MoE(去掉 .nonzero 同步点) |
| fuse_embedding | True | 28 slot 查表+池化融合为 1 次 |
| dedup_embedding | True | 查表前去重(slot19 等高重复),减少大表随机访存 |
| syncfree_mask | True | searchsorted 构造因果 mask(无同步) |
| filter_test_users | True | 只枚举含测试样本的用户(评测端为空操作,但无害) |
| sparse_pool | False | ❌ 实测更慢(sparse.mm/coalesce 开销),已弃 |
## 评测提交记录
| 手段(累计) | 评测延迟 | 评测分数 | AUC | 备注 |
|------|------|------|-----|------|
| 官方基线 | 229s | 25.85 | 0.759 | |
| 接手时最优 | 86.5s | 58.86 | 0.7526 | FP16+Flash+expert合并 |
| 只跑测试用户(过滤) | 89.96s | 58.05 | 0.7525 | 评测端空操作 |
| varlen 注意力 | 148.4s | 44.40 | 0.7525 | ❌ 本地快评测慢,已弃 |
| + 稠密 MoE(消同步) | 69.55s | 62.81 | 0.7525 | ✅ 关键一刀 -20s |
| + embedding 融合 | 68.60s | 63.03 | 0.7525 | +1 |
| + sync-free mask | 67.49s | 63.29 | 0.7525 | +1 |
| + emb_fp16 | 65.86s | 63.67 | 0.7524 | +1.6 |
| + chunked 注意力(8) | 59.44s | 65.17 | 0.7524 | ✅ -6.4s |
| + dedup 查表 | 47.88s | 67.87 | 0.7524 | ✅ -11.6s |
| + chunk_users=4 | _待填_ | _待填_ | | 收尾微调 |
## 验证过更慢/无效、已弃的手段
- varlen 嵌套张量注意力(评测 148s)
- FlexAttention(本地慢 6×)
- torch.compile(本地慢 5×)
- 小 batch(更慢)
- sparse_pool 稀疏池化(本地 8.48 > 6.22)
- INT8 / MoE 稀疏化(评估后判定收益小/风险高,未实施)
## 未解
榜上 80+ 与上述天花板(~79.9)矛盾,本地证据无法解释。需核对官方评分公式原图/榜首构成/验证集 AUC。