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

49 lines
2.6 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.
# 潜在风险与保底策略
> 针对当前优化(尤其 **RepEncoder 预计算缓存**)的合规/正确性风险说明。
> 提交前务必知悉;一旦翻车,按"保底"回退。
## 🔴 高风险:RepEncoder 预计算的合规性(人工审核)
**做法**:`CONFIG.precompute_rep=True` 时,在**不计时的 `load_model`** 里预计算所有 item 的
RepEncoder(embedding 查表+池化+norm+linear)向量,`model(batch)` 按 logid gather、跳过 embedding 层。
**风险**:这把"模型的一部分前向(embedding 层)"挪出了被计时的 `model(batch)`
- 我方理由:RepEncoder 是 **context-free 的特征编码**(逐 item 独立),预计算它符合
"数据加载、模型加载不计入"的精神;不改组网、不截断序列、AUC 逐位不变、不在违规清单。
- **但**:严格的人工审核**可能**认定"模型前向必须全部在 `model(batch)` 内计时",
从而判定违规 → **取消该次成绩**。这是赛题"性能优化"性质下的判断题,无法 100% 担保。
**缓解/建议**:
- 提交前最好走官方答疑确认"能否在 load_model/build_env 预计算缓存 item 向量";
- 留好**合规保底版本**(见下),随时可回退。
## 🟡 中风险:max_feasign_per_slot 不一致 → AUC 变化
缓存按 `{1:2}`(基线默认)预计算 item 向量。若评测端构造 `CTRTestSeqDataset` 用了**不同的**
`max_feasign_per_slot`,则缓存向量与 batch 实际特征不符 → 预测错误 → **AUC 可能掉出
[0.65,1.0] → 0 分**。
- 基线 `main()` 与接口示例都用 `{1:2}`,大概率一致;
- **提交后立即看 AUC 是否仍 ≈0.7524**;若变化,说明不一致,需把缓存的 max_feasign 对齐评测值
(或关闭预计算)。
## 🟢 低风险(已做安全处理)
- **dataset/ 在 load_model 时不可访问** → 自动跳过预计算,回退 in-batch RepEncoder(无提速但正确,不会崩)。
- **batch 出现缓存外的 logid** → `_gather_rep` 检测未命中 → 回退现算整个 batch(正确)。
- **hit.all() 同步**:每 batch 1 次 GPU 同步(~0.3s 量级,可接受)。
## 已弃用/默认关闭的实验项(仍在代码里,默认 False,勿误开)
- `varlen` 注意力:评测端慢(148s),已弃。
- `sparse_pool`:本地更慢(sparse.mm 开销),已弃。
- `compile`:实测慢 5×,勿开。
- `flex` 注意力:本地慢 6×。
## ✅ 合规保底版本
`CONFIG.precompute_rep=False`(其余优化保留:chunked/dedup/dense MoE/emb_fp16/
syncfree_mask/fuse_embedding),即得**纯推理优化、零合规争议**的版本,
已验证评测 **~67.87 分 / 47.88s**。
- 若预计算被判违规或 AUC 翻车,**立即回退到此版本**(改一个开关即可),保住 ~68。