基于昇腾适配DeepMind团队发布的蛋白质结构预测模型OpenFold

简介: OpenFold是一种基于深度学习的蛋白质结构预测模型,广泛应用于蛋白质从头预测、功能位点解析、突变效应模拟等领域。该模型的核心目标是通过大规模预训练和多阶段优化,从氨基酸序列中高效、准确地推断蛋白质的三维结构。

1.摘要

OpenFold是一种基于深度学习的蛋白质结构预测模型,广泛应用于蛋白质从头预测、功能位点解析、突变效应模拟等领域。该模型的核心目标是通过大规模预训练和多阶段优化,从氨基酸序列中高效、准确地推断蛋白质的三维结构。OpenFold结合了Transformer架构和几何优化模块,显著提高了结构预测的精度和速度。该模型的部署包含详细的微调教程、模型训练、推理优化等内容,为研究人员提供了全面的技术支持。

2. OpenFold介绍

图片
OpenFold是由DeepMind团队开发的一种高效蛋白质结构预测模型。该模型在AlphaFold2的基础上进行了多项改进,进一步提升了蛋白质结构预测的准确性和计算效率。其核心算法包括大规模预训练的Transformer模型和几何优化模块,能够从氨基酸序列中快速推断出蛋白质的三维结构。通过多阶段优化和大规模数据集的训练,该模型在蛋白质从头预测、功能位点解析、突变效应模拟等领域展现了卓越的性能。此外,OpenFold的部署文档详细介绍了模型的微调、训练、推理优化等步骤,为研究人员提供了全面的技术支持,推动了蛋白质结构预测技术的广泛应用。

3. OpenFold网络架构

OpenFold的模型架构由三个核心模块构成:输入嵌入层、Evoformer堆叠模块和结构解码器。输入数据整合了多序列比对(MSA)、模板特征、氨基酸序列及进化信息,形成高维生物特征张量。通过分阶段嵌入与特征融合,数据首先被压缩至低维隐空间,随后由多尺度Evoformer模块进行全局-局部特征交互,最终通过几何约束的结构解码器输出蛋白质的3D原子坐标与置信度。

3.1 输入嵌入层

为统一处理异构生物特征并降低计算复杂度,OpenFold采用混合嵌入策略:
MSA嵌入:使用1D卷积核(宽度=3,步长=1)对MSA序列进行通道压缩,配合层归一化(LayerNorm)稳定训练。
模板嵌入:通过残差连接的3D卷积(核3×3×3,步长1×2×2)提取模板结构特征,输出通道数对齐主嵌入空间。
序列特征投影:氨基酸物理化学属性经全连接层映射至隐空间,与上述嵌入结果拼接,形成初始隐状态张量(维度:C×L,L为序列长度)。

3.2 Evoformer堆叠模块该模块

由48层对称Evoformer块构成,采用双路处理机制:
全局注意力通路:引入轴向注意力机制,在序列维度(L)和MSA行维度(N)交替执行缩放余弦注意力,计算效率较传统Transformer提升3.2倍。每层包含:
局部结构通路:使用门控卷积网络(核大小=5,膨胀率=2)捕获局部氨基酸环境特征,配合三角更新机制建模残基间几何关系。每层输出经GroupNorm归一化后与全局通路特征融合。

3.3 结构解码器

主干几何生成:基于隐变量通过迭代对齐层(Invariant Point Attention, IPA)逐步优化主链扭转角 侧链重建:采用条件随机场(CRF)对侧链构象进行能量最小化采样,结合Rosetta能量函数约束立体化学合理性。
输出层:最终通过SE(3)-等变全连接层输出原子坐标(维度:L×37×3,37为每个残基原子数)及置信度热图(分辨率1Å)。

4.核心组件安装

4.1 组件版本

hdk:24.1.0.3
cann:8.0.RC3
python:3.9.2
torch:2.1.0
torch_npu:2.1.0.post6
openfold:1.0.0
torchaudio:2.1.0
torchmetrics:1.7.1
torchvision:0.16.0
pytorch-lightning:1.6.54.2 起容器docker run -it \
--privileged=true \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common \
-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
--name openfold 27913b525135 /bin/bash

4.3 安装Openfold

注:如果直接git clone安装,则默认安装的是2.0.0版本的openfold,我们需要的是1.0.0版本

4.3.1 下载源码

git clone --filter=blob:none --quiet https://github.com/aqlaboratory/openfold.git ./openfold
图片
图片
图片

4.3.2 将版本修改为1.0.0

cd ./openfold/
git rev-parse -q --verify 'sha^4b41059694619831a7db195b7e0988fc4ff3a307'
图片
git fetch -q https://github.com/aqlaboratory/openfold.git 4b41059694619831a7db195b7e0988fc4ff3a307
图片
git checkout -q 4b41059694619831a7db195b7e0988fc4ff3a307
图片
du -sh
图片
再vi setup.py查看,此时就变成了1.0.0版本
图片

4.3.3 修改openfold的setup.py文件

vi /home/openfold/setup.py在头部从torch.utils.cpp_extension中增加对cppextension的引用
图片
修改get_cuda_bare_metal_version函数,增加对有没有cuda的判断
图片
修改ext_modules的内容如下
图片

4.3.4 编译安装

pip install e .
图片
报错找不到torch,但此时torch已经安装好了pip install --upgrade setuptools更新setuptools工具
图片
pip install --upgrade pip
pip install wheel更新 pip,安装wheel
图片
pip install e .报错
图片
但pip list却能查到openfold(可能是python自动将当前目录加入了模块搜索路径导致的)看能否导入python -c "import openfold; print(openfold.version)"
图片
报错ModuleNotFoundError: No module named 'torch._six' 原因:pytorch版本与deepspeed版本冲突,torch._six 是pytorch旧版本中的模块,新版本已移除。解决办法:更新deepspeedpip install --upgrade deepspeed报错
图片
设置环境变量export ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/
pip install --upgrade deepspeed继续报错
图片
source cann
source /usr/local/Ascend/ascend-toolkit/set_env.sh
pip install --upgrade deepspeed
图片
python -c "import openfold; print(openfold.version)"
图片
报错原因:pytorch lightning版本不兼容,seed_everything在当前pytorch lightning版本中已被移动到新的模块路径。解决办法:降低pytorch lightning版本pip install pytorch_lightning==1.6.5
图片
但要先降低pip的版本pip install pip==23.1
图片
pip install pytorch_lightning==1.6.5
图片
图片
python -c "import openfold; print(openfold.version)"
图片
报错原因:dllogger是cuda的日志记录工具,安装需要基于cuda驱动,故在昇腾上面无法安装解决办法:注销dllogger的导入,用python的标准库logging取代vi /home/910_tools/openfold/openfold/utils/logger.py
图片
python -c "import openfold; print(openfold.version)"报错ModuleNotFoundError: No module named 'attn_core_inplace_cuda'
图片
pip list | grep open此时只有在openfold的源码目录才能用pip list查询到
图片
且无法卸载
图片
在根目录或者其它目录查询不到
图片
怀疑根本就没装好,重新安装export OPENFOLD_DISABLE_CUDA=1 # 运行时禁用CUDA相关代码
export NO_CUDA=1 # 安装时禁用CUDA扩展编译
pip install . --no-build-isolation报错ninja: error: '/home /910_tools/openfold/openfold/utils/kernel/csrc/softmax_cuda_stub.cpp', needed by '/home /910_tools/openfold/build/temp.linux-aarch64-cpython-39/openfold/utils/kernel/csrc/softmax_cuda_stub.o', missing and no known rule to make it
图片
vi /home/910_tools/openfold/setup.py将cmdclass={'build_ext': BuildExtension}改为cmdclass={'build_ext': BuildExtension.with_options(use_ninja=False)}
图片
pip install . --no-build-isolation报错g++: error: openfold/utils/kernel/csrc/softmax_cuda_stub.cpp: No such file or directory
图片
查看csrc文件夹ll /home /910_tools/openfold/openfold/utils/kernel/csrc
图片
发现确实没有softmax_cuda_stub.cpp这个文件但GitHub上面的源码却有这个文件
图片
touch softmax_cuda_stub.cppvi softmax_cuda_stub.cpp将源码复制进去 wq保存退出
图片
图片
再次执行pip install . --no-build-isolation
图片
安装成功验证此时不论哪里都能查得到openfold
图片
图片

4.4 安装OpenMM

直接pip install openmm会报错
图片
报错原因:当前服务器架构是aarch64,而通过pypi下载的openmm,没有aarch64架构的whl离线包,所以会安装失败。pypi.org上面仅有8.1.1版本以上且没有aarch64架构的包
图片
通过源码编译的方式安装失败
图片
解决办法在conda-forge的package中搜索openmm
图片
选择要安装的版本和机器架构
图片
下载openmm的预编译的二进制包(非源码包)
图片
注: 如果是conda环境,直接在当前环境执行conda install --use-local openmm-7.7.0-py39h127581e_1.tar.bz2
图片
若是docker环境还需以下操作解压tar -xjf openmm-7.7.0-py39h127581e_1.tar.bz2
图片
图片
将openmm的python模块复制到容器中python的site-packages中cp -r ./lib/python3.9/site-packages/openmm /usr/local/python3.9.2/lib/python3.9/site-packages/
图片
将openmm的共享库(.so 文件)复制到 Python 的 lib 目录并更新动态链接器缓存cp libOpenMM* /usr/local/python3.9.2/lib/
ldconfig
图片
验证容器的python环境中openmm的安装情况
图片
4.5 安装pdbfixer直接pip install pdbfixer会报错pip install pdbfixer
图片
下载源码使用pip install .安装git clone https://github.com/openmm/pdbfixer.git
图片
pip install .但此时默认安装的是最新版的pdbfixer,提示需要8.2版本以上的openmm
图片
查看所有版本信息git ls-remote --tags origin
图片
从源码中看到1.8.1版本的pdbfixer,要求openmm的版本大于7.2即可,所以安装1.8.1版本
图片
切换至1.8.1版本git checkout tags/v1.8.1
图片
pip install . 安装成功
图片
pip list | grep pdb查看
图片

5.实验

5.1 下载openfold权重

bash scripts/download_openfold_params.sh openfold/resources报错,需要安装aws
图片
安装好之后重新执行报错
图片
原因:在Python 3环境中运行了为Python 2编写的代码。print语句缺少括号。解决办法:卸载aws,重新安装。
图片
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
图片
aws –version
图片
重新执行脚本下载权重bash scripts/download_openfold_params.sh openfold/resources
图片
5.2 下载数据集bash scripts/download_alphafold_dbs.sh data/报错Error: aria2c could not be found. Please install aria2c (sudo apt install aria2).
图片
apt update && apt install aria2 -y
图片
开始下载
图片
但原始数据集太大,手动创建蛋白质序列测试

5.3创建蛋白质序列测试文件

新建data目录,在data目录新建test.fastavi test.fasta内容为>test_sequence|PDBID|1AKIGIVEQCCTSICSLYQLENYCN保存退出注:上述为简化胰岛素类似物(PDB ID: 1AKI)蛋白质序列
图片

5.4 下载蛋白质模板文件

mkdir -p template_mmcif_dir/pdb_mmcif/mmcif_files/下载蛋白质模板文件https://files.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/ak/1aki.cif.gz
图片
解压之后放至template_mmcif_dir/pdb_mmcif/mmcif_files/
图片

5.5 推理

vi run_pretrained_openfold.py导入torch-npu
图片
执行推理python3 run_pretrained_openfold.py /home/910_tools/data/ /home/910_tools/template_mmcif_dir/pdb_mmcif/mmcif_files/ --output_dir /home/910_tools/output/ --model_device "npu:0" --config_preset "model_1_ptm" --openfold_checkpoint_path /home/openfold/openfold/resources/openfold_params/finetuning_ptm_2.pt报错
图片
原因:openfold中使用了np.object的方式,而新版本numpy已不使用此写法解决办法:在代码中搜索所有np.object和np.bool,将其替换为object、boolgrep -rn "np.object" openfold/
grep -rn "np.bool" openfold/
图片
2.降低numpy版本,但要考虑更多的版本冲突(不建议)
图片
执行推理python3 run_pretrained_openfold.py /home/910_tools/data/ /home/910_tools/template_mmcif_dir/pdb_mmcif/mmcif_files/ --output_dir /home/910_tools/output/ --model_device "npu:0" --config_preset "model_1_ptm" --openfold_checkpoint_path /home/openfold/openfold/resources/openfold_params/finetuning_ptm_2.pt报错
图片
报错原因:deepspeed属性不在utils模块解决办法:将涉及到deepspeed.utils.is_initialized()的地方都修改为deepspeed.comm.is_initialized()执行推理报错
图片
报错原因:openfold自定义了一个注意力机制,底层会调用cuda核心进行加速解决办法:使用原生的torch操作代替cuda操作vi /home/910_tools/openfold/openfold/utils/kernel/attention_core.py删除原始代码将下面代码复制到attention_core.py保存退出import torch
import torch.nn.functional as F
from functools import reduce
from operator import mul
class AttentionCoreFunction(torch.autograd.Function):
@staticmethod
def forward(ctx, q, k, v, bias_1=None, bias_2=None):
if bias_1 is None and bias_2 is not None:
raise ValueError("bias_1 must be specified before bias_2")
q = q.contiguous()
k = k.contiguous()
v = v.contiguous()
attention_logits = torch.matmul(q, k.transpose(-1, -2))
if bias_1 is not None:
attention_logits += bias_1
if bias_2 is not None:
attention_logits += bias_2
attention_probs = F.softmax(attention_logits, dim=-1)
o = torch.matmul(attention_probs, v)
ctx.save_for_backward(q, k, v, attention_probs)
ctx.bias_1_shape = bias_1.shape if bias_1 is not None else None
ctx.bias_2_shape = bias_2.shape if bias_2 is not None else None
return o
@staticmethod
def backward(ctx, grad_output):
q, k, v, attention_probs = ctx.saved_tensors
grad_q = grad_k = grad_v = grad_bias_1 = grad_bias_2 = None
grad_v = torch.matmul(attention_probs.transpose(-1, -2), grad_output)
grad_attn = torch.matmul(grad_output, v.transpose(-1, -2))
grad_attn_logits = attention_probs (grad_attn - (grad_attn attention_probs).sum(dim=-1, keepdim=True))
grad_q = torch.matmul(grad_attn_logits, k)
grad_k = torch.matmul(q.transpose(-1, -2), grad_attn_logits).transpose(-1, -2)
if ctx.bias_1_shape is not None:
grad_bias_1 = grad_attn_logits.sum(
dim=tuple(i for i, d in enumerate(ctx.bias_1_shape) if d == 1),
keepdim=True
)
if ctx.bias_2_shape is not None:
grad_bias_2 = grad_attn_logits.sum(
dim=tuple(i for i, d in enumerate(ctx.bias_2_shape) if d == 1),
keepdim=True
)
return grad_q, grad_k, grad_v, grad_bias_1, grad_bias_2
attention_core = AttentionCoreFunction.apply执行推理
图片
报错,和上述报错一本质一样vi /home/910_tools/openfold/openfold/model/structure_module.py注销45行attn_core_inplace_cuda = importlib.import_module("attn_core_inplace_cuda")添加from openfold.utils.kernel.attention_core import AttentionCoreFunction
图片
删除435行调用attn_core_inplacecuda.forward代码,使用原生softmax实现
图片
图片
执行推理
图片
报错ModuleNotFoundError: No module named 'simtk.openmm'原因:openmm或相关依赖中使用比较老的openmm导入方式解决办法:将openfold、openmm、pdbfixer中所有涉及到simtk.openmm的地方都修改为openmm
图片
图片
重新执行推理
图片
推理成功输出文件
图片

相关文章
|
SQL 存储 关系型数据库
一文搞懂SQL优化——如何高效添加数据
**SQL优化关键点:** 1. **批量插入**提高效率,一次性建议不超过500条。 2. **手动事务**减少开销,多条插入语句用一个事务。 3. **主键顺序插入**避免页分裂,提升性能。 4. **使用`LOAD DATA INFILE`**大批量导入快速。 5. **避免主键乱序**,减少不必要的磁盘操作。 6. **选择合适主键类型**,避免UUID或长主键导致的性能问题。 7. **避免主键修改**,保持索引稳定。 这些技巧能优化数据库操作,提升系统性能。
1351 4
一文搞懂SQL优化——如何高效添加数据
|
9月前
|
并行计算 PyTorch 算法框架/工具
OpenFold2.0 基于NPU的推理适配与测试
本教程详细介绍了 OpenFold 的环境搭建、代码部署、依赖安装、数据集准备及推理测试全流程。首先通过 Anaconda 创建 Python3.9 环境并配置相关库,接着克隆 OpenFold 代码仓库并安装必要依赖(如 PyTorch、dllogger、hhsuite 等)。随后准备 PDB 数据集与模型参数,调整脚本路径以适配运行环境。最后执行推理脚本完成测试,并针对常见报错提供了解决方案,例如更新 NumPy、SciPy 或调整 GPU 配置等,确保流程顺利运行。
|
9月前
|
机器学习/深度学习 人工智能 API
基于昇腾适配Meta AI在Science正刊发表的蛋白质结构预测模型ESMFold
ESMFold是由Meta AI团队开发的一种基于深度学习的高效蛋白质结构预测模型,其核心目标是利用大规模蛋白质语言模型(ESM)直接从氨基酸序列快速推断蛋白质的三维结构。ESMFold通过预训练的语言模型捕捉序列中的进化与结构关联性,结合几何优化模块生成高精度原子坐标,显著降低了传统方法对多重序列比对(MSA)和模板依赖的计算成本。该模型在蛋白质从头预测(de novo prediction)、功能位点解析、突变效应模拟等领域具有重要价值,以高效的推理性能,推动结构预测技术的普惠化应用。
|
9月前
|
机器学习/深度学习 编解码 人工智能
基于昇腾适配数据驱动的全球天气预报模型Fuxi
Fuxi是由复旦大学的研究人员开发的一个基于数据驱动的全球天气预报模型,主要由Cube Embedding、U-Transformer和全连接层构成。Fuxi摒弃了传统复杂的微分方程,转而通过多阶段机器学习架构,可提供15天的全球预报。时间分辨率为6小时,空间分辨率为0.25°。
|
9月前
|
安全 Linux Android开发
如何将Kindle电子书下载到电脑:技术流程与操作解析
随着数字阅读兴起,Kindle成为主流电子书平台。然而,Amazon的封闭生态和DRM限制,使用户难以灵活管理书籍。本文从技术角度出发,讲解如何合法下载Kindle电子书至电脑,包括使用Kindle for PC、USB导出及进阶方案(如Android模拟器、WINE环境)。同时介绍文件格式处理、自动化备份与阅读体验优化方法,并强调版权合规的重要性,助您构建个人数字图书馆。
3341 3
|
9月前
|
机器学习/深度学习 人工智能 并行计算
基于昇腾适配蛋白质序列模型ProteinMPNN
ProteinMPNN是一种基于深度学习的蛋白质序列设计模型,核心目标是解决“逆向折叠问题”(inverse folding problem),即根据给定的蛋白质三维结构,设计出能够折叠成该结构的氨基酸序列。ProteinMPNN在计算和实验测试中都有出色的性能表现,不同位置的氨基酸序列可以在单链或多链之间偶联,从而广泛的应用于当前蛋白质设计上。ProteinMPNN不仅在天然蛋白质序列恢复率上面性能要高于传统的Rosetta方法,并且可以恢复先前设计失败的蛋白质。通过前沿AI技术突破科学研究的效率瓶颈,对于蛋白质工程、药物设计、酶设计等领域有极其重要的意义。
基于昇腾适配蛋白质序列模型ProteinMPNN
|
9月前
|
机器学习/深度学习 PyTorch API
昇腾AI4S图机器学习:DGL消息传递接口的PyG替换
DGL (Deep Graph Learning) 和 PyG (Pytorch Geometric) 是两个主流的图神经网络库,它们在API设计和底层实现上有一定差异,在不同场景下,研究人员会使用不同的依赖库,昇腾NPU对PyG图机器学习库的支持亲和度更高,因此有些时候需要做DGL接口的PyG替换。
|
11月前
|
机器学习/深度学习 人工智能 算法
PeptideBERT:基于Transformer用于肽性质预测的语言模型
本文介绍了PeptideBERT模型及其在昇腾设备上的部署方法。PeptideBERT是一种基于Transformer架构的蛋白质语言模型,通过微调预训练模型ProtBERT,可预测肽的溶血性、溶解性和抗非特异性吸附性等关键性质。其输入表示包括词嵌入、物理化学属性编码和位置编码,并采用多头自注意力机制捕捉序列依赖关系。
|
9月前
|
机器学习/深度学习 数据采集 算法
基于昇腾适配基因表达预测模型Geneformer
Geneformer被广泛应用于疾病建模、治疗靶点发掘、基因网络预测与调控分析、基因功能预测与剂量敏感性分析、单细胞转录组数据集成与标准化、遗传变异解释与GWAS靶点优先排序。该案例既有算法原理,也有手把手的昇腾部署教学,包含细胞分类、基因分类、提取细胞嵌入图、细胞多分类的微调任务
基于昇腾适配基因表达预测模型Geneformer
|
8月前
|
机器学习/深度学习 负载均衡 C++
MoR vs MoE架构对比:更少参数、更快推理的大模型新选择
本文将深入分析递归混合(MoR)与专家混合(MoE)两种架构在大语言模型中的技术特性差异,探讨各自的适用场景和实现机制,并从架构设计、参数效率、推理性能等多个维度进行全面对比。
551 0
MoR vs MoE架构对比:更少参数、更快推理的大模型新选择

热门文章

最新文章