赛事任务:给你蛋白和 RNA 各自的"字母串",让你画出它们贴在一起后,整个组合体长什么样——也就是每个原子在三维空间里站在哪个位置。

每张"画"要保存成一个特殊格式的文件——叫 cif 文件(行话名,你不用记,就理解成"用坐标记录的 3D 画"就行)。最后三张画打包成 output.zip 提交。



| **阶段**       | **步骤**                                             | **实际在解题流程里的角色**                                 |
| -------------- | ---------------------------------------------------- | ---------------------------------------------------------- |
| 一、云环境配置 | 注册魔搭启动 Notebook                                | 借了一台带 GPU 的"云电脑"当工作台                          |
| 二、运行代码   | 下载 Baseline 代码和数据(`git clone`)                | 把比赛的代码 + 三个样本的"字母串"下载到云电脑              |
|                | 运行 Baseline 代码(`bash run_protenix_inference.sh`) | 让 AI"画师"开始画——里面其实做了 4 件事(下面展开)           |
|                | 拿到结果文件(收到了一份生成好的-`output.zip`)        | 这就是你的"答卷"——三张画好的"立体画"                       |
| 三、提交作品   | 上传到比赛官网                                       | 系统拿你画的画跟"标准答案"对比,算出你画得有多像 = 你的分数 |



### `bash` 命令里,机器做了 4 件事

跑 Baseline 那 1 小时,看起来什么都没发生(终端在刷一堆日志),其实背后机器做了 4 件事:

| 目标            | 步骤                    | 终端日志代码在干嘛                                           | 阶段产出物（见如下图）           |
| --------------- | ----------------------- | ------------------------------------------------------------ | -------------------------------- |
| **让画师"画画** | **① 下载 AI 画师**      | 从云端把一个**几个 GB 大小的 AI 画师**——也就是 Protenix 模型——下载到你的云电脑。**这一步占了大头时间**(约 40 分钟),以后再跑就不用重新下载了 | 模型权重文件                     |
|                 | **② 给 r001 画 5 张画** | 画师每次画的细节都有点随机,所以默认会画 **5 张备选**(这是 Protenix 的 `num_samples=5` 参数控制的,也可以改),顺便给每张打个"把握度评分"——画师自己估计这张画大概有多准(范围 0~1,数字越大越自信) | r001 的 5 张 cif + 5 个评分文件  |
|                 | ③ 依次画 r002 和 r003   | 同样流程画第二个和第三个样本。**但 r003 因为太大,很可能让显存爆掉,画到一半崩溃**(这是 Baseline 最大的坑,后面会讲) | r002 的 5 张 cif;r003 大概率失败 |
| **挑哪张交**    | **④ 挑画 + 打包提交**   | 从每个样本的 5 张备选里**默认挑第 1 张**(为了让代码尽量简单、让你能快速跑通，所以先没挑把握度最高的一张),三个样本的画合在一起打包成 `output.zip` | 最终提交的 zip 文件              |

所以你刚才那一行 `bash` 命令其实就是 Baseline 在完整地把"画 + 挑"两件事做完了一遍

**这两件事 Baseline 都做得很基础,目的是先帮你打通整个流程,把更精细的优化空间留给你**:

- **画的时候**:没让画师参考同类作品(MSA 暂时关掉了),其中 r003 这张因为太大也没画出来
- **挑的时候**:简单选了第 1 张,把握度最高的那张还没用上

这就是为什么你能顺利拿到分数,但分数还有很大上升空间。**这两块每一块都是你提分的入口。**

> 💡 **顺便认识一下 Protenix**
>
> Protenix 是这次 Baseline 用的"AI 画师"——一个开源的"分子结构画师模型"。你可以理解成 AlphaFold 的开源同类。我们这次直接用的是官方推荐版本,没做任何额外训练。

## 1. zip 里其实就是 3 张"画"

打开你提交的 `output.zip`,会看到三个 cif 文件:

```
output.zip
 ├── 1_pred.cif    ← 你给 r001 画的立体图
 ├── 2_pred.cif    ← 你给 r002 画的立体图
 └── 3_pred.cif    ← 你给 r003 画的立体图
```



## 2. 系统怎么给你打分?

**一句话:把你画的画跟"真实长相"对比,看你画得有多像,差得越小、分越高。**

但"画得像不像"怎么量化?系统会从 4 个角度打分,**还是用画像比喻你来理解**:

| 指标         | 指标含义                | 指标看什么用画像比喻                                         |
| ------------ | ----------------------- | ------------------------------------------------------------ |
| **RMSD**     | 每个原子位置差了多远    | "你画的脸,五官位置平均偏了多少"——**越小越好**                |
| **TM-score** | 整体形状像不像          | "脸型整体轮廓的相似度"——**越大越好(0-1 之间)**               |
| **lDDT**     | 局部细节准不准          | "局部的耳朵、鼻子各部位画得准不准"——**越大越好**             |
| **iRMSD**    | 蛋白和 RNA 怎么贴在一起 | "两个人握手的角度对不对"——**这是 RNA-蛋白任务的题眼,权重最高** |



最终分数是这 4 项的**加权组合**,Leaderboard 上分数**越高越好**。Baseline 的实测分数大约在 0.32 左右,作为参考基准。

## 4. 为什么我的分数不高?

Baseline 在**默认配置下**(MSA 关闭 + 5 张备选取第 1 张 + r003 大概率失败)的实测分数大约在 **0.32 左右**,这分数低**完全正常**——它就是一个"够用就行"的入门示范:能跑通、能出结果、能拿到分数,**绝对不是高分方案**。它的存在是为了让你有个**起点**,而不是终点。

**下面是分数低的一些原因分析：**

**1. ⚠️ r003 大概率没画出来**

r003 是最大的样本,Baseline 画它的时候**很可能因为显存不够直接崩了**——也就是说你提交的 zip 里**只有 1_pred.cif 和 2_pred.cif 两张画,r003 那张等于交了白卷**。

**这是你提分最容易的入口**——把 r003 救回来,分数立刻就能涨一截。

**2. 5 张备选画,Baseline 默认只交第 1 张**

画师对每个样本画了 **5 张备选画 + 5 个把握度评分**,Baseline 直接用了第 1 张。但其实第 1 张不一定最好——**读一下画师对每张画的"把握度",挑把握度最高的那张交,通常会涨分**。

**3. 没让画师"参考同类作品"**

打个比方:你让画师画一只从没见过的鸟,如果**只看一张正面照**,画出来可能不太准;但如果**同时看十几张近亲的照片**(麻雀、燕子、鸽子……),画师就能猜出哪些特征是鸟类共有的、哪些是这一只独有的。

这种"参考同类"的功能行话叫 **MSA(多序列比对)**。Baseline 默认关掉了 MSA(开启 MSA 需要联网拉同源序列数据库,这一步比较慢且容易出错,所以示例代码里关掉了)。**想办法把 MSA 开起来,也能涨不少分**。



**把 AI 当作你的 24 小时助教。** 遇到任何不懂的概念、任何报错、任何代码块,都可以立刻问。

特别是 RNA-蛋白结构预测这种**跨学科赛题**——涉及深度学习 + 结构生物学 + Python 工程,你不可能每个领域都懂。**用 AI 把你不懂的部分实时补上,效率会比自己一行行查资料快很多倍。**





### 四个常用 Prompt 模板

**模板 1:解释代码**(遇到看不懂的代码时用)

```
请逐行解释以下代码,重点告诉我:
1. 每行在做什么
2. 为什么需要这一步
3. 哪些参数可调,调了之后会怎样

[粘贴代码]
```



**模板 2:Debug 报错**(遇到报错信息时用)

```
我在运行 Protenix 时遇到了报错:
[粘贴完整报错信息]

我的环境是 Linux + NVIDIA GPU(显存 24GB)+ Python 3.10 + Protenix 0.5.0。
请帮我分析可能的原因,并给出修复建议。
```



**模板 3:理解概念**(遇到不懂的名词时用)

```
请用具体例子讲解 [概念名称],类比生活中的场景,
并告诉我它在 RNA-蛋白结构预测任务中扮演什么角色。
```



**模板 4:理解生物学/结构生物学术语**(看不懂专业词的时候用)

```
我是 AI 工程背景,没接触过结构生物学。请用大白话和一个生活化的类比,
给我解释 [RMSD / TM-score / iptm / MSA / cif 格式 / ……] 是什么意思?
它在 AI 预测模型里起什么作用?
```





**比赛期间，每天有 3 次提交机会**

> **策略：本地多跑几个改进版本 → 挑当天最值得验证的 1-3 版提交 → 看分数反馈 → 第二天调整方向继续**

**那"在本地怎么知道改得有没有效"?——靠 Baseline 自带的两个评估指标。**



## 1. 本地有两个评估指标

### 评估指标①:看缺了几张画

跑完 Baseline 后,**先去** `protenix_outputs/submit/` **文件夹看看**——

| 结果                               | 看到几个 cif 文件说明                           |
| ---------------------------------- | ----------------------------------------------- |
| **3 个**(1_pred / 2_pred / 3_pred) | 三张都画出来了 ✅ 满血提交                       |
| **2 个**(只有 1_pred 和 2_pred)    | r003 崩了 ⚠️ 等于交白卷,大概率分数停在 0.32 左右 |
| **少于 2 个**                      | 基础环境有问题,先排查报错                       |

**这一项是最容易判断的指标**——不需要懂任何技术,数文件个数就行。

### 评估指标②:看每张画的"把握度评分"

每张备选画的同一目录下,都有一个 `summary_confidence_*.json` 文件，可以查到每张画的把握度评分



| 指标            | 指标含义                                            | 指标含义怎么看                        |
| --------------- | --------------------------------------------------- | ------------------------------------- |
| `ptm`           | 整体形状的把握度                                    | **越大越好(0~1)**                     |
| `iptm`          | 蛋白和 RNA 怎么贴的把握度                           | **越大越好(0~1)**,这是 RNA 任务的题眼 |
| `ranking_score` | 画师综合给自己打的"总分"(通常基于 iptm 和 ptm 加权) | **越大越好**,挑画的时候直接看这个就行 |

>  **经验规律**:5 张备选里，本地 `ranking_score` 之和越大,真实提交分数大概率越高——所以**挑画的时候按 ranking_score 排个序、挑最大的那张**,通常就能涨分。



>  **经验规律**:5 张备选里，本地 `ranking_score` 之和越大,真实提交分数大概率越高——所以**挑画的时候按 ranking_score 排个序、挑最大的那张**,通常就能涨分。

#### 怎么找到`summary_confidence_*.json`文件？

💡

在 `AI_Camp_RNA_2026/protenix_outputs/` 这个目录,左边有 `1`、`2`、`3`、`submit`、`output.zip`。

json 文件在 `1`、`2`、`3` 这三个文件夹里面的更深处。我以 `1`(就是 r001)为例,带你点进去:

- 第一步:双击 `1` 文件夹 → 进去后会看到一个 `r001` 文件夹
- 第二步:双击进入 `r001` → 里面会有一个 `seed_101`(或 `seed_xxx`)文件夹
- 第三步:双击进入 `seed_101` → 里面会有一个 `predictions` 文件夹
- 第四步:双击进入 `predictions` → 里面就是 5 个 cif + 5 个 json



💡 **经验规律**:每天的 3 次最好**分散一点用**——别一上来就把 3 次全交了,最好每次提交后等到分数出来再交下一次。这样你能在当天就形成 **"改 → 提 → 看 → 改"** 的快循环,迭代速度最快。

## 3. 每次实验都记一笔

建议你搞一个**实验记录表**(Markdown / 记事本 / 飞书随便)。否则改了几轮、跨了几天后,你**会忘记哪天交了哪版、哪版得了多少分：**

| 日期 | 第几次 | 版本 | 改了什么                  | submit 里几个 cif | 三张画的 ranking_score 之和 | 提交得分     |
| ---- | ------ | ---- | ------------------------- | ----------------- | --------------------------- | ------------ |
| 4/25 | #1     | v1   | Baseline 原版             | 2 个(r003 崩了)   | 1.40(只算 r001+r002)        | 0.32(基准线) |
| 4/25 | #2     | v2   | 救回 r003(降 sample 数)   | 3 个 ✅            | 2.05                        | 0.45         |
| 4/25 | #3     | v3   | v2 + 挑最高 ranking_score | 3 个 ✅            | 2.18                        | 0.48         |
| 4/26 | #1     | v4   | v3 + 开 MSA               | 3 个 ✅            | 2.35                        | 0.55         |
| ...  |        |      |                           |                   |                             |              |

## 4. Baseline 还有哪些可以改进的地方?

回顾一下,Baseline 在三个层面都做得很基础:

**1. "画" 这一步**

- **r003 没画出来**——三张少一张,直接丢了三分之一的分
- **MSA 关掉了**——画师没参考"同类作品",**精度打了折扣**

**2. "挑" 这一步**

- 默认拿了第 1 张 sample,**没用 ranking_score 挑最高分的那张**

**3. "结构本身"层面**

- 没做任何后处理(模型输出的结构有时候有小瑕疵,可以用工具修一修)





## 方向 1:挑把握度最高的那张画 ⭐ 最容易涨分

**为什么要做这个?**

本次Baseline 拿了第 1 张备选,但其实画师对每张画都打了 `ranking_score` ——**这个分数越高,画得越准**。

你只要写几行代码:**读 5 个 json,挑** `ranking_score` **最高的那张作为提交**,通常就能涨一点分。



**🔰 最简单的做法**

在 `run_protenix_inference.sh` 脚本里(或者另写一个 Python 后处理脚本),把"挑画"那段逻辑改成:

> 1. 读取 `protenix_outputs/<样本>/<seed>/predictions/` 下所有 5 个 `summary_confidence_*.json`
> 2. 挑出 `ranking_score` 最大的那个,记下对应的 sample 编号(比如 sample_3)
> 3. 把对应的 `<样本>_sample_3.cif` 复制到 `submit/` 目录,改名为 `1_pred.cif`(或 2_pred / 3_pred)

> 💬 **不会写代码?直接问 AI:**
>
> "我在做 RNA-蛋白结构预测比赛,Protenix 跑完后会在 `protenix_outputs/<样本名>/seed_xxx/predictions/` 下生成 5 个 cif 文件 + 5 个 `summary_confidence_*.json`。
>
> 请帮我写一段 Python 脚本:
>
> 1. 读取每个样本下的 5 个 summary_confidence,挑 ranking_score 最大的那个
> 2. 把对应的 cif 文件复制到 submit/ 目录,命名为 `1_pred.cif` / `2_pred.cif` / `3_pred.cif`
> 3. 最后把 submit/ 打包成 output.zip
>
> 需要我提供 summary_confidence 文件的实际内容吗?"



## 方向 2:救回 r003(把白卷补上) ⭐ 涨分最多

**为什么要做这个?**

Baseline 跑 r003 时**显存爆了崩溃**,等于这道题交了白卷——**直接丢了三分之一的分**。把 r003 救回来,大概率比"挑最高分"涨得还多。



**为什么会显存爆掉?**

r003 是个超大蛋白(约 920 个氨基酸)。Protenix 在做注意力计算时,显存占用大致跟**序列长度的平方**成正比——r003 序列特别长(约 920 残基),平方下来一下就把 24GB 显存填满了。本次魔搭免费提供的 GPU 显存装不下。



**🔰 最简单的几个解法**

按尝试难度从低到高:

#### 方案 A:减小 batch / 降低 sample 数(不花钱,先试这个)

让 Protenix 一次少画几张备选(比如从 5 张降到 1-2 张),内存压力会小很多。

> 💬 **怎么改?让 AI 给你方案:**
>
> "我在用 Protenix 跑结构预测,r003 这个样本因为太大(920 个氨基酸的蛋白)出现 CUDA out of memory 错误。
>
> 我用的是 24GB 显存的 A10 GPU。请告诉我:
>
> 1. 有哪些可以**不换硬件**就降低显存占用的命令行参数(比如 --num_samples、--use_lower_precision 之类的)
> 2. 给我一个修改后的 protenix predict 命令,只针对 r003 用更省显存的参数
> 3. 这样改之后精度大概会损失多少?"



#### 方案 B:把 r003 单独换更大显存的 GPU 跑

如果方案 A 还是不行,可以**单独把 r003 换到 32GB 或 40GB 显存的 GPU 上跑**(r001 和 r002 继续用免费 A10)——魔搭、AutoDL 都能租到**显存更大的 GPU**(比如 V100 32GB、A100 40GB / 80GB 等),按小时计费



#### 方案 C:用 CPU offload(把部分计算挪到内存)

Protenix 支持把一部分中间结果暂存到内存(而不是显存),代价是速度更慢。**这个相对复杂,建议方案 A、B 都试过再考虑。**需要**额外内存**（建议 32GB 以上系统内存）

> 💬 **完全卡住了?把报错丢给 AI:**
>
> "我是 AI 生物赛新手。运行 Protenix 时遇到了这个报错:
>
> [粘贴完整报错]
>
> 我的环境是 Linux + NVIDIA A10 24GB 显存 + Python 3.10 + Protenix 0.5.0。请帮我:
>
> 1. 解释这个报错的原因
> 2. 给出 3 种从易到难的修复方案
> 3. 每个方案给可以直接复制的修复命令"





## 方向 3:打开 MSA(让画师参考同类作品)

**为什么要做这个?**

Baseline 默认关掉了 MSA(多序列比对)——开启 MSA 需要联网拉同源序列数据库,这一步比较慢且容易出错,所以示例代码里关掉了。

但 MSA 的作用就像我们前面说的:**让画师同时看十几张近亲的照片**,精度会显著提升——**这是 Protenix 官方推荐的标准用法,关掉等于砍了模型一条腿**。



**🔰 最简单的做法**

绕过"实时联网拉 MSA 数据库"的问题,有两条路:

- **存储**：本地 MSA 数据库可能要几十 GB 到上百 GB（看选哪个数据库）

- **时间**：MSA 生成本身比较慢，长蛋白（如 r003 的 920 残基）可能要几小时

  

#### 路径 A:本地预先准备好 MSA 文件(推荐)

很多公开数据库(比如 ColabFold、UniRef)提供**预先算好的 MSA**,你可以下载下来放在云电脑里,然后告诉 Protenix"用这些本地文件",就不用联网了。



#### 路径 B:用 ColabFold 等在线服务先生成 MSA,再喂给 Protenix

ColabFold 是免费的在线服务,可以**只生成 MSA、不跑模型**。先在 ColabFold 上拿到 MSA 文件,再传到云电脑里给 Protenix 用。

> 💬 **完全没接触过 MSA?让 AI 给你完整方案:**
>
> "我在用 Protenix 做 RNA-蛋白结构预测。Baseline 默认关掉了 MSA(`--use_msa false`),因为联网拉数据库会失败。
>
> 我想把 MSA 用起来,请帮我:
>
> 1. 解释 MSA 在 Protenix 里到底是怎么用的、为什么对精度重要
> 2. 给我两条路径(本地预算 MSA / 用 ColabFold 在线生成)的具体操作步骤
> 3. 每条路径需要哪些工具、大概要多少时间和存储
> 4. 如果选 ColabFold,给我一个最简单的入口"

**📌 几个常见的坑**:

- MSA 生成可能很慢(蛋白长度越长越慢,r003 可能要几小时)
- 蛋白和 RNA 的 MSA 处理方式不同——**RNA 的同源序列数据库远小于蛋白**(Rfam vs UniProt),且 RNA 同源性识别本身就更难,所以**开 MSA 对蛋白部分的精度提升更明显,对 RNA 部分提升相对有限**
- 第一次配置可能踩各种坑,**预留半天时间** 比较稳

------

## 方向 4:挑画的时候不只看 ranking_score,综合 iptm + ptm

**为什么要做这个?**

`ranking_score` 是画师对自己的总评,但**对 RNA-蛋白任务来说,**`iptm`**(蛋白-RNA 界面把握度)更重要**——因为评分指标里 iRMSD(界面 RMSD)权重最高。



**🔰 最简单的做法**

挑画的时候,**不再只看** `ranking_score`**,而是用一个加权公式**:

```
综合分 = 0.7 × iptm + 0.3 × ptm
```



(权重可以自己调试。这只是经验起点)

挑"综合分"最高的那张交。

> 💬 **怎么实现?让 AI 改你的挑画脚本:**
>
> "在我之前那个挑画的 Python 脚本里(挑 ranking_score 最大的那张),我想改成挑综合分最大的:综合分 = 0.7 × iptm + 0.3 × ptm。
>
> 请把脚本改了,并告诉我:
>
> 1. 这个加权值有什么调参技巧?
> 2. 怎么对比"按 ranking_score 挑"和"按综合分挑"两种方式哪个更好?"







## 方向 5:换更强的模型 / 自己微调

Protenix 默认用的是 `protenix_base_default_v0.5.0`——这是**通用的基础版**。如果你有时间和算力,可以:

- 试试 Protenix 的**其他变体模型**(比如更大的版本、专门针对 RNA 微调过的版本)——通用基础版可以用魔搭免费 A10，更大的变体可能需要 V100 32GB / A100 40GB 起步。
- **自己针对 RNA-蛋白复合物数据微调**(需要大量公开数据 + 多张高端 GPU,通常 4-8 张 A100 40GB 起步，成本很高)

**⚠️ 但是新手要注意**:

- 微调模型**门槛极高**——需要懂 PyTorch、懂结构生物学、懂训练流程,**新手不建议**
- 换大模型也可能没用——更大的模型不一定更适合 RNA-蛋白任务

**建议**:**做完前两档把分数榨干性价比更高**,这一档真的是给冲奖金的同学准备的。



提分这件事的核心,**不是改得越多越好**,而是:

> **每一次改动都有据可查,每一次提交都有信心支撑。**

如果你按这一节的方法做了——

✅ 用本地的 cif 个数 + ranking_score 判断每次改进是否有效 

✅ 每个版本都记在了实验表里(包括日期、第几次提交、得分) 

✅ 把每天的 3 次提交都用在了刀刃上——验证假设、做对照实验、攒最好结果

那**不管最终分数涨了多少**,你都已经完整走过了:

> **读题 → 找方向 → 改代码 → 本地验证 → 提交 → 复盘**

这才是这次比赛真正要带走的东西。



