Skip to main content

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认为准确。