# Kaggle 竞赛 Code / Discussion / Model 批量下载说明

> 文档生成时间：2026-09-22  
> 执行环境：down-server（数据集根目录 `/www/wwwroot/dataset`）  
> 公网静态根：`http://74.91.24.26/`  
> 工具：Kaggle 官方 CLI / Python API（`kaggle` 2.2.4）+ 自研批处理脚本  

---

## 1. 任务目标

对指定 Kaggle 竞赛批量下载并归档：

| 类型 | 含义 | 期望内容 |
|------|------|----------|
| **Code** | Notebooks / Kernels 源码 | `.ipynb` / `.py` + `kernel-metadata.json` |
| **Discussion** | 竞赛讨论区帖子 | 仅本竞赛帖；含标题、正文、评论树 |
| **Model** | Kaggle Models Hub 模型 | 元数据 + **实例权重文件**（`.pt` / `.pth` / `.bin` / `.onnx` / `.safetensors` 等） |

**不在本次范围内**（除非另开任务）：

- 竞赛官方训练/测试大数据（`kaggle competitions download`）
- Kernel **Output** 产物（与 Models Hub 不同，体积可能极大）
- 私有 Notebook / 私有 Model（无权限则无法拉取）

---

## 2. 涉及竞赛清单

| # | 竞赛 slug | 页面 | 备注 |
|---|-----------|------|------|
| 1 | `rsna-knee-abnormality-detection` | [RSNA Knee Abnormality Detection](https://www.kaggle.com/competitions/rsna-knee-abnormality-detection) | 2026 进行中 Research 赛 |
| 2 | `cafa-5-protein-function-prediction` | [CAFA 5](https://www.kaggle.com/competitions/cafa-5-protein-function-prediction) | 已结束 Research 赛 |
| 3 | `playground-series-s4e12` | [Playground S4E12](https://www.kaggle.com/competitions/playground-series-s4e12) | Playground |
| 4 | `konwinski-prize` | [Konwinski Prize](https://www.kaggle.com/competitions/konwinski-prize) | Featured，高奖金 |

---

## 3. 目录与公网地址

### 3.1 RSNA Knee（独立目录）

```text
/www/wwwroot/dataset/kaggle-rsna-knee-abnormality-detection/
├── code/
│   ├── kernels_index.csv / kernels_refs.txt / kernels_index.json
│   ├── COMPLETE.json
│   └── kernels/<owner>/<kernel-slug>/
│       ├── *.ipynb | *.py
│       └── kernel-metadata.json
├── discussion/
│   ├── topics_index.json
│   ├── COMPLETE.json
│   └── topics/<topicId>_<title>.json
├── models/
│   ├── models_index.json
│   ├── COMPLETE.json
│   └── files/<owner>/<model-slug>/
│       ├── MODEL_META.json
│       └── versions/...   # 权重与实例文件
├── COMPLETE.json                 # 首轮批处理结果
└── BACKFILL_COMPLETE.json        # 补全轮结果（若已生成）
```

公网：

- 目录：http://74.91.24.26/kaggle-rsna-knee-abnormality-detection/
- 说明本文：http://74.91.24.26/kaggle-download-docs/KAGGLE_DOWNLOAD_REPORT.md

### 3.2 另外三赛（统一 multi-bundle + 分竞赛 zip）

```text
/www/wwwroot/dataset/kaggle-multi-bundle/
├── cafa-5-protein-function-prediction/
│   ├── code/ discussion/ models/ COMPLETE.json BACKFILL_COMPLETE.json
├── playground-series-s4e12/
├── konwinski-prize/
├── cafa-5-protein-function-prediction.zip
├── playground-series-s4e12.zip
├── konwinski-prize.zip
└── COMPLETE.json                 # 三赛首轮总表
```

公网 zip：

| 竞赛 | Zip |
|------|-----|
| CAFA 5 | http://74.91.24.26/kaggle-multi-bundle/cafa-5-protein-function-prediction.zip |
| Playground S4E12 | http://74.91.24.26/kaggle-multi-bundle/playground-series-s4e12.zip |
| Konwinski Prize | http://74.91.24.26/kaggle-multi-bundle/konwinski-prize.zip |
| 目录浏览 | http://74.91.24.26/kaggle-multi-bundle/ |

> 补全轮（Discussion 全量 + Model 权重）完成后会 **重打 zip**，以磁盘上最新 zip 的 `Content-Length` 为准。

### 3.3 脚本与日志（运维）

| 路径 | 说明 |
|------|------|
| `/usr/local/sbin/download-rsna-kaggle-bundle.py` | RSNA 首轮 Code/Disc/Model |
| `/usr/local/sbin/download-kaggle3-bundle.py` | CAFA / Playground / Konwinski 首轮 + 分 zip |
| `/usr/local/sbin/kaggle-backfill-disc-models.py` | **补全轮**：竞赛作用域 Discussion + Model 实例下载 |
| `/www/wwwroot/dataset/kaggle-backfill.log` | 补全实时日志 |
| `/www/wwwroot/dataset/kaggle-backfill-progress.json` | 补全进度快照 |
| `/www/wwwroot/dataset/kaggle-backfill-COMPLETE.json` | 补全全部结束标记 |

---

## 4. 首轮交付结果（验收对照）

### 4.1 客户验收表 vs 首轮实供

| 竞赛 | 项 | 要求（客户） | 首轮实供 | 结论 |
|------|----|-------------:|---------:|------|
| **RSNA Knee** | Code | 847 | **843～844** | 基本一致（通过） |
| | Model | 14 | **11～13**（多为元数据） | 数量不足；且缺权重文件 |
| | Discussion | 122 | **23** | 严重漏页（少约 99） |
| **CAFA 5** | Code | 349 | **349** | 一致（通过） |
| | Model | 0 | **0** | 一致 |
| | Discussion | 271 | **41** | 严重漏页（少约 230） |
| **Playground S4E12** | Code | 577 | **577** | 一致（通过） |
| | Model | 0 | **0** | 一致 |
| | Discussion | 110 | **9** | 严重漏页（少约 101） |
| **Konwinski** | Code | 111 | **111** | 一致（通过） |
| | Model | 29 | **1**（元数据为主） | 漏项；缺权重 |
| | Discussion | 182 | **41** | 严重漏页（少约 140） |

### 4.2 首轮各 zip 体积（打包时）

| 文件 | 约大小 |
|------|--------|
| `cafa-5-protein-function-prediction.zip` | ~5.0 MB |
| `playground-series-s4e12.zip` | ~17 MB |
| `konwinski-prize.zip` | ~2.1 MB |
| RSNA 目录（未强制单 zip） | 首轮约 ~116 MB，补全中增大 |

Code 体积小是因为只拉 **源码**，不含 kernel output 与竞赛原始数据。

---

## 5. 根因分析（为何 Discussion / Model 不合格）

### 5.1 Discussion 漏页

**错误做法（首轮）：**

```bash
kaggle forums topics list --category competitions -s "<关键词>"
```

问题：

1. 这是 **全站论坛搜索**，不是「某竞赛讨论区」官方列表。  
2. CLI 对 search 结果 **几乎只回一页**，且 `page-size` 对竞赛话题支持差。  
3. 关键词会串到 **其他竞赛 / 无关帖**，或漏掉标题不含关键词的本赛帖。  

**正确做法（补全轮）：**

```bash
kaggle competitions topics list <competition-slug> -p <page> -v
```

- 作用域 = **该竞赛讨论区 only**  
- 用 `-p 1..N` 翻页直到不足一页  
- 单帖正文/评论：`kaggle competitions topics show` + `kaggle forums topics show <topicId>`（评论分页）

### 5.2 Model 只有 json/txt、没有权重

**错误做法（首轮）：**

```bash
kaggle models get <owner>/<model> -p ...
# 或只写 MODEL_META.json / instances.txt
```

问题：`get` 主要落 **元数据**，不会自动把 instance 里的大文件拉全。

**正确做法（补全轮）：**

```text
1) kaggle models list -s "..."          # 或 Python api.model_list
2) 解析 instance：owner/model/Framework/variation/version
3) kaggle models instances versions download \
     <owner>/<model>/<Framework>/<variation>/<version> \
     -p <dir> -f --untar
```

Framework 路径示例：`PyTorch` / `TensorFlow` / `Transformers` 等（以 model 页 URL 为准）。

**说明：**

- 部分 Model 在 Hub 上 **本身只有极小 tar**（例如仅说明文件，无 `.pt`），这是源站内容问题，不是漏下。  
- 竞赛页展示的 “Models” 数量，与 `models list -s` 可检索到的 **公开 Models Hub** 条目可能不一致（未发布、私有、仅 notebook 内权重、命名不含竞赛词等）。  
- **Kernel Output 里的权重** ≠ Models Hub；若客户把 notebook 输出也算进 “29 个 model”，需另开 `kernels output` 任务。

### 5.3 Code 为何基本一致

```bash
kaggle kernels list --competition <slug> --page-size 100 --page N
kaggle kernels pull <owner>/<slug> -p <dir> -m
```

竞赛过滤准确、分页完整，故 Code 与验收数量接近（RSNA 843 vs 847 的差额多为列表瞬时变化 / 私有 / 删除）。

---

## 6. 补全轮设计（进行中 / 完成后以 COMPLETE 为准）

### 6.1 官方列表摸底（补全开始时 API 实测）

| 竞赛 | `competitions topics list` 全部分页 | 客户表 |
|------|------------------------------------:|-------:|
| RSNA Knee | **130** | 122 |
| CAFA 5 | **285** | 271 |
| Playground S4E12 | **115** | 110 |
| Konwinski | **191** | 182 |

> 数量略高于客户表属正常（讨论区持续新增）。补全以 **API 全量列表** 为准，并只写入对应竞赛目录，避免串赛。

### 6.2 补全流程

```text
对每个 competition:
  A. Discussion
     - list 全部分页 → topics_index.json
     - 逐帖 show + 评论分页 → discussion/topics/<id>_*.json
     - 字段带 competition slug，目录隔离
  B. Models
     - 多组 search query → 去重 ref
     - 软过滤关键词（rsna/knee、cafa、s4e12、konwinski…）
     - 对每个 instance 执行 versions download（--untar）
     - MODEL_META.json 记录 handle、文件列表、字节数
  C. 重打 zip / 更新 BACKFILL_COMPLETE.json
```

### 6.3 验收建议（补全后）

**Discussion**

```bash
# 帖子数
find .../discussion/topics -name '*.json' | wc -l
# 应接近上表 API 全量；且 JSON 内 competition 字段 = 本赛 slug
```

**Model 权重**

```bash
find .../models -type f \( \
  -name '*.pt' -o -name '*.pth' -o -name '*.bin' -o \
  -name '*.onnx' -o -name '*.safetensors' -o -name '*.ckpt' -o \
  -name '*.h5' -o -name '*.gguf' -o -name '*.pkl' \
\) | wc -l
```

若某模型 `total_uncompressed_bytes` 很小且无上述后缀，记为 **源站无权重**，不在漏下之列。

**Code**（无需重做）

```bash
find .../code/kernels -mindepth 2 -maxdepth 2 -type d | wc -l
```

---

## 7. 关键 Kaggle CLI 速查

```bash
# 认证：~/.kaggle/kaggle.json （chmod 600）

# Code
kaggle kernels list --competition <slug> --page-size 100 --page 1 -v
kaggle kernels pull <owner>/<kernel> -p ./out -m

# Discussion（竞赛作用域）
kaggle competitions topics list <slug> -p 1 -v
kaggle competitions topics show <slug> <topicId> --format json
kaggle forums topics show <topicId> --format json --page-size 100

# Models
kaggle models list -s "<query>" --page-size 50 -v
kaggle models instances list <owner>/<model> -v
kaggle models instances versions download \
  <owner>/<model>/<Framework>/<variation>/<version> \
  -p ./out -f --untar

# 竞赛数据（本次未做）
kaggle competitions download <slug> -p ./data
```

---

## 8. 限制与风险

| 项 | 说明 |
|----|------|
| API 限速 | 过快 pull 会 429；脚本含 sleep / 重试 |
| 私有内容 | 未授权无法下载 |
| Models vs 页面数字 | Hub 公开条目可能少于竞赛页展示 |
| Kernel Output | 未默认下载；体积与授权另计 |
| 讨论增量 | 比赛进行中帖子数会涨，需定期 re-list |
| 磁盘 | Model 权重可达数 GB～数十 GB 级，补全后注意 `df` |

---

## 9. 首轮 vs 补全轮 状态机

```text
[首轮] Code ✅ 基本通过
       Discussion ❌ 漏页（forums search）
       Model ❌ 元数据为主、缺权重

[补全轮] Discussion → competitions topics 全分页 + 正文评论
         Model → instances versions download
         重打包 zip
         → BACKFILL_COMPLETE.json / kaggle-backfill-COMPLETE.json
```

查看补全是否结束：

```bash
# down-server
cat /www/wwwroot/dataset/kaggle-backfill-COMPLETE.json
tail -50 /www/wwwroot/dataset/kaggle-backfill.log
```

---

## 10. 相关公网链接汇总

| 资源 | URL |
|------|-----|
| **本文档** | http://74.91.24.26/kaggle-download-docs/KAGGLE_DOWNLOAD_REPORT.md |
| RSNA 目录 | http://74.91.24.26/kaggle-rsna-knee-abnormality-detection/ |
| 三赛目录 | http://74.91.24.26/kaggle-multi-bundle/ |
| CAFA 5 zip | http://74.91.24.26/kaggle-multi-bundle/cafa-5-protein-function-prediction.zip |
| Playground zip | http://74.91.24.26/kaggle-multi-bundle/playground-series-s4e12.zip |
| Konwinski zip | http://74.91.24.26/kaggle-multi-bundle/konwinski-prize.zip |

---

## 11. 变更记录

| 日期 | 事件 |
|------|------|
| 2026-09-20 | RSNA 首轮 Code/Disc/Model 批处理 |
| 2026-09-21 | CAFA 5 / Playground / Konwinski 首轮 + 三独立 zip（约 31 min） |
| 2026-09-22 | 客户验收：Code 通过；Discussion 漏页；Model 缺权重 |
| 2026-09-22 | 启动补全轮（竞赛 topics API + model instance download） |
| 2026-09-22 | 输出本说明文档 |

---

## 12. 联系与复现

在 down-server 复现补全：

```bash
python3 /usr/local/sbin/kaggle-backfill-disc-models.py
# 日志
tail -f /www/wwwroot/dataset/kaggle-backfill.log
```

认证文件：`/root/.kaggle/kaggle.json`（权限 600，勿对外暴露）。

---

*文档结束。补全轮完成后请以 `BACKFILL_COMPLETE.json` 与最新 zip 的 HTTP `Content-Length` 为最终交付依据。*
