chore: 初始化 CTI 推理优化项目

- baseline infer.py + requirements.txt + build_env.sh
- GRAB / HSTU 两篇核心论文
- 比赛规则和提交接口说明
- 项目 CLAUDE.md
This commit is contained in:
2026-06-03 13:49:19 +08:00
parent 0b1037b002
commit d0bbb8f3e2
9 changed files with 9267 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
# 选手提交压缩包规范
本文档说明选手提交代码压缩包的格式与运行要求。不符合以下任一约束,评测将失败或总分计 0。
---
## 1. 压缩包格式
- **允许的后缀**`.zip``.tar.gz``.tar`。其他后缀评测会直接失败。
- **目录布局**:压缩包解压后,所有文件必须**直接位于根目录**,不得包含最外层包裹目录。
错误示例(解压后多一层目录):
```
submit.zip
└── my_code/
└── infer.py
```
正确示例:
```
submit.zip
├── infer.py
├── requirements.txt # 可选
└── build_env.sh # 可选
```
---
## 2. 必需文件
### 2.1 `infer.py`(必需)
根目录必须存在可被 Python 正常 `import``infer` 模块(即 `infer.py``infer/__init__.py`),并对外提供以下接口:
| 接口 | 签名 / 说明 |
|------|-------------|
| `load_sample_files` | `load_sample_files(sample_files_list: List[Path]) -> (item_dict, user_seq)` |
| `CTRTestSeqDataset` | 类;构造参数:`test_logids_ordered`, `item_dict`, `user_seq`, `max_feasign_per_slot`, `max_ctx_len`;需暴露属性 `max_slot_id` |
| `make_collate_fn` | `make_collate_fn(max_slot_id) -> Callable`,用作 `DataLoader``collate_fn` |
| `load_model` | `load_model(ckpt_path: Path) -> (model, device)` |
| `move_batch_to_device` | `move_batch_to_device(batch, device) -> batch` |
| `model(batch)` | 前向返回 `(logits, moe_loss)``logits.squeeze(-1)``sigmoid` 应为点击概率 |
`batch` 必须包含以下键:
- `logid`:样本 logid,需支持 `.shape[0]``[pred_mask].cpu().tolist()`
- `pred_mask`:可转 `bool` 的掩码 Tensor
### 2.2 评测端提供、选手**不得**自带的文件
评测端会统一提供下列路径,选手**不要**在压缩包中包含同名文件/目录:
- `dataset/`:测试与历史数据
- `ckpt.pt`:模型权重
---
## 3. 可选文件
| 文件 | 行为 | 失败条件 |
|------|------|----------|
| `requirements.txt` | 评测前安装依赖(使用阿里云 PyPI 镜像:`https://mirrors.aliyun.com/pypi/simple` | 安装失败则评测失败 |
| `build_env.sh` | 在代码根目录下执行 `sh build_env.sh`,**超时 720 秒** | 超时或返回码非 0 则评测失败 |
依赖必须可通过阿里云 PyPI 镜像安装;`build_env.sh` 若需访问外部资源,请自行保证在 720 秒内完成。
---
## 4. 运行时与指标约束
### 4.1 推理延迟
- 延迟阈值:**300 秒**。
- 只统计**模型前向**时间(逐 batch 累加 `model(batch)` 耗时),数据加载、模型加载不计入。
- 延迟得分:`score_latency = (300 - latency) / 300`
-`latency ≥ 300``score_latency = 0`**总分直接置 0**。
### 4.2 模型指标门槛
以下任一不满足,策略分 `score_model = 0`**总分直接置 0**
- `AUC ∈ [0.65, 1.0]`
- `PCOC ∈ [0.85, 1.15]`,其中 `PCOC = mean(predictions) / mean(labels)`
### 4.3 总分公式
仅当 `score_latency > 0``score_model > 0` 时:
```
score_all = score_latency * 70 + score_model * 30
```
否则 `score_all = 0`
---
## 5. 违规清单(评测失败或 0 分)
1. 压缩包后缀非 `.zip` / `.tar.gz` / `.tar`
2. 压缩包内含最外层包裹目录,导致根目录找不到 `infer.py`
3. 缺失 `infer.py`,或其任一必需接口签名/返回值结构不符。
4. `requirements.txt` 安装失败。
5. `build_env.sh` 执行超过 720 秒或返回码非 0。
6. 推理总耗时 ≥ 300 秒。
7. `AUC` 不在 `[0.65, 1.0]``PCOC` 不在 `[0.85, 1.15]`
8. 压缩包自带 `dataset/``ckpt.pt`,覆盖评测端提供的路径。
---
## 6. 最小可用提交示例
```
submit.zip
├── infer.py # 实现第 2.1 节全部接口
└── requirements.txt # 可选;列出 torch 等依赖
```