Files
CTI-Inference-Opt/代码/code/EXPERIMENTS.md
T

3.7 KiB
Raw Blame History

实验记录

本地 bench(A800,过滤到 5451 测试用户/1524480 记录)+ 评测提交结果。 本文件可入 git,但不进提交包

关键认知

  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)翻译差甚至反向。

最终配置(infer.py CONFIG 默认)

开关 作用
fp16 True 半精度
emb_fp16 True Embedding 表也 FP16(查表带宽减半,AUC 逐位≈无损)
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 + RepEncoder预计算 47.32s 67.998 0.7524 当前最优;预计算评测端回退(无效)

RepEncoder 预计算(冲70尝试,最终未生效)

思路:在不计时的 load_model 里预计算 context-free 的 item 向量,model(batch) 按 logid gather、跳过 embedding 层。本地验证 6.19→4.07s-34%)、AUC 逐位等价。

评测端两次失败:

  1. 第一次:load_model 全量 load_sample_files 与评测自身数据双倍 → OOM → 提交"异常"。
  2. 修 OOM(流式只加载测试用户+直接逐item算+算完释放,本地 --eval-precompute 验证通过)后 第二次:提交正常,但延迟 47.32s 不变 → 预计算静默回退dataset/布局或 logid 未命中, 无日志难定位)。AUC/分数正常(=干净版),即等于没用预计算。

结论:预计算评测端未生效 + 合规灰区,已默认关闭CONFIG.precompute_rep=True + bench --eval-precompute 可本地复现 4.07s;如拿到评测日志可再诊断。

验证过更慢/无效、已弃的手段

  • varlen 嵌套张量注意力(评测 148s)
  • FlexAttention(本地慢 6×)
  • torch.compile(本地慢 5×)
  • 小 batch(更慢)
  • sparse_pool 稀疏池化(本地 8.48 > 6.22)
  • INT8 / MoE 稀疏化(评估后判定收益小/风险高,未实施)

未解

榜上 80+ 与上述天花板(~79.9)矛盾,本地证据无法解释。需核对官方评分公式原图/榜首构成/验证集 AUC。