
AlphaFold Python API 蛋白质结构预测从 FASTA 到 PDB 的最短路径【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold当批量结构预测要跑在集群上、或者要嵌进既有生信流水线时run_alphafold.py 提供的命令行入口就不够用了。本文带你过一遍 AlphaFold Python API 里的对象关系用 30 行以内代码走通序列输入 → 结构输出的完整链路。涉及的接口与参数名均可在仓库源码中核对。搭一条最短的预测链路4 个对象的关系这一节给的是完整最小调用链只涉及 4 个对象DataPipeline特征构建、RunModel推理、特征字典两者之间的中间数据、protein.Protein结构容器。代码里的data_pipeline和DATA_DIR是占位分别表示已构建好的管道和数据库根目录含 params/、uniref90/ 等子目录构建方法放到下一节。先记住四者关系模块才好自由组合。这段代码把整条链路压成 14 行FASTA 进、PDB 文本出。中间每一步只做一件事没有多余参数。features data_pipeline.process(target.fasta, msa_output_dirmsas) runner model.RunModel( config.model_config(model_1), model_data.get_model_haiku_params(model_1, DATA_DIR)) processed runner.process_features(features, random_seed0) result runner.predict(processed, random_seed0) plddt result[plddt] b_factors np.repeat(plddt[:, None], residue_constants.atom_type_num, axis-1) prot protein.from_prediction(processed, result, b_factorsb_factors, remove_leading_feature_dimensionTrue) print(protein.to_pdb(prot))一句话读图process 把 FASTA 变成特征字典process_features 做归一化裁剪 MSA 等predict 输出数组字典from_prediction 把原子坐标组装成 Protein 对象。pLDDT 置信度同时写进了 PDB 的 B-factor 列注意它越高越可信与常规 B-factor 语义相反做分子替换类任务时要留意。模块拆解数据、推理、松弛各发生了什么上一节跑通了链路要改参数、排错就得知道每个模块内部在做什么。数据处理、模型推理、结构松弛的主体分别位于 alphafold/data/pipeline.py、alphafold/model/model.py 与 alphafold/relax/relax.py下面逐个拆开。组装 DataPipeline 时如何指定各数据库路径DataPipeline.process() 是唯一入口内部按固定顺序调用外部比对工具jackhmmer 查 UniRef90 与 MGnifyHHblits 查 BFD 与 UniRef30合并聚类后由 HHsearch 从 PDB70 检索结构模板。中间的 .sto 和 .a3m 文件都会落到 msa_output_dir 参数指定的目录排错时可以直接看磁盘文件判断是哪一步出了问题。二进制路径通常用 shutil.which() 自动发现容器环境里建议改成显式绝对路径。模板检索器和模板特征器是两个独立的小对象先构造好再传入管道from alphafold.data import templates from alphafold.data.tools import hhsearch template_searcher hhsearch.HHSearch( binary_pathshutil.which(hhsearch), databases[f{DATA_DIR}/pdb70/pdb70]) template_featurizer templates.HhsearchHitFeaturizer( mmcif_dirf{DATA_DIR}/pdb_mmcif/mmcif_files, max_template_date2022-01-01, # 不用该日期之后发布的模板 max_hits20, kalign_binary_pathshutil.which(kalign))两个协作者就绪后连同四个序列数据库的路径一起交给 DataPipeline。注意构造函数参数不少但全是路径与开关没有隐藏的默认行为。from alphafold.data import pipeline DATA_DIR /path/to/data data_pipeline pipeline.DataPipeline( jackhmmer_binary_pathshutil.which(jackhmmer), hhblits_binary_pathshutil.which(hhblits), uniref90_database_pathf{DATA_DIR}/uniref90/uniref90.fasta, mgnify_database_pathf{DATA_DIR}/mgnify/mgy_clusters_2022_05.fa, bfd_database_pathf{DATA_DIR}/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt, uniref30_database_pathf{DATA_DIR}/uniref30/UniRef30_2021_03, small_bfd_database_pathNone, # reduced_dbs 模式才需要 template_searchertemplate_searcher, template_featurizertemplate_featurizer, use_small_bfdFalse)这里要注意单体与多聚体管道要求的数据库不同单体用 PDB70多聚体改用 PDB seqres 加 UniProt传错会直接抛 ValueError。加载模型权重时如何调整集成配置模型名是关键config.model_config(name) 返回超参数data.get_model_haiku_params 按名字加载对应权重。monomer 预设下的 model_1 到 model_5 是 CASP14 时代的 5 个独立模型官方脚本跑 5 次再按 ranking_confidence 取最自信的一个。JAX 会对每种输入形状做特化编译所以第一次 predict 包含编译时间官方脚本用 --benchmark 开关单独测纯推理耗时。下面这段演示了构建 runner 的同时修改集成数这是 run_alphafold.py 里 monomer_casp14 预设的做法model_config config.model_config(model_1) model_config.data.eval.num_ensemble 8 # 可选CASP14 的 8 次集成配置 runner model.RunModel( model_config, model_data.get_model_haiku_params(model_1, DATA_DIR))参数文件路径是固定的 {DATA_DIR}/params/params_{model_name}.npz目录名不能随意改否则会直接 FileNotFoundError。如何读取 predict 的输出字段并转换 jax 数组result 字典是模型与后处理之间的契约plddt 是逐残基 0-100 的置信度ranking_confidence 是标量用于多模型排序predicted_aligned_errorPAE只在 ptm 与 multimer 预设下出现是残基对的误差矩阵。predict 返回的仍是 jax 数组落盘前必须转成 numpy。三个字段各取一行注意 PAE 要用 .get 防御性访问result runner.predict(processed, random_seed0) plddt np.asarray(result[plddt]) # [N_res]0-100 ranking float(result[ranking_confidence]) # 标量用于排序 pae result.get(predicted_aligned_error) # 仅 ptm / multimer 预设_jnp_to_np见 run_alphafold.py给出了递归转换 jax 数组的写法可以直接照抄。跑 Amber 松弛并生成置信度文件模型直接输出的结构可能带键长、键角等立体化学违例AmberRelaxation 对其做局部能量最小化。process() 返回松弛后的 PDB 字符串与违例列表后者适合写进 relax_metrics.json 追踪质量。置信度 JSON 则由 plddt 直接生成每个残基附一个 D/L/M/H 档位。6 个构造参数与 process 调用一次给全relaxer relax.AmberRelaxation( max_iterations0, # 0 表示不限 L-BFGS 迭代次数 tolerance2.39, stiffness10.0, exclude_residues[], max_outer_iterations3, use_gpuTrue) relaxed_pdb, _, violations relaxer.process(protprot)以上参数与 use_gpu 开关都是官方 run_alphafold.py 的默认值GPU 松弛更快但数值稳定性略差遇到收敛错误先把 use_gpu 换回 False 再排查。工程化落地从单条序列到批量任务进入生产环境后时间大都花在资源与可复现性上而不是模型本身。官方入口脚本本身就是工程实践参照以下开关都能在其命令行参数中找到对应项。复用 MSADataPipeline 传 use_precomputed_msasTrue直接从磁盘读 .sto不再跑比对工具。降低磁盘占用use_small_bfdTrue命令行对应 --db_presetreduced_dbs磁盘需求从约 2.6TB 降到 600GB 级。控制松弛范围models_to_relax 分 all/best/none 三档多数场景 best 足够。批量循环pipeline 与 runner 对象跨 FASTA 复用官方脚本外层就是个简单 for 循环。确定性random_seed 固定不保证位级可复现GPU 推理本身非确定。读对输出ranked_0.pdb 是置信度最高的预测ranked_1 至 ranked_4 依次递减。还有一个批处理的细节JAX 会为每种序列长度重新编译短序列上编译开销占比高。README 建议用 make_fixed_size 把输入填充到统一形状让一批任务共享同一次编译长序列则无此顾虑。延伸方向预测结果的可视化py3Dmol、PAE 热图照 notebooks/AlphaFold.ipynb 走即可。模型定义与 v2.3.0 细节在 docs/technical_note_v2.3.0.md接入多聚体前建议先读。要预测蛋白复合体把管道换成 pipeline_multimer.DataPipeline预设改 multimer。【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考