AlphaFold 3
/fs00/software/alphafold/3.0.0/AlphaFold-v3.0.0.sif
0. 基本信息
alphafold3是Google DeepMind开发的、用于生物分子复合体结构预测的人工智能模型,该模型接受一个json形式的、用于描述生物分子体系的文件,输出预测结构与置信度打分信息。结构预测过程主要分为两步:
- data pipeline: 在一定参数控制下,基于输入的序列信息进行生物信息学搜索,得到结构预测所需的共进化信息 (multi-sequence alginment, msa) 与结构模板 (templates),并将这些信息与输入信息整合,将整合信息作为json文件输出
- inference: 读取整合入msa和templates的json文件,转化为模型输入特征进行推理,输出mmcif格式的预测结构与confidence score
此处部署的是基于官方github库打包的apptainer容器。容器内包含alphafold3程序本体和依赖,不包含程序运行所需的数据库与预训练权重——这些需要在运行时以命令行参数传入。集群上部署有生信搜索所需数据库,模型权重的使用受term of use控制,请自行向Google DeepMind申请。
1. 使用方法
为避免冗长的路径和指令重复出现,定义变量
path_to_af3db="/bbfs/data/alphafold/3"
path_to_af3container="/fs00/software/alphafold/3.0.0/AlphaFold-v3.0.0.sif "
io_dir=</path/to/your/input/and/output>
weights_dir=<path/to/directory/containing/your/af3-weights>
RUN_ALPHAFOLD="apptainer run --nv --bind \
${path_to_af3db}:/databases,${io_dir}:/host_iopath,${weights_dir}:/af3_weights \ ${path_to_af3container} python run_alphafold.py"
其中${path_to_af3db}
是集群上alphafold3数据库地址,${io_dir}
是输入文件所在的、及希望结果输出的目录,${weights_dir}
是自己申请的alphafold3权重文件所在目录。run_alphafold.py
是官方github库提供的接口文件。本页面后续出现的指令均默认这些变量存在。
输出帮助信息 (包括参数说明)
${RUN_ALPHAFOLD} --help
将输入文件input.json
放在${io_dir}
目录下,如下指令可使用alphafold3预测此文件描述体系的结构
${RUN_ALPHAFOLD} --db_dir=/databases/ --model_dir=/af3_weights/ \
--json_path=/host_iopath/input.json --output_dir=/host_iopath/
程序将根据input.json
中的name字段值,在${io_dir}
下创建同名子目录,data pipeline结束时补全的json文件、预测结构文件和confidence score都会被保存在这个子目录中。运行时log信息通过stderr输出 (这是python logging模块的行为)。
input.json
中可以包含一个json格式的分子体系,也可以是多个分子体系的列表。如果是列表,alphafold3将对每个分子体系分别预测,并将结果输出到${io_dir}
下各体系name字段对应的子目录下。
输出目录下,
2. 分步运行data pipeline与inference
如前所述,程序运行主要分为data pipeline和inference两步。其中,data pipeline只使用cpu计算且耗时很长,如果在gpu队列上运行会导致gpu资源长期空置,可能导致高额费用和gpu资源浪费。因此,推荐先在cpu队列上运行data pipeline,得到中间结果 (也就是补全的json) 退出,然后再到gpu队列上进行结构预测。
为满足上述需求,可以用bool型命令行参数--run_data_pipeline
和--run_inference
控制模型只运行其中一步,两参数默认值均为True.
分步运行指令示例:
- data pipeline (cpu job)
${RUN_ALPHAFOLD} --db_dir=/databases/ --model_dir=/af3_weights/ \ --json_path=/host_iopath/input.json --output_dir=/host_iopath/ \ --run_inference=False
- inference (gpu job)
${RUN_ALPHAFOLD} --db_dir=/databases/ --model_dir=/af3_weights/ \ --json_path=/host_iopath/input.json --output_dir=/host_iopath/ \ --run_data_pipeline=False
另外,出于研究或加速计算的目的,用户可能希望使用自行准备的msa或templates,因而需要跳过alphafold3搜索步骤,此时需要手动将msa和templates写进输入json文件,然后带--run_data_pipeline=False
参数运行模型,进行结构预测。关于如何将msa和templates写入json文件,请自行参考DeepMind-input documentation。注意,msa和templates会以文本形式写入json中,因此写入了msa和templates的json文件会达到数十到百Mb量级。
3. 关于其他命令行参数
除去以上参数外,容器还可接受很多其他参数,可以用${RUN_ALPHAFOLD} --help
查看,或是在run_alphafold.py
中查看。此处只提3点:
-
--input_dir
和--json_path
都可以指定输入文件,使用时只应指定其一。当指定input_dir时,模型会从input_dir中寻找一个json格式文件,当作输入文件 -
--jackhmmer_n_cpu
和--nhmmer_n_cpu
指定生信搜索中使用cpu cores数目的上限 - 机器学习程序通常允许设置random seed来保证运行的可重复性,alphafold3的random seed不能以命令行参数指定,而是在input.json中
4. 队列兼容性、测试中的运行耗时
data pipeline对设备要求不高,inference则可能对gpu设备有些要求。目前只测试了官方测试用例 (2PV7蛋白,双链homomer,长度298),有效信息有3点:
- 83a100ib队列单张a100 (40 G)可以支持模型推理过程,下一步会测试单张3090/4090(d) (24 G)是否足以支持推理
- 8 cpu cores上,对一条长约300的蛋白序列进行msa和templates搜索耗时为1.5-2 h,其中搜出msa后,根据部分匹配片段信息挑选出templates耗时为10 s量级,相对于总时间可以忽略
- 对每个随机种子,alphafold3会预测5个结构并按置信度打分挑选最好的作为最终结果;83a100ib一张a100卡上,进行上述过程耗时100 s左右
5. 运行结果准确性评估
比较2PV7预测结构与实验结构,总体RMSD=4.410 (单位: Angstrom,下同)。 为衡量单链水平结构误差,计算预测A:B链-实验A:B链间RMSD,4个RMSD值分别为3.012, 2.759, 2.971, 2.740. 此单链上,alphafold3预测准确度低于alphafold2. 为衡量2个subunits间相对位置误差,计算DockQ分数为0.499>0.23,预测结构docking成功。
dockQ (Mirabello & Wallner, 2024, Bioinformatics) 打分用于衡量模型对subunits 间位置关系预测准确度。此分数取值范围是0-1,通常<0.23认为错误,>0.8认为准确。