PSP - 基于开源框架 OpenFold 训练的 Finetuning 模型与推理逻辑评估

news2024/9/25 1:20:25

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/132410296

OpenFold

AlphaFold2 以其能够以极高的准确度预测蛋白质结构的能力,彻底改变了结构生物学。然而,AlphaFold2 的实现,缺乏训练新模型所需的代码和数据。这些是必要的,用于

  1. 解决新的任务,如蛋白质-配体复合物结构预测。
  2. 探索模型学习的过程,这仍然是一个难以理解的问题。
  3. 评估模型在未见过的折叠空间区域的泛化能力。

OpenFold 是一个快速、节省内存、可训练的 AlphaFold2 的实现,以及 OpenProteinSet 是最大的公开的蛋白质多序列比对数据库。使用 OpenProteinSet 从头开始训练 OpenFold,完全匹配 AlphaFold2 的准确度。在建立了平等性之后,通过使用精心设计的数据集重新训练 OpenFold,评估在折叠空间中泛化的能力。尽管训练集的大小和多样性极度减少,甚至包括几乎完全消除了二级结构元素类别,OpenFold 仍然具有非常强大的泛化能力。通过分析 OpenFold 在训练过程中产生的中间结构,获得了一些令人惊讶的观点,发现模型学习折叠蛋白质的方式,以及发现空间维度是顺序学习的。总而言之,研究展示 OpenFold 的强大和实用性,将成为蛋白质建模社区一个至关重要的新资源。

OpenFold:

  • Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization
  • GitHub: https://github.com/aqlaboratory/openfold
  • Huggingface: https://huggingface.co/nz/OpenFold

OpenFold 的运行环境配置,参考 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

使用相同的 MSA 文件,测试 OpenFold 的不同模型与 AlphaFold2 的差异,OpenFold 支持 AlphaFold2 的默认模型与 Finetuning 的模型,比较预测的蛋白质结构之间的差异,由于随机种子与模型架构 (Tensorflow 或 PyTorch) 的差异,实验结果,仅作为参考。

T1104-A117modelTMScoreRMSDTemplate
alphafold2model_1_ptm_pred_00.87601.832022-04-01
unrelaxed_model_1_pred_00.90361.662022-04-01
openfoldmodel_1_ptm0.56633.822022-04-01
model_10.86251.912022-04-01
model_1_ptm_finetune0.90011.442022-04-01
model_1_finetune0.81142.402022-04-01

其中,不同结构的比较,黄色是真实结构,蓝色来源于 AlphaFold2 的 monomer_ptm 模型,粉色来源于 OpenFold 的 finetuning_monomer_ptm 模型,即:
Img

1. 模型测试

测试序列 T1104-D1_A117.fasta 来自于 CASP15,即:

>A
QLEDSEVEAVAKGLEEMYANGVTEDNFKNYVKNNFAQQEISSVEEELNVNISDSCVANKIKDEFFAMISISAIVKAAQKKAWKELAVTVLRFAKANGLKTNAIIVAGQLALWAVQCG

MSA 来自于 AF2 的搜索结果,合计包括 380 条序列,即:

bfd_uniref_hits.a3m
mgnify_hits.sto
pdb_hits.hhr
uniref90_hits.sto

MSA 中 序列数量如下,来自于 AlphaFold2 的日志,即:

Uniref90 MSA size: 29 sequences.
BFD MSA size: 333 sequences.
MGnify MSA size: 28 sequences.
Final (deduplicated) MSA size: 380 sequences.

1.1 AlphaFold2 Monomer pTM 实验

使用 AlphaFold2 的 monomer_ptmmonomer 模型,作为对照实验,测试命令:

  • FASTA 路径:mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta
  • MSA 与 outputs 路径:mydata/openfold_test/monomer_ptm_outputs/mydata/openfold_test/monomer_outputs/,使用已搜索的 MSA 文件夹
  • 只使用 pred_0 结构,作为对照。

即:

bash run_alphafold.sh -o mydata/openfold_test/monomer_ptm_outputs/ -f mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta -m monomer_ptm -c full_dbs

bash run_alphafold.sh -o mydata/openfold_test/monomer_ptm_outputs/ -f mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta -m monomer -c full_dbs

其中,日志如下:

  • 模版日期:2022-04-01
  • MSA 数量:Final (deduplicated) MSA size: 380 sequences.

1.2 OpenFold 基于 AF2 模型参数 实验

测试命令:

  • FASTA 路径:mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta
  • MSA 与 outputs 路径:mydata/openfold_test/monomer_ptm_outputs/mydata/openfold_test/monomer_outputs/
  • 在 OpenFold 中默认的 max_template_date 与当前日期相同,因此,需要指定 2022-04-01

即:

python3 run_pretrained_openfold.py \
mydata/openfold_test/monomer_fasta/ \
af2-data-v230/pdb_mmcif/mmcif_files \
--uniref90_database_path af2-data-v230/uniref90/uniref90.fasta \
--mgnify_database_path af2-data-v230/mgnify/mgy_clusters_2022_05.fa \
--pdb70_database_path af2-data-v230/pdb70/pdb70 \
--uniclust30_database_path deepmsa2/uniclust30/uniclust30_2018_08 \
--output_dir mydata/openfold_test/monomer_ptm_outputs/T1104-D1_A117/ \
--bfd_database_path af2-data-v230/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--model_device "cuda:0" \
--jackhmmer_binary_path /opt/openfold/hhsuite-speed/jackhmmer \
--hhblits_binary_path /opt/conda/envs/openfold/bin/hhblits \
--hhsearch_binary_path /opt/conda/envs/openfold/bin/hhsearch \
--kalign_binary_path /opt/conda/envs/openfold/bin/kalign \
--config_preset "model_1_ptm" \
--jax_param_path af2-data-v230/params/params_model_1_ptm.npz \
--max_template_date 2022-04-01

测试非 ptm 版本:

#...
--config_preset "model_1" \
--jax_param_path af2-data-v230/params/params_model_1.npz \
#...

1.3 OpenFold 基于 Finetuning 模型参数 实验

模型来源于 Huggingface 地址,即:

  • finetuning_ptm_2:Checkpoints in chronological order corresponding to peaks in the pTM training phase of the mainline branch. Models in this category include the pTM module and comprise the most recent of the checkpoints in said branch.
  • 按时间顺序排列的检查点,对应于主线分支的 pTM 训练阶段的峰值。 此类别中的模型,包括 pTM 模块,并且包含所述分支中最新的检查点。

测试命令:

# ...
--config_preset "model_1_ptm" \
--openfold_checkpoint_path openfold/resources/openfold_params/finetuning_ptm_2.pt \
# ...

测试基础版本 model_1finetuning_5.pt 模型,命令如下:

# ...
--config_preset "model_1" \
--openfold_checkpoint_path openfold/resources/openfold_params/finetuning_5.pt \
# ...

2. 源码简读

将参数 openfold_checkpoint_path 修改成 jax_param_path,添加 AF2 的模型地址,即可推理,如下:

af2-data-v230/params/params_model_1_ptm.npz

测试命令:

python3 run_pretrained_openfold.py \
mydata/test \
af2-data-v230/pdb_mmcif/mmcif_files \
--uniref90_database_path af2-data-v230/uniref90/uniref90.fasta \
--mgnify_database_path af2-data-v230/mgnify/mgy_clusters_2022_05.fa \
--pdb70_database_path af2-data-v230/pdb70/pdb70 \
--uniclust30_database_path deepmsa2/uniclust30/uniclust30_2018_08 \
--output_dir mydata/output \
--bfd_database_path af2-data-v230/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--model_device "cuda:0" \
--jackhmmer_binary_path /opt/openfold/hhsuite-speed/jackhmmer \
--hhblits_binary_path /opt/conda/envs/openfold/bin/hhblits \
--hhsearch_binary_path /opt/conda/envs/openfold/bin/hhsearch \
--kalign_binary_path /opt/conda/envs/openfold/bin/kalign \
--config_preset "model_1_ptm" \
--jax_param_path af2-data-v230/params/params_model_1_ptm.npz

输出日志:

INFO:openfold/utils/script_utils.py:Successfully loaded JAX parameters at af2-data-v230/params/params_model_1_ptm.npz...
INFO:run_pretrained_openfold.py:Using precomputed alignments for A at mydata/output/alignments...
INFO:openfold/utils/script_utils.py:Running inference for A...
INFO:openfold/utils/script_utils.py:Inference time: 10.29592083580792
INFO:run_pretrained_openfold.py:Output written to mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:run_pretrained_openfold.py:Running relaxation on mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:openfold/utils/script_utils.py:Relaxation time: 6.760884702205658
INFO:openfold/utils/script_utils.py:Relaxed output written to mydata/output/predictions/A_model_1_ptm_relaxed.pdb...

MSA 部分的结构,outputs/alignments/A,即:

  • 没有单独的 fasta 同名文件夹。
  • 在 alignments 文件夹中,包括链名 A,之后就是 msa 文件。
  • 默认搜索格式都是 msa 格式,而 af2 部分是 sto 格式。

即:

bfd_uniclust_hits.a3m
mgnify_hits.a3m
pdb70_hits.hhr
uniref90_hits.a3m

在源码 run_pretrained_openfold.py 中,搜索 MSA 的部分,如下:

  • tags 是链名,即 ['A']
  • seqs 是序列,即 ['QLEDS...AVQCG']
  • precompute_alignments 是预计算 MSA 文件的方法。

# ...
logger.info(f"[CL] tags: {tags}, seqs: {seqs}")
# Does nothing if the alignments have already been computed
precompute_alignments(tags, seqs, alignment_dir, args)
# feature_dicts 第1次是空的,随着循环进行,逐步缓存已有的tag (链名)
feature_dict = feature_dicts.get(tag, None)
if feature_dicts:
    logger.info(f"[CL] feature_dict.keys: {feature_dict.keys()}")
# ...

在源码 run_pretrained_openfold.py 中,处理特征的部分,如下:

  • 临时 fasta 文件:process_fasta - tmp_fasta_path: mydata/output/tmp_26020.fasta,其中 26020 是 pid,即进程 id,避免重复。

即:

local_alignment_dir = os.path.join(alignment_dir, tag)
logger.info(f"[CL] process_fasta - tmp_fasta_path: {tmp_fasta_path}")
feature_dict = data_processor.process_fasta(
    fasta_path=tmp_fasta_path, alignment_dir=local_alignment_dir
)

在源码 openfold/data/data_pipeline.py 中,process_fasta() 是处理特征的部分,如下:

  • 特征包括:template_features 模版特征、sequence_features 序列特征、msa_features MSA 特征。
  • template_features 模版特征包括:template_aatypetemplate_all_atom_masktemplate_all_atom_positionstemplate_domain_namestemplate_sequencetemplate_sum_probs等 6 个部分。
  • sequence_features 序列特征包括:aatypebetween_segment_residuesdomain_nameresidue_indexseq_lengthsequence等 6 个部分。
  • msa_features MSA 特征包括:deletion_matrix_intmsanum_alignments等 3 个部分。
  • 这个特征,是整体特征预处理的核心。

即:

def process_fasta(
    self,
    fasta_path: str,
    alignment_dir: str,
    alignment_index: Optional[str] = None,
) -> FeatureDict:
    """Assembles features for a single sequence in a FASTA file""" 
    with open(fasta_path) as f:
        fasta_str = f.read()
    input_seqs, input_descs = parsers.parse_fasta(fasta_str)
    if len(input_seqs) != 1:
        raise ValueError(
            f"More than one input sequence found in {fasta_path}."
        )
    input_sequence = input_seqs[0]
    input_description = input_descs[0]
    num_res = len(input_sequence)

    hits = self._parse_template_hits(alignment_dir, alignment_index)
    template_features = make_template_features(
        input_sequence,
        hits,
        self.template_featurizer,
    )
    logger.info(f"[CL] template_features: {template_features.keys()}")

    sequence_features = make_sequence_features(
        sequence=input_sequence,
        description=input_description,
        num_res=num_res,
    )
    logger.info(f"[CL] sequence_features: {sequence_features.keys()}")

    msa_features = self._process_msa_feats(alignment_dir, input_sequence, alignment_index)
    logger.info(f"[CL] msa_features: {msa_features.keys()}")

    return {
        **sequence_features,
        **msa_features, 
        **template_features
    }

日志:

run_pretrained_openfold.py:Using precomputed alignments for A at mydata/output/alignments...
run_pretrained_openfold.py:[CL] generate_feature_dict - alignment_dir: mydata/output/alignments
run_pretrained_openfold.py:[CL] len(seqs): 1, seqs: ['QLEDSEVEAVAKGLEEMYANGVTEDNFKNYVKNNFAQQEISSVEEELNVNISDSCVANKIKDEFFAMISISAIVKAAQKKAWKELAVTVLRFAKANGLKTNAIIVAGQLALWAVQCG']
run_pretrained_openfold.py:[CL] process_fasta - tmp_fasta_path: mydata/output/tmp_26020.fasta
openfold/data/data_pipeline.py:[CL] template_features: dict_keys(['template_aatype', 'template_all_atom_mask', 'template_all_atom_positions', 'template_domain_names', 'template_sequence', 'template_sum_probs'])
openfold/data/data_pipeline.py:[CL] sequence_features: dict_keys(['aatype', 'between_segment_residues', 'domain_name', 'residue_index', 'seq_length', 'sequence'])
openfold/data/data_pipeline.py:[CL] msas size: 3
openfold/data/data_pipeline.py:[CL] msa_features['msa']: (260, 117)
openfold/data/data_pipeline.py:[CL] msa_features: dict_keys(['deletion_matrix_int', 'msa', 'num_alignments'])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux面试笔试题(5)

79、下列工具中可以直接连接mysql的工具有【c 】。 A.xsellB.plsqlC.navicatD.以上都不是 80、Linux系统最少的挂载点有两个【B 】 A.一个是根挂载点 home,另一个是swap B.一个是根挂载点/,另一个是swap C.一个是根挂载点 boot,另一个是sw…

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.SCNGO-CNN-Attention超前24步多变量回归预测算法。 程序平台:无Attention适…

vue 弹出框 引入另一个vue页面

为什么要这么做,适用于在一个页面逻辑比较多的时候,可以搞多个页面,防止出错 index页面点击解约按钮,弹出框 进入jieyue.vue 核心代码 <el-buttonsize"mini"type"text"icon"el-icon-edit"v-if"scope.row.delFlag 0"click"j…

openpnp - 日常使用的零碎记录

文章目录 openpnp - 日常使用的零碎记录概述抓偏贴偏的问题END openpnp - 日常使用的零碎记录 概述 设备标定已经妥妥的了(随时有需求从头要设备标定, 都是一次通过:) ), 现在主要是使用openpnp正常干活. 使用过程中, 发现了一些问题, 尝试解决并记录. 抓偏贴偏的问题 软件…

探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

前言 模型训练是指使用算法和数据对机器学习模型进行参数调整和优化的过程。模型训练一般包含以下步骤&#xff1a;数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 文章目录 前言数据收集数据预处理模型选择模型训练模型评估超参数调…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 3 Paramter标签页介绍

这页是参数设置的界面,那首先要知道什么是参数,参数就是算法中的系数这些可以更改的变量,接下来就是要学习如何创建参数,如下图: 打开模型资源管理器 选择model Workspace标签,点击上边工具栏里的创建参数的按钮(红色箭头指向的按钮),添加一个新的参数K,值设置为4,数…

摄影预约小程序制作的技术要点与难点解析

随着移动互联网的发展&#xff0c;小程序成为了很多企业和个人推广自己的产品和服务的有效工具。对于摄影师来说&#xff0c;一个功能完善、用户友好的摄影预约小程序可以方便客户预约拍摄时间&#xff0c;提升工作效率。那么&#xff0c;如何制作开发摄影预约小程序呢&#xf…

字幕翻译难吗,如何做好影视字幕翻译?

你是否曾经遇到过观看外国影视作品时&#xff0c;因为字幕翻译不准确而影响观影体验的情况&#xff1f; 专业的字幕翻译员不仅需要具备丰富的知识储备和语言组织能力&#xff0c;还要了解国内外文化风俗的差异。那么&#xff0c;如何才能做好影视字幕翻译呢&#xff1f;北京哪家…

CouchDB Erlang 分布式协议代码执行

漏洞描述 在CouchDB 3.2.1及以前版本中,使用了默认Cookie,值为“monster”,由于Erlang的特性,其支持分布式计算,分布式节点之间通过Erlang/OTP Distribution协议进行通信。攻击者如果知道通信时使用的Cookie,即可在握手包通过认证并执行任意命令。 免责声明 技术文章…

正中优配:降息利好什么股票?降息利好什么板块?

降息通常是指央行下降银行的存款、贷款利率&#xff0c;它是一种宽松的货币政策&#xff0c;会导致资金从银行流出&#xff0c;存款变为出资或消费&#xff0c;结果是资金流动性添加&#xff0c;给股市带来更多的资金&#xff0c;整体上会影响股市的上涨&#xff0c;那么&#…

2023-08-21 Unity Shader 开发入门1 —— 渲染管线

文章目录 一、概述二、应用阶段三、几何阶段四、光栅化阶段 一、概述 ​ Unity 中的渲染管线和图形学中的渲染管线基本上指的是相同的概念&#xff0c;但是具体实现和细节方面可能存在一些差异。 ​ Unity 的渲染管线建立在图形学的基础上&#xff0c;但具有自己的实现和拓展。…

windows安装使用RocketMQ常见问题,及springboot整合

win安装rocketmq 官网下载二进制包&#xff1a;https://rocketmq.apache.org/download 解压到不包含中文及空格的目录&#xff0c;配置环境变量 ROCKETMQ_HOME4. 修改runbroker.cmd和runserver.cmd文件 文件地址在rocketmq安装目录下的bin文件夹中。 如果不修改可能会遇见以…

CSS伪类:where和:is

CSS伪类:where和:is 1 :where1.1 概述1.2 组合与叠加1.3 优先级1.4 安全性1.5 兼容性 2 :is兼容性 1 :where 1.1 概述 :where()接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 例如&#xff0c;在以下代码中&#xff0c;a标…

linux安装 jdk

1.下载 jdk 网盘资源&#xff1a; 链接: https://pan.baidu.com/s/1Z-fyHGDyj9b_km6ymR6mZg?pwdwd42 提取码: wd42 2.上传至服务器并解压 这里是上传至/opt 文件夹&#xff0c;并创建了/opt/soft 文件夹&#xff0c;解压在此 cd /opt tar -zxvf ./jdk-8u321-linux-x64.t…

8月18日上课内容 Haproxy搭建Web群集

本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5&#xff0c;也有很多人使用国内的一些产品&#xff0c;如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…

微信小程序使用云存储和Markdown开发页面

最近想在一个小程序里加入一个使用指南的页面&#xff0c;考虑到数据存储和减少页面的开发工作量&#xff0c;决定尝试在云存储里上传Markdown文件&#xff0c;微信小程序端负责解析和渲染。小程序端使用到一个库Towxml。 Towxml Towxml是一个可将HTML、Markdown转为微信小程…

mysql 、sql server 游标 cursor

游标 声明的位置 游标必须在声明处理程序之前被声明&#xff0c;并且变量和条件还必须在声明游标或处理程序之前被声明 游标的使用步骤 声明游标打开游标使用游标关闭游标 &#xff08;sql server 关闭游标和释放游标&#xff09; sql server 游标 declare my_cursor curs…

Redis企业级解决方案

缓存预热 “ 宕机 ” 服务器启动后迅速宕机 问题排查 1. 请求数量较高 2. 主从之间数据吞吐量较大&#xff0c;数据同步操作频度较高 , 因为刚刚启动时&#xff0c;缓存中没有任何数据 解决方案 准备工作&#xff1a; 1. 日常例行统计数据访问记录&#xff0c;统计访…

亚马逊云科技 云技能孵化营——机器学习心得

亚马逊云科技 云技能孵化营机器学习心得 前言什么是机器学习&#xff1f;机器学习如何解决业务问题&#xff1f;什么时候适合使用机器学习模型&#xff1f;总结 前言 很荣幸参加了本次亚马逊云科技云技能孵化营&#xff0c;再本期的《亚马逊云科技云技能孵化营》中&#xff0c…

eNSP综合小实验:VRRP、MSTP、Eth-Trunk、NAT、DHCP等技术应用

完成下图要求&#xff1a; 拓扑图&#xff1a; 配置命令&#xff1a; 由于交换机日志太多不便于复制&#xff0c;所以就复制命令。大概步骤如下&#xff1a; 第一步先分配IP地址&#xff0c;在sw1和sw2上创建VLAN100用于e0/0/3口配IP&#xff0c;在sw1、sw2、sw3、sw4上创建VL…