AlphaFold 3 完整教學 — 生物分子結構預測推論管線

來源: google-deepmind/alphafold3 | 8,239 stars | 1,270 forks | Python | Apache-2.0

論文: Abramson, J. et al. “Accurate structure prediction of biomolecular interactions with AlphaFold 3.” Nature 630, 493-500 (2024). doi:10.1038/s41586-024-07487-w


1. 專案概述 (Project Overview)

1.1 什麼是 AlphaFold 3?

AlphaFold 3 (AF3) 是 Google DeepMind 開發的第三代 biomolecular structure prediction (生物分子結構預測) 系統。相較於 AlphaFold 2 僅能預測蛋白質結構,AF3 將預測範圍大幅擴展至所有生物分子的交互作用 (biomolecular interaction),包括:

  • Protein (蛋白質): 單鏈或多鏈複合體 (multimer complex)
  • DNA (去氧核糖核酸): 單鏈或雙鏈
  • RNA (核糖核酸): 單鏈或多鏈,含 modified residues (修飾殘基)
  • Ligand (配體): 小分子藥物、代謝物,支援 CCD code 與 SMILES 輸入
  • Ion (離子): 金屬離子如 Mg2+、Zn2+ 等(在 AF3 中作為 ligand 處理)
  • Modified residues (修飾殘基): post-translational modification (PTM; 轉譯後修飾),如磷酸化、糖基化

1.2 AF3 vs AF2 的關鍵差異

特性AlphaFold 2AlphaFold 3
預測目標僅蛋白質蛋白質 + DNA + RNA + 配體 + 離子
核心模組EvoformerPairformer (取代 Evoformer)
結構生成直接座標回歸Diffusion module (擴散模型)
信心指標pLDDT, PAEpLDDT, PAE, pTM, ipTM, ranking_score
MSA 處理深度 MSA簡化 MSA + Pairformer
輸入格式FASTAJSON (含 sequences, bondedAtomPairs 等)

1.3 AF3 能解決什麼問題?

AF3 的核心價值在於預測 biomolecular complex (生物分子複合體) 的三維結構,這在 drug discovery (藥物發現) 中至關重要:

  1. Target validation (靶點驗證): 預測藥物靶點蛋白與配體的結合模式
  2. Structure-based drug design (SBDD; 結構導向藥物設計): 提供 binding site (結合位點) 結構資訊
  3. Protein-protein interaction (PPI; 蛋白質-蛋白質交互作用): 預測抗體-抗原介面
  4. Nucleic acid interaction (核酸交互作用): 預測蛋白質-DNA/RNA 複合體結構

graph LR
    subgraph Input["輸入 (Input)"]
        A[Protein 序列] 
        B[DNA/RNA 序列]
        C[Ligand SMILES/CCD]
        D[Ion 離子]
    end
    
    subgraph AF3["AlphaFold 3 Pipeline"]
        E[Data Pipeline
MSA + Template Search] F[Pairformer Module] G[Diffusion Module] H[Confidence Head] end subgraph Output["輸出 (Output)"] I[3D Structure
mmCIF 格式] J[Confidence Metrics
pLDDT / PAE / ipTM] K[Embeddings
single + pair] end A --> E B --> E C --> E D --> E E --> F --> G --> I G --> H --> J F --> K

1.4 授權與使用限制

  • Source code (原始碼): Apache License 2.0(可自由使用,含商業用途)
  • Model parameters (模型參數): 需向 Google DeepMind 申請,受 WEIGHTS_TERMS_OF_USE 約束
  • AF3 Output (輸出): 受 OUTPUT_TERMS_OF_USE 約束
  • AlphaFold Server: alphafoldserver.com 提供免費非商業使用(配體與修飾種類較受限)

重要提示: AF3 模型參數僅能直接從 Google 取得。使用須遵守相關條款。任何使用本程式碼、模型參數或產出的研究發表,都必須引用上述 Nature 論文。


2. 核心架構與技術原理

2.1 整體架構概覽

AF3 的推論管線 (inference pipeline) 分為兩大階段:

  1. Data Pipeline (資料管線): CPU-only,負責 genetic search (基因搜尋) 與 template search (模板搜尋)
  2. Model Inference (模型推論): 需 GPU,包含 Pairformer、diffusion module、confidence head

flowchart TB
    subgraph DataPipeline["Stage 1: Data Pipeline (CPU-only)"]
        direction TB
        S1[Input JSON] --> S2[Sequence Parsing]
        S2 --> S3[Jackhmmer / Nhmmer
MSA Search] S2 --> S4[HMMSearch
Template Search] S3 --> S5[MSA Features] S4 --> S6[Template Features] end subgraph ModelInference["Stage 2: Model Inference (GPU)"] direction TB S5 --> S7[Input Embedder] S6 --> S7 S7 --> S8[Pairformer
48 blocks] S8 --> S9[Diffusion Module
Denoising] S9 --> S10[Structure Module
Atom Positions] S8 --> S11[Confidence Head
pLDDT / PAE / pTM] S8 --> S12[Distogram Head] end subgraph Output["Output"] S10 --> S13[mmCIF Structure] S11 --> S14[Confidence JSON] S12 --> S15[Distogram NPZ] end DataPipeline --> ModelInference

2.2 Pairformer — 取代 Evoformer 的核心

AF3 用 Pairformer 取代 AF2 的 Evoformer。關鍵差異:

  • 移除 MSA stack (MSA 處理層): AF2 的 Evoformer 在 MSA representation 和 pair representation 之間交替更新。AF3 的 Pairformer 僅保留 pair representation 的更新,大幅簡化架構。
  • Single representation (單一表徵): Pairformer 維護 single representation(每個 token 一個向量)和 pair representation(每對 token 一個矩陣),透過 48 個 block 迭代更新。
  • Triangle updates (三角更新): 保留 AF2 的 triangle multiplicative update 和 triangle attention,確保結構一致性。

2.3 Diffusion Module (擴散模組)

AF3 最革命性的改變是引入 diffusion-based structure generation (基於擴散的結構生成):

  1. Forward process (前向過程): 將原子座標逐步加噪至高斯分佈
  2. Reverse process (逆向過程/去噪): 訓練 denoising network 從噪聲中還原結構
  3. Diffusion transformer: 使用 transformer 架構進行去噪,搭配 atom cross-attention 機制

這種方法的優勢:

  • 可自然處理不同類型的分子(蛋白質、核酸、配體)
  • 生成的結構在化學上更加合理
  • 支援多次 sampling,每次可產生不同但合理的構象

2.4 Confidence Metrics (信心指標)

AF3 提供多層次的信心評估,這些指標對判斷預測品質至關重要:

指標範圍意義判讀標準
pLDDT0-100per-atom 局部距離差異測試>90 很好, 70-90 良好, 50-70 低信心
PAE0-31.75 A對齊後的位置預測誤差越低越好;高值表示相對位置不確定
pTM0-1全結構 TM-score 預測>0.5 表示整體折疊可能正確
ipTM0-1介面 TM-score(鏈間交互)>0.8 高信心, <0.6 失敗, 0.6-0.8 灰色地帶
ranking_score-100 ~ 1.5排序用綜合分數= 0.8ipTM + 0.2pTM + 0.5disorder - 100has_clash

graph TD
    subgraph ConfidenceMetrics["Confidence Metrics 階層"]
        A["ranking_score
(排序用)"] B["ipTM
(介面信心)"] C["pTM
(全結構信心)"] D["PAE
(成對誤差矩陣)"] E["pLDDT
(每原子信心)"] F["chain_pair_pae_min
(鏈對 PAE)"] G["chain_pair_iptm
(鏈對 ipTM)"] H["contact_probs
(接觸機率)"] end A -->|"0.8 * ipTM + 0.2 * pTM"| B A --> C B -->|"per chain-pair"| G C -->|"per chain"| D D -->|"per atom"| E D -->|"min per chain-pair"| F D -->|"8A threshold"| H style A fill:#e74c3c,color:#fff style B fill:#e67e22,color:#fff style C fill:#f39c12,color:#fff style D fill:#2ecc71,color:#fff style E fill:#3498db,color:#fff

2.5 原始碼結構

AF3 的原始碼組織清晰,以下是關鍵模組:

 1alphafold3/
 2├── run_alphafold.py              # 主要入口
 3├── docker/Dockerfile             # Docker 容器設定
 4├── fetch_databases.sh            # 資料庫下載腳本
 5├── src/alphafold3/
 6   ├── common/
 7      └── folding_input.py      # JSON 輸入解析
 8   ├── constants/
 9      ├── atom_types.py         # 原子類型定義
10      └── residue_names.py      # 殘基名稱
11   ├── data/
12      ├── pipeline.py           # Data pipeline 主流程
13      ├── msa.py                # MSA 處理
14      ├── templates.py          # Template search
15      └── tools/
16          ├── jackhmmer.py      # Jackhmmer wrapper
17          ├── nhmmer.py         # Nhmmer wrapper
18          └── hmmsearch.py      # HMMSearch wrapper
19   ├── model/
20      ├── model.py              # 模型主類別
21      ├── model_config.py       # 模型配置
22      ├── confidences.py        # 信心指標計算
23      ├── network/
24         ├── evoformer.py      # Pairformer 實作 (沿用檔名)
25         ├── diffusion_head.py # Diffusion module
26         ├── diffusion_transformer.py
27         ├── confidence_head.py
28         ├── atom_cross_attention.py
29         └── distogram_head.py
30      ├── scoring/
31         ├── scoring.py        # 結構評分
32         └── chirality.py      # 手性檢查
33      └── pipeline/
34          └── pipeline.py       # Model pipeline
35   └── jax/geometry/             # JAX 幾何運算
36       ├── rotation_matrix.py
37       ├── rigid_matrix_vector.py
38       └── vector.py

3. 安裝與環境設定

3.1 系統需求

需求項目最低規格建議規格
作業系統Linux (Ubuntu 22.04 LTS)Ubuntu 22.04 LTS
GPUNVIDIA P100 (1,024 tokens)A100 80 GB 或 H100 80 GB
CUDA12.612.6
RAM64 GB170 GB+
磁碟空間252 GB (下載) + 630 GB (解壓)1 TB SSD
Compute Capability6.0+8.0+

Token 容量對照: A100 80GB 最大支援 5,120 tokens,A100 40GB 最大 4,352 tokens,V100 最大 1,280 tokens,P100 最大 1,024 tokens。

3.2 安裝步驟

Step 1: 安裝 Docker 與 NVIDIA 支援

 1# 安裝 Docker
 2sudo apt-get update
 3sudo apt-get install -y ca-certificates curl
 4sudo install -m 0755 -d /etc/apt/keyrings
 5sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
 6sudo chmod a+r /etc/apt/keyrings/docker.asc
 7
 8echo \
 9  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
10  https://download.docker.com/linux/ubuntu \
11  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
12  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
13
14sudo apt-get update
15sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
16    docker-buildx-plugin docker-compose-plugin
17
18# 安裝 NVIDIA 驅動程式
19sudo apt-get -y install alsa-utils ubuntu-drivers-common
20sudo ubuntu-drivers install
21nvidia-smi  # 確認驅動安裝成功
22
23# 安裝 NVIDIA Container Toolkit
24curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
25    sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
26curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
27    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
28    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
29sudo apt-get update
30sudo apt-get install -y nvidia-container-toolkit
31nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json
32systemctl --user restart docker
33
34# 驗證 GPU 可見性
35docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi

Step 2: 下載 AF3 原始碼與資料庫

 1# 下載原始碼
 2git clone https://github.com/google-deepmind/alphafold3.git
 3cd alphafold3
 4
 5# 下載基因資料庫 (~252 GB 下載, ~630 GB 解壓)
 6# 建議在 screen 或 tmux 中執行
 7./fetch_databases.sh $HOME/public_databases
 8
 9# 確認資料庫結構
10ls $HOME/public_databases/
11# 預期結果:
12# mmcif_files/
13# bfd-first_non_consensus_sequences.fasta
14# mgy_clusters_2022_05.fa
15# nt_rna_2023_02_23_clust_seq_id_90_cov_80_rep_seq.fasta
16# pdb_seqres_2022_09_28.fasta
17# rfam_14_9_clust_seq_id_90_cov_80_rep_seq.fasta
18# rnacentral_active_seq_id_90_cov_80_linclust.fasta
19# uniprot_all_2021_04.fa
20# uniref90_2022_05.fa

Step 3: 申請並下載模型參數

  1. 前往 Google Form 填寫申請表
  2. 等待 2-3 個工作天取得核准
  3. 依照指示下載模型參數至 <MODEL_PARAMETERS_DIR>

注意: 資料庫目錄和模型參數目錄都不應放在 alphafold3 repo 目錄內,否則 Docker build 時會因複製大量資料而極度緩慢。

Step 4: 建置 Docker 容器

1cd alphafold3
2docker build -t alphafold3 -f docker/Dockerfile .
3
4# 若遇到 "No file descriptors available" 錯誤 (AlmaLinux/Rocky/RHEL):
5# docker build --ulimit nofile=65535:65535 -t alphafold3 -f docker/Dockerfile .

3.3 使用 Singularity 替代方案 (HPC 環境)

在高效能運算叢集 (HPC) 中,通常無法使用 Docker(需要 root 權限),這時可使用 Singularity:

1# 先建好 Docker image,再轉為 Singularity
2docker run -d -p 5000:5000 --restart=always --name registry registry:2
3docker tag alphafold3 localhost:5000/alphafold3
4docker push localhost:5000/alphafold3
5
6SINGULARITY_NOHTTPS=1 singularity build alphafold3.sif docker://localhost:5000/alphafold3:latest
7
8# 驗證 GPU 存取
9singularity exec --nv alphafold3.sif sh -c 'nvidia-smi'

4. 使用教學與範例

4.1 JSON 輸入格式

AF3 使用自訂 JSON 格式作為輸入,top-level 結構如下:

 1{
 2  "name": "Job name",
 3  "modelSeeds": [1, 2],
 4  "sequences": [
 5    {"protein": {...}},
 6    {"rna": {...}},
 7    {"dna": {...}},
 8    {"ligand": {...}}
 9  ],
10  "bondedAtomPairs": [],
11  "dialect": "alphafold3",
12  "version": 1
13}

4.2 範例一:單鏈蛋白質折疊

最基本的使用情境 — 預測單一蛋白質的三維結構:

 1{
 2  "name": "2PV7",
 3  "sequences": [
 4    {
 5      "protein": {
 6        "id": ["A", "B"],
 7        "sequence": "GMRESYANENQFGFKTINSDIHKIVIVGGYGKLGGLFARYLRASGYPISILDREDWAVAESILANADVVIVSVPINLTLETIERLKPYLTENMLLADLTSVKREPLAKMLEVHTGAVLGLHPMFGADIASMAKQVVVRCDGRFPERYEWLLEQIQIWGAKIYQTNATEHDHNMTYIQALRHFSTFANGLHLSKQPINLANLLALSSPIYRLELAMIGRLFAQDAELYADIIMDKSENLAVIETLKQTYDEALTFFENNDRQGFIDAFHKVRDWFGDYSEQFLKESRQLLQQANDLKQG"
 8      }
 9    }
10  ],
11  "modelSeeds": [1],
12  "dialect": "alphafold3",
13  "version": 1
14}

執行指令:

 1# 準備輸入目錄
 2mkdir -p $HOME/af_input $HOME/af_output
 3# 將上述 JSON 存為 $HOME/af_input/fold_input.json
 4
 5docker run -it \
 6    --volume $HOME/af_input:/root/af_input \
 7    --volume $HOME/af_output:/root/af_output \
 8    --volume <MODEL_PARAMETERS_DIR>:/root/models \
 9    --volume $HOME/public_databases:/root/public_databases \
10    --gpus all \
11    alphafold3 \
12    python run_alphafold.py \
13    --json_path=/root/af_input/fold_input.json \
14    --model_dir=/root/models \
15    --output_dir=/root/af_output

4.3 範例二:蛋白質-配體複合體

預測蛋白質與小分子藥物的結合模式 — drug discovery (藥物發現) 的核心應用:

 1{
 2  "name": "protein_ligand_complex",
 3  "sequences": [
 4    {
 5      "protein": {
 6        "id": "A",
 7        "sequence": "MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSH"
 8      }
 9    },
10    {
11      "ligand": {
12        "id": "B",
13        "ccdCodes": ["ATP"]
14      }
15    }
16  ],
17  "modelSeeds": [1, 2, 3],
18  "dialect": "alphafold3",
19  "version": 1
20}

使用 SMILES 指定自訂配體:

1{
2  "ligand": {
3    "id": "C",
4    "smiles": "CC(=O)Oc1ccccc1C(=O)O"
5  }
6}

4.4 範例三:蛋白質-DNA 複合體

 1{
 2  "name": "protein_dna_complex",
 3  "sequences": [
 4    {
 5      "protein": {
 6        "id": "A",
 7        "sequence": "MTEYKLVVVGAGGVGKSALTIQLIQNHFVDEYDPTIEDSY"
 8      }
 9    },
10    {
11      "dna": {
12        "id": "B",
13        "sequence": "ATCGATCGATCG"
14      }
15    },
16    {
17      "dna": {
18        "id": "C",
19        "sequence": "CGATCGATCGAT"
20      }
21    }
22  ],
23  "modelSeeds": [42],
24  "dialect": "alphafold3",
25  "version": 1
26}

4.5 範例四:含離子的蛋白質複合體

 1{
 2  "name": "protein_with_ions",
 3  "sequences": [
 4    {
 5      "protein": {
 6        "id": "A",
 7        "sequence": "MSKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATIGKLTLKFIC"
 8      }
 9    },
10    {
11      "ligand": {
12        "id": "B",
13        "ccdCodes": ["MG"]
14      }
15    },
16    {
17      "ligand": {
18        "id": "C",
19        "ccdCodes": ["ZN"]
20      }
21    }
22  ],
23  "modelSeeds": [1],
24  "dialect": "alphafold3",
25  "version": 1
26}

4.6 輸出結構解讀

執行完成後,輸出目錄結構如下:

 1output_dir/
 2├── seed-1_sample-0/
 3│   ├── job_name_seed-1_sample-0_model.cif       # 結構 (mmCIF)
 4│   ├── job_name_seed-1_sample-0_confidences.json # 完整信心指標
 5│   └── job_name_seed-1_sample-0_summary_confidences.json
 6├── seed-1_sample-1/
 7│   └── ...
 8├── job_name_model.cif               # 最佳排名結構
 9├── job_name_confidences.json        # 最佳排名信心指標
10├── job_name_summary_confidences.json
11├── job_name_data.json               # 含 MSA/template 的完整 JSON
12├── job_name_ranking_scores.csv      # 所有預測的排名分數
13└── TERMS_OF_USE.md

讀取信心指標的 Python 範例

 1import json
 2import numpy as np
 3
 4# 讀取 summary confidences
 5with open("job_name_summary_confidences.json") as f:
 6    summary = json.load(f)
 7
 8print(f"pTM:  {summary['ptm']:.3f}")
 9print(f"ipTM: {summary['iptm']:.3f}")
10print(f"ranking_score: {summary['ranking_score']:.3f}")
11print(f"has_clash: {summary['has_clash']}")
12
13# 讀取完整 confidences
14with open("job_name_confidences.json") as f:
15    conf = json.load(f)
16
17pae = np.array(conf["pae"])        # [num_tokens, num_tokens]
18plddts = np.array(conf["atom_plddts"])  # [num_atoms]
19contacts = np.array(conf["contact_probs"])  # [num_tokens, num_tokens]

讀取 embeddings

1import numpy as np
2
3with open("embeddings.npz", "rb") as f:
4    embeddings = np.load(f)
5    single = embeddings["single_embeddings"]  # [num_tokens, 384]
6    pair = embeddings["pair_embeddings"]       # [num_tokens, num_tokens, 128]

4.7 兩階段分離執行

AF3 支援將 data pipeline 和 model inference 分開執行,這對 HPC 資源最佳化非常實用:

 1# Stage 1: Data pipeline only (CPU, 不需 GPU)
 2python run_alphafold.py \
 3    --json_path=input.json \
 4    --run_inference=false \
 5    --output_dir=/output
 6
 7# Stage 2: Inference only (需 GPU, 不需重跑 MSA)
 8python run_alphafold.py \
 9    --json_path=/output/job_name_data.json \
10    --run_data_pipeline=false \
11    --output_dir=/output_inference

5. 進階功能

5.1 多種子 (Multiple Seeds) 與多 Sample

AF3 預設每個 seed 產生 5 個 sample。使用多 seed 可增加找到最佳構象的機會:

1{
2  "name": "multi_seed_prediction",
3  "modelSeeds": [1, 2, 3, 4, 5],
4  "sequences": [...],
5  "dialect": "alphafold3",
6  "version": 1
7}

排名策略:

  • 全複合體: 使用 ranking_score(越高越好)
  • 特定介面: 使用 chain_pair_iptmchain_pair_pae_min
  • 特定鏈: 使用 chain_ptmchain_iptm

5.2 Modified Residues (修飾殘基)

支援 post-translational modification (PTM; 轉譯後修飾):

 1{
 2  "protein": {
 3    "id": "A",
 4    "sequence": "MVLSPADKTNVKAAWGK",
 5    "modifications": [
 6      {"ptmType": "SEP", "ptmPosition": 5},
 7      {"ptmType": "TPO", "ptmPosition": 10}
 8    ]
 9  }
10}

常用 PTM 類型:

  • SEP: Phosphoserine (磷酸化絲胺酸)
  • TPO: Phosphothreonine (磷酸化蘇胺酸)
  • PTR: Phosphotyrosine (磷酸化酪胺酸)
  • MLY: N-dimethyl-lysine
  • M3L: N-trimethyl-lysine

5.3 Covalent Bonds (共價鍵)

指定分子間或分子內的 covalent bond (共價鍵),例如配體與蛋白質之間的共價結合:

 1{
 2  "name": "covalent_complex",
 3  "sequences": [...],
 4  "bondedAtomPairs": [
 5    [
 6      ["A", 1, "SG"],
 7      ["B", 1, "C1"]
 8    ]
 9  ],
10  "dialect": "alphafold3",
11  "version": 1
12}

每個 bond 指定兩個原子:[chain_id, residue_index, atom_name]

5.4 Custom MSA 與 Templates

對於已有 MSA 資料的情境,可跳過 data pipeline 直接提供:

1{
2  "protein": {
3    "id": "A",
4    "sequence": "MVLSPADKTNVK",
5    "unpairedMsa": ">query\nMVLSPADKTNVK\n>hit1\nMVLSPADKTNIK\n",
6    "pairedMsa": "",
7    "templates": []
8  }
9}

或使用外部檔案(version >= 2):

1{
2  "protein": {
3    "id": "A",
4    "sequence": "MVLSPADKTNVK",
5    "unpairedMsaPath": "/path/to/unpaired.sto",
6    "pairedMsaPath": "/path/to/paired.sto"
7  }
8}

5.5 User-provided CCD (自訂化學成分)

當 SMILES 不足以描述複雜配體時(例如需要明確命名原子以建立共價鍵),可使用 CCD mmCIF 格式:

1{
2  "name": "custom_ligand",
3  "sequences": [...],
4  "userCCD": "data_MY_LIGAND\n_chem_comp.id MY_LIGAND\n...",
5  "dialect": "alphafold3",
6  "version": 1
7}

或指向外部檔案(version >= 3):

1{
2  "userCCDPath": "/path/to/my_ligand.cif"
3}

5.6 效能最佳化

分片式基因資料庫 (Sharded Databases)

對於有多 CPU 核心的機器,分片可大幅加速 genetic search:

 1# 隨機打散序列
 2seqkit shuffle --two-pass uniprot.fasta
 3
 4# 分割成 16 片
 5seqkit split2 --by-part 16 uniprot.fasta
 6
 7# 執行時指定分片路徑與 Z-value
 8python run_alphafold.py \
 9    --uniref90_database_path="uniref90.fasta@128" \
10    --uniref90_z_value=153742194 \
11    --jackhmmer_n_cpu=2 \
12    --jackhmmer_max_parallel_shards=16

預計算 MSA 的重用策略

當需要折疊多個候選鏈與一組固定鏈的組合時:

  1. 對固定鏈執行 --run_inference=false 產生 MSA
  2. 將固定鏈的 unpairedMsapairedMsatemplates 複製到新 JSON
  3. 候選鏈欄位留空,pipeline 會自動計算
  4. 對組裝好的 JSON 執行 --run_data_pipeline=false

這將 N x M 次完整計算降為 N + M 次 data pipeline + N x M 次推論。

Compilation Buckets (編譯桶)

AF3 使用 compilation bucket 避免反覆重新編譯模型:

1# 自訂 bucket 大小以減少重新編譯
2python run_alphafold.py \
3    --buckets 256,512,768,1024,1280,1536,2048,2560,3072,3584,4096,4608,5120,5376

JAX Persistent Compilation Cache

啟用持久化編譯快取,避免跨 run 重新編譯:

1python run_alphafold.py \
2    --jax_compilation_cache_dir /path/to/cache

5.7 Chirality Check (手性檢查)

AF3 提供手性正確性檢查,對 ligand (配體) 預測特別重要:

1from alphafold3.model.scoring.chirality import compare_chirality
2
3# 比對預測結構與 CCD 參考結構的手性
4# 搭配 multi-seed + chiral-aware ranking 可大幅降低手性錯誤率

5.8 推論效能比較

Token 數A100 80GB (秒)H100 80GB (秒)加速比
1,02462341.8x
2,0482751441.9x
3,0727033671.9x
4,0961,4347741.9x
5,1202,5471,4161.8x

6. 與 Apotek 管線的整合潛力

6.1 整合概述

AF3 在 Apotek 的 drug discovery pipeline (藥物發現管線) 中具有重要的整合價值,尤其在以下工作包 (Work Package) 中:


graph TB
    subgraph ApotekPipeline["Apotek Drug Discovery Pipeline"]
        WP1["WP1: Target Discovery
(靶點發現)"] WP2["WP2: Hit Identification
(先導分子篩選)"] WP3["WP3: Target Validation
(靶點驗證)"] WP4["WP4: Lead Optimization
(先導物最佳化)"] WP5["WP5: Pre-IND Prep
(臨床前準備)"] end subgraph AF3Integration["AF3 整合點"] A["結構預測
蛋白質折疊"] B["複合體模擬
蛋白質-配體"] C["抗體-抗原
介面分析"] D["Binding site
結合位點辨識"] E["Selectivity
選擇性評估"] end WP1 -->|"靶點結構"| A WP2 -->|"配體對接"| B WP3 -->|"驗證結合模式"| B WP3 -->|"抗體工程"| C WP4 -->|"SAR 分析"| D WP4 -->|"off-target 評估"| E style WP3 fill:#e74c3c,color:#fff style WP4 fill:#e67e22,color:#fff

6.2 WP3 — Target Validation (靶點驗證)

在靶點驗證階段,AF3 可提供:

  1. 靶點蛋白結構預測: 當 PDB 中無實驗結構時,AF3 可提供高信心的結構模型
  2. 蛋白質-蛋白質交互作用 (PPI) 預測: 驗證靶點與上下游信號通路蛋白的交互
  3. 抗體-抗原介面分析: 預測 therapeutic antibody (治療性抗體) 與靶點的結合模式
  4. 配體可及性評估: 判斷靶點是否具有 druggable binding pocket (可成藥結合口袋)

實作建議

 1# 情境:預測靶點蛋白與已知抑制劑的結合模式
 2# 輸入 JSON 包含靶點序列 + 抑制劑 SMILES
 3cat > target_validation.json << 'EOF'
 4{
 5  "name": "target_inhibitor_complex",
 6  "sequences": [
 7    {
 8      "protein": {
 9        "id": "A",
10        "sequence": "<TARGET_PROTEIN_SEQUENCE>"
11      }
12    },
13    {
14      "ligand": {
15        "id": "B",
16        "smiles": "<INHIBITOR_SMILES>"
17      }
18    }
19  ],
20  "modelSeeds": [1, 2, 3, 4, 5],
21  "dialect": "alphafold3",
22  "version": 1
23}
24EOF

信心指標判讀策略

  • ipTM > 0.8: 高信心結合預測,可用於後續 SAR (structure-activity relationship; 構效關係) 分析
  • chain_pair_pae_min < 5.0: 蛋白質-配體介面品質良好
  • pLDDT > 70 (binding site 區域): 結合位點結構可靠

6.3 WP4 — Structure-Based Drug Design (SBDD; 結構導向藥物設計)

在先導物最佳化階段,AF3 的整合方式:

  1. Binding mode prediction (結合模式預測): 預測先導分子在靶點中的結合姿態
  2. Scaffold hopping (骨架跳躍): 用不同 SMILES 測試替代骨架
  3. Selectivity profiling (選擇性分析): 同時折疊候選分子與 on-target / off-target 蛋白
  4. Allosteric site identification (別構位點辨識): 透過多鏈預測發現遠端調控位點

6.4 與現有工具的串接

AF3 可與 Apotek 管線中的其他工具互補:

工具/階段AF3 的角色串接方式
ToolUniverse (ChEMBL/PubChem)取得配體 SMILES → 輸入 AF3tu-plan-generator → AF3 JSON
paper-search文獻中的靶點序列 → AF3 折疊paper-search → AF3 input
Molecular dynamics (分子動力學)AF3 結構作為 MD 起始構象AF3 mmCIF → GROMACS/AMBER
Docking (分子對接)AF3 蛋白結構作為 receptorAF3 mmCIF → AutoDock/Vina

6.5 整合注意事項

  1. 模型參數授權: 確認 AF3 Terms of Use 是否允許在 Apotek 的商業研發管線中使用
  2. GPU 資源規劃: 單次推論需 A100 80GB,建議在 cloud (GCP/AWS) 上按需開機
  3. 結果驗證: AF3 預測為理論模型,需與實驗數據 (X-ray, cryo-EM) 交叉驗證
  4. 預測品質門檻: 建議設定 ipTM >= 0.7 + pLDDT >= 70 作為進入下一步的最低標準

7. 常見問題與限制

7.1 系統與安裝問題

Q: Docker build 失敗,出現 “No file descriptors available” 錯誤?

這在 AlmaLinux/Rocky/RHEL 上常見。解法:

1docker build --ulimit nofile=65535:65535 -t alphafold3 -f docker/Dockerfile .

Q: nvidia-smi 顯示 “couldn’t communicate with NVIDIA driver”?

重啟機器:

1sudo reboot now
2# 重啟後再次檢查
3nvidia-smi

Q: Docker 內無法看到 GPU?

確認已安裝 NVIDIA Container Toolkit 並重啟 Docker:

1sudo nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place
2systemctl --user restart docker
3docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi

Q: 使用 V100 出現數值錯誤?

CUDA Capability 7.x 設備有已知問題,需設定環境變數:

1export XLA_FLAGS="--xla_disable_hlo_passes=custom-kernel-fusion-rewriter"

7.2 輸入與格式問題

Q: 如何從 AlphaFold Server 格式轉換?

run_alphafold.py 內建自動偵測與轉換。將 alphafoldserver 格式的 JSON 直接傳入即可,但需注意:

  • Glycan (糖鏈) 轉換目前不支援
  • 空的 modelSeeds: [] 會自動指派隨機 seed

Q: 離子要怎麼指定?

離子在 AF3 中作為 ligand 處理,使用 CCD code:

1{"ligand": {"id": "X", "ccdCodes": ["MG"]}}   // 鎂離子
2{"ligand": {"id": "Y", "ccdCodes": ["ZN"]}}   // 鋅離子
3{"ligand": {"id": "Z", "ccdCodes": ["CA"]}}   // 鈣離子

Q: 支援哪些配體格式?

三種方式:

  1. CCD codes: 標準化學成分字典代碼(如 ATP, HEM, NAD
  2. SMILES: 任意小分子的 SMILES 字串
  3. User CCD: 自訂 mmCIF 格式(用於複雜分子或需要原子命名的情境)

7.3 效能與資源問題

Q: 記憶體不足 (OOM) 怎麼辦?

啟用 unified memory:

1ENV XLA_PYTHON_CLIENT_PREALLOCATE=false
2ENV TF_FORCE_UNIFIED_MEMORY=true
3ENV XLA_CLIENT_MEM_FRACTION=3.2

這允許 GPU 記憶體溢出至 host memory,代價是速度變慢。

Q: 如何避免每次都重新編譯模型?

使用 JAX persistent compilation cache:

1python run_alphafold.py --jax_compilation_cache_dir /path/to/cache

搭配適當的 compilation bucket 設定:

1python run_alphafold.py \
2    --buckets 256,512,768,1024,1280,1536,2048,2560,3072,3584,4096,4608,5120

Q: 大量輸入的最佳執行策略?

  1. 分離 data pipeline 和 inference
  2. 預計算共用鏈的 MSA/template,減少重複搜尋
  3. 使用 sharded databases 加速 genetic search
  4. 使用 --input_dir 批次處理多個 JSON

7.4 科學限制

Q: AF3 的預測有哪些已知限制?

  1. 輸出為理論模型: AF3 未經臨床驗證,不應用於臨床決策
  2. 信心指標非絕對: 高 pLDDT 不保證結構正確,低 ipTM 不一定表示不結合
  3. 靜態結構: AF3 產生單一構象快照,無法呈現蛋白質動態
  4. 配體多樣性: AF3 對已知化學空間的配體預測較好,全新骨架的預測可能不可靠
  5. intrinsically disordered regions (IDR; 天然無序區域): AF3 可能對 IDR 產生人工二級結構
  6. 小結構的 pTM 限制: 少於 20 tokens 的結構,pTM 會低於 0.05,此時應改用 PAE 或 pLDDT 評估

Q: AF3 vs 傳統 molecular docking (分子對接) 的差異?

面向AF3Molecular Docking
蛋白質結構同時預測需要已知結構
結合位點自動辨識需要先指定
蛋白質靈活性有限考量多數固定蛋白質
計算成本GPU 密集CPU 即可
配體排名ipTM/PAEDocking score
適用場景結構未知時大量配體虛擬篩選

7.5 實用建議摘要

  1. 永遠使用多 seed (建議 >= 5 seeds) 以增加找到正確構象的機率
  2. 檢查手性 (chirality.py) 尤其對配體預測
  3. 分離執行 data pipeline 和 inference 以最佳化 HPC 資源
  4. 關注 per-chain/per-chain-pair 指標而非僅看全域指標
  5. 與實驗數據交叉驗證再做重要決策
  6. 使用 SSD 存放基因資料庫以加速搜尋

參考資源