PSP - 扩散生成模型 (Diffusion Generative Model) 预测蛋白质结构 EigenFold 算法与环境配置

news2024/10/6 6:04:49

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

EigenFold

Paper: EigenFold: Generative Protein Structure Prediction with Diffusion Models

EigenFold 是用于蛋白质结构预测的扩散生成模型(即,已知序列 至 结构分布)。基于谐波扩散,将键约束纳入扩散建模框架,并且产生一个级联分辨率的生成过程。

  • 扩散生成模型 (Diffusion Generative Model):利用随机扩散过程,生成数据样本的机器学习模型。
  • 谐波扩散 (Harmonic Diffusion):考虑谐波势能对于扩散过程的影响的数学模型。
  • 键约束 (Bond Constraints):限制蛋白质中原子间距离和角度变化范围的物理条件。
  • 级联分辨率 (Cascading-Resolution) :从粗糙到精细,逐步提高生成结果质量的方法。
  • OmegaFold 嵌入向量(OmegaFold Embeddings):由 OmegaFold 模型产生的,表示蛋白质序列特征的向量。

EigenFold 算法重点:

  • 蛋白质结构生成的新方法: 基于扩散模型的生成式模型,可以从给定的蛋白质序列生成一组可能的结构。该模型利用 OmegaFold 的预训练嵌入和得分网络来学习蛋白质结构的概率分布。
  • 谐波扩散过程:定义新的扩散过程,将蛋白质结构建模为一系列谐振子,其势能为相邻残基之间的距离的二次函数。该过程可以保证采样的结构满足化学约束,并且可以沿着系统的本征模式进行投影,实现逐步精细化的生成过程。
  • 得分网络架构:使用基于 E3NN 的图神经网络作为得分网络,输入为残基坐标和 OmegaFold 嵌入向量,输出为梯度向量。该网络具有 SE(3) 等变性,保证最终模型密度也具有 SE(3) 不变性。

EigenFold GitHub: https://github.com/bjing2016/EigenFold


1. 结构预测

准备 new.csv 文件,预测 7skh.B 的结构,即:

# with columns name, seqres (see provided splits for examples) and run
name,valid_alphas,seq,head,resolution,deposition_date,release_date,structure_method,seqres,seqlen
7skh.B.pdb,220,NAPVFQQPHYEVVLDEGPDTINTSLITVQALDGTVTYAIVAGNIINTFRINKHTGVITAAKELDYEISHGRYTLIVTATDQCPILSHRLTSTTTVLVNVNDINDNVPTFPRDYEGPFDVTEGQPGPRVWTFLAHDRDSGPNGQVEYSVVDGDPLGEFVISPVEGVLRVRKDVELDRETIAFYNLTICARDRGVPPLSSTMLVGIRVLDINDNLEHHHHHH,cell adhesion,2.27,2021-10-20,2022-10-26,x-ray diffraction,MNAPVFQQPHYEVVLDEGPDTINTSLITVQALDLDEGPNGTVTYAIVAGNIINTFRINKHTGVITAAKELDYEISHGRYTLIVTATDQCPILSHRLTSTTTVLVNVNDINDNVPTFPRDYEGPFDVTEGQPGPRVWTFLAHDRDSGPNGQVEYSVVDGDPLGEFVISPVEGVLRVRKDVELDRETIAFYNLTICARDRGVPPLSSTMLVGIRVLDINDNLEHHHHHH,227

运行命令:

python make_embeddings.py --out_dir ./embeddings --splits mydata/new.csv
python inference.py --model_dir ./pretrained_model --ckpt epoch_7.pt --pdb_dir ./structures --embeddings_dir ./embeddings --embeddings_key name --elbo --num_samples 5 --alpha 1 --beta 3 --elbo_step 0.2 --splits mydata/new.csv

预测的蛋白质结构,如下:

  • EigenFold 算法只能预测 CA 骨架,其余需要填充。
  • 黄色是 EigenFold 的预测结构,蓝色是真实的 PDB 结构 (7skh.B)。

即:

Img


2. 环境配置

下载 GitHub 工程:

git clone git@github.com:bjing2016/EigenFold.git

2.1 配置 Docker 环境

构建 Docker 环境:

nvidia-docker run -it --name eigenfold-[your name] -v [nfs path]:[nfs path] af2:v1.02

预先配置 Docker 环境中的 conda 源 与 pip 源,加速下载过程,参考 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

如果安装错误,清空 conda 环境,建议使用 rsync 快速删除,即:

mkdir tmp
rsync -a --delete tmp/ /opt/conda/envs/eigenfold
rm -rf /opt/conda/envs/eigenfold

配置 conda 环境,即:

# 安装 conda 环境
conda create -n eigenfold python=3.8
conda activate eigenfold

2.2 配置 PyTorch 系列包

安装 PyTorch,建议使用 conda 安装,而不是 pip 安装,参考 Installing Previous Versions of PyTorch 即:

# pip 安装异常,建议使用 conda 安装。
# pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

预先测试 PyTorch 是否安装成功,即:

python

import torch
print(torch.__version__)  # 1.11.0
print(torch.cuda.is_available())  # True

再安装 PyTorch 相关包,一共 5 个包,即 torch-scattertorch-sparsetorch-clustertorch-spline-convtorch-geometric,建议逐个安装,排查问题,即:

pip install torch-scatter -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-sparse -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-cluster -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-spline-conv -f https://data.pyg.org/whl/torch-1.11.0+cu113.html
pip install torch-geometric -f https://data.pyg.org/whl/torch-1.11.0+cu113.html

安装其他依赖包:

pip install e3nn pyyaml wandb biopython matplotlib pandas

2.3 配置 OmegaFold 依赖

安装 OmegaFold 依赖,即:

# 调用时,需要在 EigenFold 的根目录下。
wget https://helixon.s3.amazonaws.com/release1.pt
git clone https://github.com/bjing2016/OmegaFold
pip install --no-deps -e OmegaFold

注意需要预先下载 OmegaFold 的模型 release1.pt,大约 3 个 G左右。

OmegaFold GitHub: OmegaFold

This command will download the weight from https://helixon.s3.amazonaws.com/release1.pt to ~/.cache/omegafold_ckpt/model.pt and load the model

cd EigenFold
bypy info
bypy downfile /huggingface/eigenfold/omegafold-release1.pt model.pt

2.4 配置 TMScore 与 LDDT

安装 TMScore 与 LDDT,即:

mkdir /opt/bin
cd ~/bin

wget https://openstructure.org/static/lddt-linux.zip
unzip lddt-linux.zip
cp lddt-linux/lddt .
./lddt  # 测试

wget https://zhanggroup.org/TM-score/TMscore.cpp
g++ -static -O3 -ffast-math -lm -o TMscore TMscore.cpp
./TMscore  # 测试

export PATH="/opt/bin/:$PATH"

BugFix

Bug1: torch_sparse 版本不兼容问题。

RuntimeError: 
object has no attribute sparse_csc_tensor:
  File "/opt/conda/envs/eigenfold/lib/python3.8/site-packages/torch_sparse/tensor.py", line 520
            value = torch.ones(self.nnz(), dtype=dtype, device=self.device())
    
        return torch.sparse_csc_tensor(colptr, row, value, self.sizes())
               ~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE

参考: torch has no attribute sparse_csr_tensor

torch-sparse 降级至 0.6.14 版本,即可:

conda list torch-sparse
# packages in environment at /opt/conda/envs/eigenfold:
#
# Name                    Version                   Build  Channel
torch-sparse              0.6.17                   pypi_0    pypi

pip install torch-sparse==0.6.14 -f https://data.pyg.org/whl/torch-1.11.0+cu113.html

Bug2: Python 3.9 新特性不兼容问题

TypeError: unsupported operand type(s) for |: 'dict' and 'dict'

原因:What’s New In Python 3.9

方案1是升级至 Python3.9 版本,方案2是修改源码,位于EigenFold/utils/pdb.py,即:

# d[key] = {'CA': 'C'} | {key: val['symbol'] for key, val in atoms.items() if val['symbol'] != 'H' and key != 'CA'}
dict1 = {'CA': 'C'}
dict2 = {key: val['symbol'] for key, val in atoms.items() if val['symbol'] != 'H' and key != 'CA'}
d[key] = {**dict1, **dict2}

其余参考:

  • Linux 下删除大量文件效率对比,看谁删的快!

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

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

相关文章

Intel CPU E-core 和P-core 介绍

多年来&#xff0c;计算机 CPU 中的内核一直在以稳定的速度发展。我们最初有单核 CPU&#xff0c;但很快发展到多线程&#xff0c;然后从那里开始多核设置&#xff0c;从双核设计开始&#xff0c;然后推出四核、八核等。 英特尔的第 12 代 CPU 给我们带来了意想不到的惊喜&…

微信小程序拉起支付报: 调用支付JSAPI缺少参数: total_fee

1. 调用支付JSAPI缺少参数: total_fee 2. 检查返回给前端调起支付的参数是否正确 一开始是params.put("package", prepay_id); 回来改回params.put("package", "prepay_id"prepay_id);

LeetCode刷题——46.全排列

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 【递归实现】 func permute(nums []int) [][]int {var permutation func([]int, int, int)r : make([][]int,0)permutation func(arr []int, start int,…

【动态规划】两个数组问题

文章目录 动态规划&#xff08;两个数组问题&#xff09;1. 最长公共子序列2. 不相交的线3. 不同的子序列4. 交错字符串5. 两个字符串的最小ASCII和6. 最长重复子数组7. 通配符匹配 动态规划&#xff08;两个数组问题&#xff09; 1. 最长公共子序列 题目链接 状态表示 dp[i]…

爬虫小白也能玩转!Python爬虫中的异常处理与网络请求优化

大家好&#xff0c;我是来自爬虫世界的小编。今天&#xff0c;我要和大家分享一些关于Python爬虫中的异常处理和网络请求优化的经验。不论你是初学者还是有一定经验的爬虫程序员&#xff0c;我相信这些实用的技巧和代码示例都能为你在爬取数据的过程中带来方便和效率。 1.异常…

广告牌安全传感器,实时监测事故隐患尽在掌握

在现代城市中&#xff0c;广告牌作为商业宣传的重要媒介&#xff0c;已然成为城市中一道独特的风景线。然而&#xff0c;随着城市迅速发展&#xff0c;广告牌的安全问题也引起了大众关注。广告招牌一般悬挂于建筑物高处&#xff0c;量大面大。由于设计、材料、施工方法的缺陷&a…

VC2019调用pngquantDLL示例源码

pngquantDLL是大名鼎鼎的PNG图片压缩命令行程序pngquant的源码编译的一个DLL库文件&#xff0c;主要是方便第三方程序集成使用&#xff1b; pngquant是一个命令行实用程序和一个用于有损压缩PNG图像的库。 这种转换大大减少了文件大小(通常高达70%)&#xff0c;并保持了alpha透…

相机的位姿在地固坐标系ECEF和ENU坐标系的转换

在地球科学和导航领域&#xff0c;通常使用地心地固坐标系&#xff08;ECEF&#xff0c;Earth-Centered, Earth-Fixed&#xff09;和东北天坐标系&#xff08;ENU&#xff0c;East-North-Up&#xff09;来描述地球上的位置和姿态。如下图所示&#xff1a; ​地心地固坐标ecef和…

fastapi系列1-基础知识

学习资料 官网&#xff1a;https://fastapi.tiangolo.com/ github:https://github.com/tiangolo/fastapi 视频教程【独家新技术】从0到1学习 FastAPI 框架的所有知识点 依赖底层包&#xff1a;https://www.starlette.io/ 轻松上手Python的Web神器&#xff1a;FastAPI教程&…

ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹

参考文章&#xff1a;https://blog.csdn.net/Edwinwzy/article/details/129580636 虚拟机启用共享文件夹后&#xff0c;/mnt/hgfs下面为空&#xff0c;使用 vmware-hgfsclient 查看设置的共享文件夹名字也是为空。 解决方法&#xff1a; 1. 重新安装vmware tools. 在菜单…

HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制ForEach循环渲染

ForEach基于数组类型数据执行循环渲染。说明&#xff0c;从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 一、接口描述 ForEach(arr: any[], itemGenerator: (item: any, index?: number) > void,keyGenerator?: (item: any, index?: number) > stri…

谈谈IP地址和子网掩码的概念及应用

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、IP地址的概念 二、IP地址的分类 1、A类 …

react之 router6路由 (两种路由模式、两种路由跳转、两种传参与接收参数、嵌套路由,layout组件、路由懒加载)

目录 react路由1&#xff1a;安装和两种模式react路由2&#xff1a;两种路由跳转 &#xff08; 命令式与编程式&#xff09;2-1 路由跳转-命令式2-2 路由跳转-编程式 - 函数组件2-2-1 app.jsx2-2-2 page / Home.jsx2-2-3 page / About.jsx2-2-4 效果 react路由3&#xff1a;函数…

恒运资本:A股质押降至十年新低,高比例质押公司不足1%!

2018年&#xff0c;A股商场股权质押规划到达历史高位&#xff0c;为化解危险&#xff0c;监管层通过多种方式、多方合力给予纾解&#xff0c;取得积极成效。上篇分析了A股质押危险大幅缓解的六大原因&#xff0c;本篇从高份额质押股特征、职业、地域、企业类型等视点&#xff0…

七麦analysis参数加密分析

文章目录 1. 接口分析2. 断点调式3. 补环境重写加密4. 验证结果 1. 接口分析 目标站点&#xff1a; aHR0cHM6Ly93d3cucWltYWkuY24vcmFuay9tYXJrZXRSYW5r 先刷新网页&#xff0c;请求接口中的analysis参数本次分析的目标 2. 断点调式 打上XHR断点&#xff0c;刷新页面之后断点…

【MT32F006】MT32F006之串口

本文最后修改时间&#xff1a;2023年03月30日 一、本节简介 本文介绍如何使用MT32F006的串口。 二、实验平台 库版本&#xff1a;V1.0.0 编译软件&#xff1a;MDK5.37 硬件平台&#xff1a;MT32F006开发板&#xff08;主芯片MT32F006&#xff09; 仿真器&#xff1a;JLINK…

无涯教程-Perl - umask函数

描述 此函数为当前进程设置umask(创建文件和目录时应用的默认掩码)。 EXPR的值必须是八进制数。如果省略EXPR,则只需返回先前的值。 语法 以下是此函数的简单语法- umask EXPRumask返回值 此函数返回先前的umask值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/pe…

Java学习笔记30——字节缓冲流

字节缓冲流 字节缓冲流缓冲输出流缓冲输入流 复制视频速度对比 字节缓冲流 缓冲输出流 BufferadOutputStream通过设置这样的输出流&#xff0c;应用程序可以向底层输出流写入字节&#xff0c;而不必为写入的每个细节导致底层系统的调用 构造方法 BufferadOutputStream(Outpu…

【Elsevier旗下】1区SCI,5天见刊!稳定检索36年

近日国自然即将发布&#xff0c;想必申请过国自然基金作者都知道&#xff0c;需要有研究基础&#xff0c;说白了就是需要有文章支持。那么稿子写好了&#xff0c;选择一本靠谱优质期刊也是一门学问。 以下2本Elsevier 旗下审稿快刊&#xff0c;各项指标优秀&#xff0c;实为评…