一条序列进一个PDB出:AlphaFold Python API 蛋白质结构预测完整流程
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
手里有一条蛋白序列,想要拿到带残基级置信度的三维结构,AlphaFold 的 Python API 是最直接的路径:DataPipeline 构建 MSA 与模型特征,RunModel 输出原子坐标,pLDDT 置信度直接写进 PDB。跑完这段流程,你能直接得到一个经过结构松弛、可渲染的 PDB 文件和逐残基置信度。
1️⃣ 最小闭环:FASTA 输入,PDB 输出
这节解决"先让整条链路跑通"的问题。下面是一段可独立运行的脚本:target.fasta里放一条>名称\n序列,其余交给 API。
import os, shutil from alphafold.common import protein, residue_constants from alphafold.data import pipeline, templates from alphafold.data.tools import hhsearch from alphafold.model import config, data, model from alphafold.relax import relax DB = "/data/alphafold-db" # 数据库与模型参数所在目录 dp = pipeline.DataPipeline( jackhmmer_binary_path=shutil.which("jackhmmer"), hhblits_binary_path=shutil.which("hhblits"), uniref90_database_path=f"{DB}/uniref90/uniref90.fasta", mgnify_database_path=f"{DB}/mgnify/mgy_clusters_2022_05.fasta", bfd_database_path=f"{DB}/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt", uniref30_database_path=f"{DB}/uniref30/UniRef30_2021_03", template_searcher=hhsearch.HHSearch(binary_path=shutil.which("hhsearch"), databases=[f"{DB}/pdb70/pdb70"]), template_featurizer=templates.HhsearchHitFeaturizer( mmcif_dir=f"{DB}/pdb_mmcif/mmcif_files", max_template_date="2022-01-01", max_hits=20, kalign_binary_path=shutil.which("kalign"))) mr = model.RunModel(config.model_config("model_1"), data.get_model_haiku_params("model_1", DB)) os.makedirs("out/msas", exist_ok=True) feats = dp.process(input_fasta_path="target.fasta", msa_output_dir="out/msas") proc = mr.process_features(feats, random_seed=0) p = mr.predict(proc, random_seed=0) # 执行一次模型前向推理 prot = protein.from_prediction(features=proc, result=p, b_factors=p["plddt"][:, None].repeat(residue_constants.atom_type_num, axis=1), remove_leading_feature_dimension=False) open("out/relaxed.pdb", "w").write( relax.AmberRelaxation(use_gpu=False).process(prot)[0]) # 写出松弛后的 PDB关键输出说明:
out/msas/:MSA 多序列比对文件,可留作下次复用(use_precomputed_msas=True时直接读取)。out/relaxed.pdb:最终结构。B-factor 列即 pLDDT,数值越高残基越可信(0-100)。p['plddt']是逐残基置信度向量;p['predicted_aligned_error']是 PAE 矩阵,描述残基对之间距离预测的可靠程度。
官方流水线会按
ranking_confidence对多个模型排序,只松弛最优的那个;上面脚本跑单模型,直接松弛唯一结果。
🧩 2. 关键模块拆解:特征、推理与松弛
这节把闭环里的三个核心类拆开看,方便你按需替换参数。
DataPipeline:序列 → 模型输入特征。内部依次用 jackhmmer、hhblits 检索各同源性数据库,组装 MSA,再检索模板结构,产出一个特征字典。
feats = dp.process(input_fasta_path="target.fasta", msa_output_dir="out/msas") # feats['msa'] 为多序列比对,'seqres' 为参考序列,'template_*' 为模板命中实现见 alphafold/data/pipeline.py。
RunModel:模型推理引擎。加载 Haiku 参数后,负责特征预处理与一次完整前向。
mr = model.RunModel(config.model_config("model_1"), data.get_model_haiku_params("model_1", DB)) proc = mr.process_features(feats, random_seed=0) # 截断/补齐、加噪等预处理 p = mr.predict(proc, random_seed=0)process_features和predict分开调用是刻意的:预处理结果可缓存,多个模型共享同一份。实现见 alphafold/model/model.py。
AmberRelaxation:修复立体化学违规。对原始预测做短程能量最小化,消除原子碰撞、键角异常。
relaxer = relax.AmberRelaxation(max_iterations=0, tolerance=2.39, stiffness=10.0, max_outer_iterations=3, use_gpu=False) pdb, energy, violations = relaxer.process(prot=prot)参数取值与 run_alphafold.py 保持一致;实现见 alphafold/relax/relax.py。
3. 资源与参数:磁盘、依赖与显存要备多少
这节解决"跑之前需要准备什么"的问题。先备环境和文件:
git clone https://gitcode.com/GitHub_Trending/al/alphafold alphafold cd alphafold && pip install -r requirements.txt && pip install . conda install -c conda-forge hmmer hhpred kalign2 # jackhmmer/hhblits/hhsearch/kalign 等 bash scripts/download_alphafold_params.sh # 下载 params_*.npz 模型参数| 参数 | 作用 | 建议值 |
|---|---|---|
db_preset | MSA 数据库规模 | 正式预测用full_dbs(约 2.2TB);开发测试用reduced_dbs |
use_small_bfd | DataPipeline 是否用小 BFD | 与reduced_dbs配套时置True,并配scripts/download_small_bfd.sh |
max_template_date | 模板结构截止日期 | 常规用近期日期;预测历史数据集时务必回退,防数据泄漏 |
random_seed | MSA 采样随机种子 | 需要可复现时固定为常数 |
use_gpu | 松弛阶段是否用 GPU | 有卡就True,CPU 松弛明显更慢 |
num_multimer_predictions_per_model | 多聚体采样次数 | 官方默认 5 |
显存方面:单条 ≤2048 残基的序列在 10GB 级别显存即可推理;序列更长时 JAX 会直接 OOM,建议截短或分块。数据库下载可用 scripts/download_all_data.sh 一键完成。
🚀 4. 进阶用法:预测蛋白质复合物(多聚体)
这节解决"手里不是单链而是复合物"的问题。与单体流程的差异只有三处,重复步骤用注释省略。
from alphafold.data import pipeline_multimer dp_m = pipeline_multimer.DataPipeline( monomer_data_pipeline=dp, # 同上,复用第 1 节的单体管道 jackhmmer_binary_path=shutil.which("jackhmmer"), uniprot_database_path=f"{DB}/uniprot/uniref20_percent_identity.fasta") mr_m = model.RunModel(config.model_config("model_1_multimer"), data.get_model_haiku_params("model_1_multimer", DB)) feats = dp_m.process(input_fasta_path="complex.fasta", msa_output_dir="out_m/msas") p = mr_m.predict(mr_m.process_features(feats, random_seed=0), random_seed=0) # 同上:构造 prot、松弛、写 PDB,仅下面一行取值不同 prot = protein.from_prediction(features=proc, result=p, b_factors=b, remove_leading_feature_dimension=True) # 多聚体保留维度两个注意点:多聚体的 FASTA 必须包含多条>序列,每条对应一个链;模板检索改用hmmsearch.Hmmsearch+ pdb_seqres 数据库,而非单体的hhsearch+ pdb70,构造dp_m的单体管道时相应替换template_searcher即可。
⚠️ 5. 排错速查:高频问题对照表
这节汇总跑 API 时最常踩的五个坑。
| 症状 | 原因 | 解法 |
|---|---|---|
报params_model_1.npz找不到 | 模型参数未下载 | 运行scripts/download_alphafold_params.sh |
Could not find path to the "jackhmmer" binary | MSA 工具链缺失 | conda install -c conda-forge hmmer hhpred |
predict时 GPU OOM | 序列过长或显存不足 | 截短到 2048 残基内,或换大显存卡 |
| MSA 为空、pLDDT 全线偏低 | 数据库路径指错 | 逐个检查*_database_path文件存在且非空 |
| 2.2TB 磁盘放不下全量数据库 | full_dbs体积大 | 改reduced_dbs,并下载 small BFD |
收尾
到这里,序列→特征→坐标→松弛的链路已经打通,产出的 PDB 自带 pLDDT。往下延伸有三个方向:对松弛结构跑分子动力学看稳定性;做单点突变后对比 pLDDT/PAE 评估影响;直接拿预测结构做结合位点分析或蛋白质设计。更多细节见 docs/technical_note_v2.3.0.md 与 run_alphafold.py。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考