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 2 | AlphaFold 3 |
|---|---|---|
| 預測目標 | 僅蛋白質 | 蛋白質 + DNA + RNA + 配體 + 離子 |
| 核心模組 | Evoformer | Pairformer (取代 Evoformer) |
| 結構生成 | 直接座標回歸 | Diffusion module (擴散模型) |
| 信心指標 | pLDDT, PAE | pLDDT, PAE, pTM, ipTM, ranking_score |
| MSA 處理 | 深度 MSA | 簡化 MSA + Pairformer |
| 輸入格式 | FASTA | JSON (含 sequences, bondedAtomPairs 等) |
1.3 AF3 能解決什麼問題?
AF3 的核心價值在於預測 biomolecular complex (生物分子複合體) 的三維結構,這在 drug discovery (藥物發現) 中至關重要:
- Target validation (靶點驗證): 預測藥物靶點蛋白與配體的結合模式
- Structure-based drug design (SBDD; 結構導向藥物設計): 提供 binding site (結合位點) 結構資訊
- Protein-protein interaction (PPI; 蛋白質-蛋白質交互作用): 預測抗體-抗原介面
- 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) 分為兩大階段:
- Data Pipeline (資料管線): CPU-only,負責 genetic search (基因搜尋) 與 template search (模板搜尋)
- 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 (基於擴散的結構生成):
- Forward process (前向過程): 將原子座標逐步加噪至高斯分佈
- Reverse process (逆向過程/去噪): 訓練 denoising network 從噪聲中還原結構
- Diffusion transformer: 使用 transformer 架構進行去噪,搭配 atom cross-attention 機制
這種方法的優勢:
- 可自然處理不同類型的分子(蛋白質、核酸、配體)
- 生成的結構在化學上更加合理
- 支援多次 sampling,每次可產生不同但合理的構象
2.4 Confidence Metrics (信心指標)
AF3 提供多層次的信心評估,這些指標對判斷預測品質至關重要:
| 指標 | 範圍 | 意義 | 判讀標準 |
|---|---|---|---|
| pLDDT | 0-100 | per-atom 局部距離差異測試 | >90 很好, 70-90 良好, 50-70 低信心 |
| PAE | 0-31.75 A | 對齊後的位置預測誤差 | 越低越好;高值表示相對位置不確定 |
| pTM | 0-1 | 全結構 TM-score 預測 | >0.5 表示整體折疊可能正確 |
| ipTM | 0-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 |
| GPU | NVIDIA P100 (1,024 tokens) | A100 80 GB 或 H100 80 GB |
| CUDA | 12.6 | 12.6 |
| RAM | 64 GB | 170 GB+ |
| 磁碟空間 | 252 GB (下載) + 630 GB (解壓) | 1 TB SSD |
| Compute Capability | 6.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: 申請並下載模型參數
- 前往 Google Form 填寫申請表
- 等待 2-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_iptm或chain_pair_pae_min - 特定鏈: 使用
chain_ptm或chain_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-lysineM3L: 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 的重用策略
當需要折疊多個候選鏈與一組固定鏈的組合時:
- 對固定鏈執行
--run_inference=false產生 MSA - 將固定鏈的
unpairedMsa、pairedMsa、templates複製到新 JSON - 候選鏈欄位留空,pipeline 會自動計算
- 對組裝好的 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,024 | 62 | 34 | 1.8x |
| 2,048 | 275 | 144 | 1.9x |
| 3,072 | 703 | 367 | 1.9x |
| 4,096 | 1,434 | 774 | 1.9x |
| 5,120 | 2,547 | 1,416 | 1.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 可提供:
- 靶點蛋白結構預測: 當 PDB 中無實驗結構時,AF3 可提供高信心的結構模型
- 蛋白質-蛋白質交互作用 (PPI) 預測: 驗證靶點與上下游信號通路蛋白的交互
- 抗體-抗原介面分析: 預測 therapeutic antibody (治療性抗體) 與靶點的結合模式
- 配體可及性評估: 判斷靶點是否具有 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 的整合方式:
- Binding mode prediction (結合模式預測): 預測先導分子在靶點中的結合姿態
- Scaffold hopping (骨架跳躍): 用不同 SMILES 測試替代骨架
- Selectivity profiling (選擇性分析): 同時折疊候選分子與 on-target / off-target 蛋白
- Allosteric site identification (別構位點辨識): 透過多鏈預測發現遠端調控位點
6.4 與現有工具的串接
AF3 可與 Apotek 管線中的其他工具互補:
| 工具/階段 | AF3 的角色 | 串接方式 |
|---|---|---|
| ToolUniverse (ChEMBL/PubChem) | 取得配體 SMILES → 輸入 AF3 | tu-plan-generator → AF3 JSON |
| paper-search | 文獻中的靶點序列 → AF3 折疊 | paper-search → AF3 input |
| Molecular dynamics (分子動力學) | AF3 結構作為 MD 起始構象 | AF3 mmCIF → GROMACS/AMBER |
| Docking (分子對接) | AF3 蛋白結構作為 receptor | AF3 mmCIF → AutoDock/Vina |
6.5 整合注意事項
- 模型參數授權: 確認 AF3 Terms of Use 是否允許在 Apotek 的商業研發管線中使用
- GPU 資源規劃: 單次推論需 A100 80GB,建議在 cloud (GCP/AWS) 上按需開機
- 結果驗證: AF3 預測為理論模型,需與實驗數據 (X-ray, cryo-EM) 交叉驗證
- 預測品質門檻: 建議設定
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: 支援哪些配體格式?
三種方式:
- CCD codes: 標準化學成分字典代碼(如
ATP,HEM,NAD) - SMILES: 任意小分子的 SMILES 字串
- 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: 大量輸入的最佳執行策略?
- 分離 data pipeline 和 inference
- 預計算共用鏈的 MSA/template,減少重複搜尋
- 使用 sharded databases 加速 genetic search
- 使用
--input_dir批次處理多個 JSON
7.4 科學限制
Q: AF3 的預測有哪些已知限制?
- 輸出為理論模型: AF3 未經臨床驗證,不應用於臨床決策
- 信心指標非絕對: 高 pLDDT 不保證結構正確,低 ipTM 不一定表示不結合
- 靜態結構: AF3 產生單一構象快照,無法呈現蛋白質動態
- 配體多樣性: AF3 對已知化學空間的配體預測較好,全新骨架的預測可能不可靠
- intrinsically disordered regions (IDR; 天然無序區域): AF3 可能對 IDR 產生人工二級結構
- 小結構的 pTM 限制: 少於 20 tokens 的結構,pTM 會低於 0.05,此時應改用 PAE 或 pLDDT 評估
Q: AF3 vs 傳統 molecular docking (分子對接) 的差異?
| 面向 | AF3 | Molecular Docking |
|---|---|---|
| 蛋白質結構 | 同時預測 | 需要已知結構 |
| 結合位點 | 自動辨識 | 需要先指定 |
| 蛋白質靈活性 | 有限考量 | 多數固定蛋白質 |
| 計算成本 | GPU 密集 | CPU 即可 |
| 配體排名 | ipTM/PAE | Docking score |
| 適用場景 | 結構未知時 | 大量配體虛擬篩選 |
7.5 實用建議摘要
- 永遠使用多 seed (建議 >= 5 seeds) 以增加找到正確構象的機率
- 檢查手性 (
chirality.py) 尤其對配體預測 - 分離執行 data pipeline 和 inference 以最佳化 HPC 資源
- 關注 per-chain/per-chain-pair 指標而非僅看全域指標
- 與實驗數據交叉驗證再做重要決策
- 使用 SSD 存放基因資料庫以加速搜尋
參考資源
- 論文: Abramson, J. et al. Nature 630, 493-500 (2024). doi:10.1038/s41586-024-07487-w
- GitHub: google-deepmind/alphafold3
- AlphaFold Server: alphafoldserver.com
- Input 文件: docs/input.md
- Output 文件: docs/output.md
- 效能文件: docs/performance.md
- 安裝文件: docs/installation.md
- EBI AlphaFold 實務課程: EBI Training
- 聯繫 AlphaFold 團隊: alphafold@google.com
Comments