当前位置: 首页 > news >正文

DeepFRI_pytorch在昇腾的部署实践

作者:昇腾实战派

知识地图:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003

背景概述

随着蛋白质序列数据库(如UniProt,目前已包含超过1亿条序列)的爆发式增长,如何高效地预测蛋白质功能已成为计算生物学领域的核心挑战。传统的基于序列比对(BLAST)或基于特征工程的方法在面对低序列相似性蛋白质时往往表现不佳,尤其是对于新测序的蛋白质或孤儿蛋白质。

DeepFRI(Deep Functional Residue Identification)由Gligorijević等人于2021年在Nature Communications上发表,是一款结合蛋白质序列信息三维结构信息的深度学习模型,利用图卷积神经网络(GCN)将蛋白质的三维结构表示为图,从中学习功能相关模式,同时融合蛋白质语言模型提取的序列特征,实现对蛋白质功能的高精度预测。

本文介绍 DeepFRI 模型的PyTorch + 昇腾 Ascend NPU 适配版本——从原始 TensorFlow/Keras 项目中抽取推理与权重转换的最小闭环,在昇腾 AI 平台上完成部署、迁移与精度验证,为蛋白质功能预测的工业级推理场景提供高效、可复现的技术方案。

模型介绍

DeepFRI 概述

DeepFRI 的核心目标是预测蛋白质的生物学功能注释,包括:

  • 基因本体(Gene Ontology, GO)注释:分子功能(MF)、生物过程(BP)、细胞组分(CC)
  • 酶分类(Enzyme Commission, EC)编号

与传统方法不同,DeepFRI 的创新之处在于将蛋白质结构编码为接触图(Contact Map)——一种图结构表示,节点代表氨基酸残基,边代表残基间的空间接近关系(Cα原子距离 ≤ 10Å),然后利用图卷积网络在该图上传播特征,捕获序列中远距离残基在三维空间上的相互作用模式。

整体架构

DeepFRI 的数据流分为三个阶段:

第一阶段:LSTM 蛋白质语言模型(序列特征提取)

预训练的 LSTM 语言模型(LSTM-LM)在 Pfam 数据库约1000万个蛋白质结构域序列上训练,用于从蛋白质氨基酸序列中提取残基级别的上下文特征。模型由两层单向 LSTM 组成(隐藏维度512),输出拼接后产生1024维的残基级特征向量。

第二阶段:图卷积网络(GCN)处理结构数据

  • 接触图被转换为邻接矩阵,每个氨基酸残基对应图中的一个节点
  • GCN 接收两个输入:接触图的邻接矩阵 + LSTM 提取的残基级特征矩阵
  • 通过多层图卷积操作(3层 MultiGraphConv,每层512维)传播特征
  • 使用 SumPooling 将节点级特征聚合为蛋白质级全局表示

第三阶段:功能预测输出

全连接层(FuncPredictor)将蛋白质级表示映射到功能标签空间,输出每个 GO term / EC number 的预测概率。

两条推理路径

路径输入特征提取预测网络
GCN 路径PDB 结构文件 / 接触图LSTM-LM → 残基特征 + 接触图邻接矩阵图卷积网络
CNN 路径氨基酸序列LSTM-LM → 残基特征一维卷积网络(DeepCNN)

GCN 路径利用了结构信息,预测精度更高;CNN 路径仅需序列,适用于缺少结构数据的场景。

残基级功能解释

DeepFRI 不仅输出蛋白质的功能预测,还利用 Grad-CAM 技术生成残基级别的功能关联图谱(Class Activation Map),标识出可能参与该功能的关键氨基酸位置,为蛋白质功能提供位点级注解。

应用场景

  • 蛋白质功能注释:对新测序基因的蛋白产物进行自动功能预测
  • 酶工程:预测蛋白酶的EC编号,辅助代谢途径重建
  • 药物靶标发现:通过预测分子功能推断蛋白在细胞通路中的角色
  • 疾病机制研究:揭示致病蛋白的功能异常

PyTorch + 昇腾 NPU 适配版本

迁移动机

原始 DeepFRI 基于 TensorFlow 1.x / Keras 实现,依赖tf.keras生态进行训练和推理。为在昇腾 Ascend NPU 上高效运行,本项目将推理核心代码转换为 PyTorch 实现,并通过torch_npu适配昇腾硬件加速。

仓库结构

DeepFRI_Pytorch/ ├── deepfrier/ │ ├── torch_layers.py # 图卷积层、池化层、功能预测层的 PyTorch 实现 │ ├── torch_model.py # LSTMLanguageModel、DeepFRIGCN、DeepFRICNN 模型定义 │ ├── torch_predictor.py # 推理预测器封装 │ └── utils.py # 数据处理工具函数 ├── examples/ # 示例输入(PDB文件、接触图、FASTA序列) ├── figs/ # 模型架构图 ├── scripts/ │ └── prepare_models.sh # 权重下载与转换一键脚本 ├── trained_models/ # 转换后的 PyTorch 权重存放目录 ├── benchmark_inference.py # 推理性能基准测试 ├── convert_weights.py # HDF5 → PyTorch state_dict 权重转换 ├── predict.py # 主推理入口 ├── verify_accuracy.py # 精度验证脚本 ├── requirements.txt ├── environment.yml └── setup.py

核心实现

图卷积层(MultiGraphConv):对邻接矩阵进行三种归一化处理(原始矩阵、非对称归一化、对称归一化),将节点特征与三种归一化邻接矩阵相乘后拼接,通过线性变换产生输出。

LSTM 语言模型:双层单向 LSTM,输出两层隐状态拼接,产生1024维残基级特征。

权重转换要点

  • TensorFlowConv1D权重维度(K, Cin, Cout)→ PyTorch(Cout, Cin, K)
  • TensorFlowBatchNorm默认eps=1e-3,PyTorch 中必须保持一致
  • CuDNNLSTM 的 HDF5 权重转换到nn.LSTM时需要按 TensorFlow 官方 HDF5 兼容逻辑做 CuDNN layout 到标准 LSTM layout 的转换,再合并 bias

版本信息

软件版本
CANN8.2+
Python3.10
PyTorch2.5.1
torch_npu2.5.1

环境配置

创建 Conda 环境

conda create-ndeepfri_npupython=3.10-yconda activate deepfri_npu

克隆代码

gitclone https://gitcode.com/AI4Science/DeepFRI_Pytorch.gitcdDeepFRI_Pytorch

安装依赖

exportPIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/ pipinstall-rrequirements.txt

配置昇腾环境

source/usr/local/Ascend/ascend-toolkit/set_env.shexportASCEND_RT_VISIBLE_DEVICES=0

可使用npu-smi info命令检查驱动是否正常。

模型权重准备

本仓库不直接提交上游预训练权重(体积较大),需要从上游下载并转换。

下载上游 GPU 版权重包

curl-Lhttps://users.flatironinstitute.org/~renfrew/DeepFRI_data/trained_models.tar.gz-otrained_models.tar.gz

解压并转换

tarxzf trained_models.tar.gz-C.--no-same-owner python convert_weights.py

转换输出示例:

Converting LSTM LM weights... Saved 8 tensors Converting GCN model: mf ... Saved 10 tensors Converting GCN model: bp ... Saved 10 tensors Converting GCN model: cc ... Saved 10 tensors Converting GCN model: ec ... Saved 10 tensors Converting CNN model: ec ... Saved 38 tensors Converting CNN model: mf ... Saved 38 tensors Converting CNN model: bp ... Saved 38 tensors Converting CNN model: cc ... Saved 38 tensors All models converted successfully!

也可使用一键脚本:

bashscripts/prepare_models.sh trained_models.tar.gz

转换完成后,目录应包含:

trained_models/pytorch/ ├── lstm_lm.pt ├── DeepCNN-MERGED_biological_process.pt ├── DeepCNN-MERGED_cellular_component.pt ├── DeepCNN-MERGED_enzyme_commission.pt ├── DeepCNN-MERGED_molecular_function.pt ├── DeepFRI-MERGED_MultiGraphConv_3x512_fcd_1024_ca_10A_cellular_component.pt ├── DeepFRI-MERGED_MultiGraphConv_3x512_fcd_1024_ca_10A_enzyme_commission.pt ├── DeepFRI-MERGED_MultiGraphConv_3x512_fcd_1024_ca_10A_molecular_function.pt └── DeepFRI-MERGED_MultiGraphConv_3x512_fcd_2048_ca_10A_biological_process.pt

迁移适配要点

TensorFlow → PyTorch 关键差异

问题解决方案
TFBatchNorm默认eps=1e-3PyTorch CNN 中设置eps=1e-3保持一致
TFConv1D权重(K, Cin, Cout)转置为 PyTorch(Cout, Cin, K)
CuDNNLSTM →nn.LSTM按 TF 官方 CuDNN layout 转换逻辑处理,合并 bias
GCN 路径对 LSTM 权重更敏感需严格对齐 CuDNNLSTM 到标准 LSTM 的转换

昇腾 NPU 适配

PyTorch 版本天然支持通过torch_npu在昇腾 NPU 上运行,无需额外迁移代码。只需在推理时指定设备:

python predict.py--seq'...'-ontmf--devicenpu:0

如果运行时环境不完整,可能会在aclInit阶段失败,例如出现5070001343225857错误码。

推理命令

1. 序列输入,CNN 路径

python predict.py\--seq'SMTDLLSAEDIKKAIGAFTAADSFDHKKFFQMVGLKKKSADDVKKVFHILDKDKDGFIDEDELGSILKGFSSDARDLSAKETKTLMAAGDKDGDGKIGVEEFSTLVAES'\-ontmf\--devicenpu:0\--verbose

上游参考输出:

Protein GO-term/EC-number Score GO-term/EC-number name query_prot GO:0005509 0.99769 calcium ion binding

PyTorch NPU 复现结果:

[PASS] query_prot GO:0005509 calcium ion binding expected=0.99769 actual=0.99769 diff=0.000003

2. FASTA 输入,CNN 路径

python predict.py\--fasta_fnexamples/pdb_chains.fasta\-ontmf\--devicenpu:0\--verbose

3. PDB 输入,GCN 路径

python predict.py\--pdb_fnexamples/pdb_files/1S3P-A.pdb\-ontmf\--devicenpu:0\--verbose

上游参考输出:

query_prot GO:0005509 0.99824 calcium ion binding

PyTorch NPU 复现结果:

[PASS] query_prot GO:0005509 calcium ion binding expected=0.99824 actual=0.99824 diff=0.000001

精度验证

CPU 验证

python verify_accuracy.py--devicecpu

输出示例:

[PASS] query_prot GO:0005509 calcium ion binding expected=0.99769 actual=0.99769 diff=0.000003 [PASS] 1S3P-A GO:0005509 calcium ion binding expected=0.99769 actual=0.99769 diff=0.000003 [PASS] 2J9H-A GO:0004364 glutathione transferase activity expected=0.46937 actual=0.46937 diff=0.000003 [PASS] 2J9H-A GO:0016765 transferase activity, transferring alkyl or aryl (other than methyl) groups expected=0.19910 actual=0.19910 diff=0.000001 [PASS] gcn_pdb GO:0005509 calcium ion binding expected=0.99824 actual=0.99824 diff=0.000001 [OK] MF top: GO:0005509 score=0.99769 (calcium ion binding) [1 predictions] [OK] BP top: GO:0051179 score=0.14491 (localization) [4 predictions] [OK] CC top: GO:0005829 score=0.23144 (cytosol) [7 predictions] [OK] EC no predictions above threshold (expected for some proteins)

NPU 验证

python verify_accuracy.py--devicenpu:0

精度对齐结果

转换后的 PyTorch 权重在 CPU 上与上游 README 参考值完全对齐:

测试用例GO term期望值复现值差异
query_prot (CNN/seq)GO:00055090.997690.997690.000003
1S3P-A (CNN/fasta)GO:00055090.997690.997690.000003
2J9H-A (CNN/fasta)GO:00043640.469370.469370.000003
2J9H-A (CNN/fasta)GO:00167650.199100.199100.000001
query_prot (GCN/pdb)GO:00055090.998240.998240.000001

额外 ontology 验证:

  • BPtop prediction:GO:0051179score=0.14491 (localization)
  • CCtop prediction:GO:0005829score=0.23144 (cytosol)
  • EC: 对该测试序列没有超过阈值的预测(符合预期)

性能测试

单条序列推理

python benchmark_inference.py--devicenpu:0--modeseq--ontologymf--warmup3--iters10

CPU 基准结果:

指标数值
Mean latency392.988 ms
Median latency418.371 ms
P95 latency482.988 ms
Min latency315.802 ms
Throughput2.545 items/s

FASTA 批量推理

python benchmark_inference.py--devicenpu:0--modefasta--ontologymf--warmup2--iters5

CPU 基准结果:

指标数值
Items per iteration4
Mean latency1102.067 ms
Median latency1269.700 ms
P95 latency1301.482 ms
Throughput3.630 items/s

已知限制

  • 本仓库不包含原始 TensorFlow 训练代码,仅聚焦于 PyTorch 推理
  • 上游 GCN 权重比 CNN 权重更敏感,因为经过了 CuDNNLSTM →nn.LSTM的转换路径
  • 如果 Ascend 910 会话没有正确映射设备节点,即使 Python 包安装正确,torch_npu仍会在初始化阶段失败

参考文献

  • Gligorijević V, Renfrew P D, Kosciolek T, et al. Structure-based protein function prediction using graph convolutional networks[J]. Nature Communications, 2021, 12(1): 1-14.
  • 上游代码仓库:https://github.com/flatironinstitute/DeepFRI
  • PyTorch 昇腾适配版:https://gitcode.com/AI4Science/DeepFRI_Pytorch
http://www.jsqmd.com/news/1303037/

相关文章:

  • 专业Excel数据转换工具:5大实用场景教你如何高效处理配置表
  • 基于魔方密码的图像加密算法:Matlab实现与安全应用
  • 微信生态对接OpenClaw的典型问题与解决方案
  • 如何在3分钟内保存全网小说?novel-downloader小说下载器终极指南
  • 2026年长宁区水下打捞电话排行榜,手机戒指汽车打捞全覆盖 - GrowUME
  • C++函数进阶:从性能优化到异常安全的工程实践
  • ️ 2026合肥管道疏通哪家好?5家本地正规品牌实测对比+避坑指南 - 园子一号
  • 为什么你的电脑需要硬件监控?LibreHardwareMonitor免费开源解决方案深度解析
  • 揭秘InternLM/Intern-S2-Mobius:为什么它可能是下一代AI开发的关键框架?
  • 合肥中考择校必看:合肥中科信息工程学校 2026 招生热线,专业、住宿、升学全解答 - Luckyone王
  • 计算机毕业设计之基于SpringBoot+Vue的农业机器租借平台的设计与实现
  • ML Privacy Meter核心功能揭秘:从MIA到DP审计的完整指南
  • Java转大模型:我的Agent项目上线第一天就崩了,权限配置是最大坑
  • 2026年旺季用工多的企业做兼职人员佣金结算咨询和落地选哪家比较靠谱:专业服务选爱灵活 - GrowUME
  • Obsidian插件汉化终极指南:3分钟实现全中文界面的秘诀
  • 轻钢与预制混凝土:无砖建房技术解析与应用
  • noTunes:macOS系统级音乐应用启动控制解决方案
  • Amulet:如何打破Minecraft版本壁垒,实现跨平台世界编辑的终极方案
  • 2026大连进口清关公司选择指南 核心决策维度全解析 - 甄选测评馆
  • 2026年7月兰州口碑好的钢管经销商口碑推荐,3pe钢管/铝板/不锈钢板/镀锌无缝钢管/防腐钢管,钢管经销商选哪家 - 品牌推荐师
  • diff-pdf终极指南:快速免费检测PDF差异的完整解决方案
  • 济南GEO哪个更高效
  • AI教材生成技术:低查重与高效内容重构方案
  • 从模糊图到复古街机风,AI像素风格化全流程拆解,手把手教你定制专属风格模型
  • gpt-oss-20b硬件配置终极指南:如何在有限预算下实现最优性能?
  • 如何在Axelrod中快速掌握策略演化模拟:Moran过程终极教程 [特殊字符]
  • ️ 2026福州管道疏通哪家好?5家本地正规品牌实测对比+避坑指南 - 园子一号
  • 常见国密算法密钥长度
  • Android各版本适配总结
  • ️ 2026东营管道疏通哪家好?5家本地正规品牌实测对比+避坑指南 - 园子一号