基于昇腾适配DeepMind团队发布的蛋白质结构预测模型OpenFold-2
ztj100 2025-07-03 02:32 20 浏览 0 评论
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/install
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.fasta
vi test.fasta
内容为
>test_sequence|PDBID|1AKI
GIVEQCCTSICSLYQLENYCN
保存退出
注:上述为简化胰岛素类似物(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、bool
grep -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_inplace_cuda.forward_代码,使用原生softmax实现
执行推理
报错ModuleNotFoundError: No module named 'simtk.openmm'
原因:openmm或相关依赖中使用比较老的openmm导入方式
解决办法:将openfold、openmm、pdbfixer中所有涉及到simtk.openmm的地方都修改为openmm
重新执行推理
推理成功
输出文件
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统...
- systemd是什么如何使用_systemd/system
-
systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
-
Linux系统日常巡检脚本,巡检内容包含了,磁盘,...
- 7,MySQL管理员用户管理_mysql 管理员用户
-
一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
-
1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
-
设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...
- linux系统启动流程和服务管理,带你进去系统的世界
-
Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...
- CentOS7系统如何修改主机名_centos更改主机名称
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
-
为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...
- Kubernetes 高可用(HA)集群部署指南
-
Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介...
- Linux系统systemd服务管理工具使用技巧
-
简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...
- Linux下NetworkManager和network的和平共处
-
简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
这一次,彻底搞懂Java并发包中的Atomic原子类
-
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- systemd是什么如何使用_systemd/system
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
- 7,MySQL管理员用户管理_mysql 管理员用户
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
- linux系统启动流程和服务管理,带你进去系统的世界
- CentOS7系统如何修改主机名_centos更改主机名称
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)