用 5 段代码跑通 AlphaFold 蛋白质结构预测
2026/9/11 16:53:25 网站建设 项目流程

用 5 段代码跑通 AlphaFold 蛋白质结构预测

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

jackhmmer 跑完,MSA 落了一目录,手里是一坨看着像 numpy 数组的 feature dict。模型吃的张量不是 PDB 文件,吐出来的置信度也不是人直接能读的结论。这篇文章用 AlphaFold Python API(蛋白质结构预测编程调用的主入口)5 段代码,把序列到坐标的路径走一遍。

30 秒判断:它能干什么、不能干什么

API 就一条主干:序列进去,三维坐标出来,置信度随行。它不做"一键云"——二进制、数据库、显存、磁盘都自备。建立信任的最快方式是用最小配置先验证一遍:haiku 参数加 reduced_dbs,单张 24G 卡就能端到端,确认路径再上生产。

条目情况
能干什么单链与 multimer 复合物结构预测,附 pLDDT(每残基置信度)、PAE 矩阵,松弛后出 PDB
不能干什么没有内置数据库下载和云队列,约 2.2TB 数据与显存自备
GPU单链单体 24G 够,multimer 复合物 80G 起步
前置条件jackhmmer / hhblits / hhsearch / kalign 四个二进制 + UniRef90、MGNIFY、BFD 等数据库
最快验证haiku(轻量)参数 +db_preset="reduced_dbs",单卡跑通全流程

主干走向:写 FASTA → DataPipeline 搜 MSA 出 feature dict → RunModel 出张量 → 装回原子坐标 → Amber 松弛修好几何,落盘 PDB。上面这张,就是整条路走完后的样子。

从序列到坐标:把整条主线走通

主线四个站点:写 FASTA、喂管道、拿张量、变回 PDB。下面全是单链示例,复合物放在段尾。

🔧 先把序列写成 FASTA 并搭好数据管道——MSA(多序列比对,同源序列列对齐)搜索全由它代办,这一步是全程最耗时的:

import shutil from alphafold.data import pipeline, templates from alphafold.data.tools import hhsearch seq = "MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH" with open("query.fasta", "w") as f: f.write(">query\n" + seq) dp = pipeline.DataPipeline( jackhmmer_binary_path=shutil.which("jackhmmer"), hhblits_binary_path=shutil.which("hhblits"), uniref90_database_path=f"{data_dir}/uniref90/uniref90.fasta", mgnify_database_path=f"{data_dir}/mgnify/mgy_clusters_2022_05.fasta", # bfd / uniref30 / pdb70 路径同构,省略 template_searcher=hhsearch.HHSearch( binary_path=shutil.which("hhsearch"), databases=[f"{data_dir}/pdb70/pdb70"]), template_featurizer=templates.HhsearchHitFeaturizer( mmcif_dir=f"{data_dir}/pdb_mmcif/mmcif_files", max_template_date="2021-12-01", max_hits=20, kalign_binary_path=shutil.which("kalign"))) feat = dp.process(input_fasta_path="query.fasta", msa_output_dir="msas")

管道构造逻辑在alphafold/data/pipeline.pyfeat就是 feature dict(模型直接吃的 numpy 数组字典):aatype one-hot、MSA、deletion matrix、模板,全在一个字典里。

拿到 feature dict 之后,搭模型运行器、按预测键。模型加载逻辑在alphafold/model/model.pyRunModel里,配置和参数各给一份:

from alphafold.model import model, config, data cfg = config.model_config("model_1") # haiku 参数体积小,专用于验证管线;生产换成真实 params 文件 params = data.get_model_haiku_params("model_1", data_dir) runner = model.RunModel(cfg, params) proc = runner.process_features(feat, random_seed=42) out = runner.predict(proc, random_seed=42)

out是大家要追的东西:predicted_lddt(逐残基局部置信度)、predicted_aligned_error(PAE,预测对齐误差,任意残基对之间相对方位的置信矩阵)、structure_module(最终原子坐标)。此刻还是张量字典,变回 PDB 只差一步。

🧬 坐标和置信度都在out里,最后一步是装回蛋白质对象:

import numpy as np from alphafold.common import protein, residue_constants plddt = out["plddt"] # 置信度写进 PDB 的 B 因子列,下游工具可直接按残基读可信度 b = np.repeat(plddt[:, None], residue_constants.atom_type_num, axis=-1) prot = protein.from_prediction( features=proc, result=out, b_factors=b, remove_leading_feature_dimension=False)

装填逻辑在alphafold/common/protein.pyfrom_prediction,它从structure_module取坐标包成 Protein 对象,protein.to_pdb(prot)随时能拿 PDB 字符串。

⚡ 但 PDB 先别急着存:网络输出可能有键角和位阻问题,要再过一道分子力学打磨——Amber 松弛(alphafold/relax/relax.pyAmberRelaxation)把结构拉回物理合理的构象并补上氢原子:

from alphafold.relax import relax relaxer = relax.AmberRelaxation( max_iterations=0, tolerance=2.39, stiffness=10.0, exclude_residues=[], max_outer_iterations=3, use_gpu=True) pdb, _, _ = relaxer.process(prot=prot) with open("model_1_relaxed.pdb", "w") as f: f.write(pdb)

跑完松弛,文件就落盘了,单链主线结束。

multimer 复合物只换三处:数据管道换成pipeline_multimer.DataPipeline(多要一个 UniProt 库),模型名换成"model_1_multimer",后面流程原样。显存差距记得留:24G 是单链的,复合物 80G 起步。至此无命令行结构预测全程在 Python 内完成,二进制只是被管道当工具调。

这个结构能不能信:判读 pLDDT 与 PAE 矩阵

📉 先把张量矩阵变成两个能直接看的数组,函数在alphafold/common/confidence.py

from alphafold.common import confidence raw_plddt = confidence.compute_plddt(out["predicted_lddt"]["logits"]) pae = confidence.compute_predicted_aligned_error( logits=out["predicted_aligned_error"]["logits"], breaks=out["predicted_aligned_error"]["breaks"])["predicted_aligned_error"]

raw_plddt长度等于残基数,pae是残基数 × 残基数;不想重算的话,out["plddt"]里就是同一结果。

pLDDT(逐残基局部置信度,0-100)判读是三档硬标准:>80,局部结构可信,二级结构走向、侧链朝向基本不出错,可直接拿去做对接设计;70-80,中等可靠,骨架走向对,侧链细节要抽查;<50,基本无序,多为 linker 或 loop,坐标别信,只当锚点。

PAE 矩阵是二维版:域内块低、跨域块高,说明域内取向可信,两个域之间的相对朝向不可信。multimer 复合物看 PAE 比看 pLDDT 更要紧,先盯链间块,再决定界面能不能用。

这是 CASP14 留下的结果:蓝是网络预测,绿是实验结构,两者几乎叠在一起——但那是置信度先查过之后的事,流程和上文一致。

往下还能接什么:预测做完之后

  • MD 模拟:松弛后 PDB 直接喂 GROMACS 或 Amber,平衡加生产轨迹,验证结构是不是稳定的能量极小。
  • 突变效应评估:换掉一个残基重跑主线,对比该位置 pLDDT 落差,量化突变对局部结构的冲击。
  • 反向设计:固定骨架,把结构交给序列生成工具反推序列,做从头设计。

三个容易卡住的点:现象、根因、绕过方式

显存爆掉

  • 现象:predict在 24G 卡上 OOM,JAX 直接报 out of memory
  • 根因:默认配置 num_ensemble=5、num_recycles=3,显存随序列长度平方级涨
  • 绕过:单体先跑;紧张时调小 num_ensemble,复合物挪到 80G 卡

数据库体积

  • 现象:全量库 2.2TB,磁盘和时间都顶不住
  • 根因:full_dbs含 MGNIFY 全量,体积大头在这
  • 绕过:run_alphafold.pydb_preset="reduced_dbs"切小库,或先用 haiku 参数验证管线

MSA 耗时

  • 现象:单条序列 MSA 搜索几十分钟,批量蛋白预测看着像卡死
  • 根因:jackhmmer 迭代检索大库本来就慢,不是挂死
  • 绕过:MSA 已有现成时传use_precomputed_msas=True,跳过检索只跑模型段

那坨 MSA 跑完的 feature dict 再到手时,路径已经平了:喂管道、拿张量、变回 PDB,能不能信写在 pLDDT 和 PAE 里。明早先干一件事:用 haiku 参数加 reduced_dbs 把整条主线端到端验一遍,通了再换真实参数上生产。

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询