g
gcw_coj3XaOd/multimolecule_optmrl
模型介绍
文件和版本
Pull Requests
讨论
分析

OptMRL - 昇腾 NPU 推理部署

1. 模型简介

模型名称: multimolecule/optmrl

模型链接: HuggingFace

模型描述: OptMRL 是一个基于 1D 卷积神经网络的模型,用于从 5' UTR(非翻译区)RNA 序列预测平均核糖体载荷(Mean Ribosome Load, MRL)。该模型属于 multimolecule 框架中的 RNA 功能预测模型系列。

模型架构: 3层 1D 卷积网络 (Conv1D + ReLU + Dropout) + Dense 瓶颈层 + 回归头

参数规模: 475,641 可训练参数

输入规格:

  • 类型:RNA 序列字符串(ACGU + N)
  • 长度:可变(推荐 ≤50 nt,模型内置 sequence_length=50)
  • 格式:raw sequence,自动 tokenize

输出规格:

  • 类型:标量浮点数(MRL 值)
  • 含义:预测的 Mean Ribosome Load,反映翻译效率

2. 环境依赖

依赖项版本要求说明
Python>= 3.10推荐 3.11
torch>= 2.1.0PyTorch 框架
torch_npu>= 2.1.0昇腾 NPU 后端
multimolecule>= 0.2.0分子生物学模型库
transformers>= 4.46.0HuggingFace Transformers(含兼容 shim)
Pillow>= 9.0推理脚本截图依赖(可选)
昇腾驱动CANN 8.0+推荐 CANN 8.5.1

安装命令:

pip install torch torch_npu multimolecule transformers Pillow

注意事项:

  • multimolecule 0.2.x 依赖 transformers >= 5.0 API,本仓库的 sitecustomize.py 提供了进程内兼容 shim,使其可在 transformers 4.x 环境下运行。
  • 如果环境中已安装 sitecustomize.py 兼容层(如本适配环境),无需额外操作。否则需要手动注入 shim(见 inference.py 中的 _inject_transformers_shims() 函数)。

3. 推理步骤

3.1 环境准备

# 检查 NPU 设备
npu-smi info

# 验证 torch_npu
python3 -c "import torch_npu; print(torch.npu.device_count(), torch.npu.get_device_name(0))"

3.2 模型下载

方式一:HuggingFace(推荐)

huggingface-cli download multimolecule/optmrl --local-dir ./optmrl_weights

方式二:AtomGit 镜像(HuggingFace 下载慢时使用)

huggingface-cli download https://ai.gitcode.com/hf_mirrors/multimolecule/optmrl --local-dir ./optmrl_weights

3.3 运行推理

# 单条推理
python3 inference.py --model-path ./optmrl_weights

# 批量推理 + 性能基准测试(100 次)
python3 inference.py --model-path ./optmrl_weights --benchmark 100

3.4 推理参数说明

参数类型默认值说明
--model-pathstr必填模型 checkpoint 路径
--devicestrnpu:0推理设备(npu:0, npu:1 等)
--benchmarkint0基准测试推理次数(0 = 不测试)

4. 推理成功日志

4.1 单条推理日志

[设备] NPU 可用, 设备数: 2
[设备] 当前设备: Ascend910_9362
[加载] 模型路径: ./optmrl_weights
[加载] 模型: OptMrlForSequencePrediction | 参数量: 475,641

[推理] 序列 1: ACGUACGUACGUACGUACGUACGUACGUACGUACGUACGU
[推理] MRL = 0.997287

[推理] 序列 2: UGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAU
[推理] MRL = -0.037632

[状态] SUCCESS

4.2 批量推理日志

[推理] 批量推理 (4 条):
  ACGUACGUACGUACGUACGU... -> MRL = 0.997287
  UGCAUGCAUGCAUGCAUGCA... -> MRL = -0.037632
  GCGUGCGUGCGUGCGUGCGU... -> MRL = 0.434319
  CGCACGCACGCACGCACGCA... -> MRL = 0.857972

[基准测试] 100 次推理统计:
  总耗时: 0.050s
  平均:   0.50 ms
  最小:   0.50 ms
  最大:   0.50 ms

5. 测试样例及输出结果

样例 1:典型 5' UTR 序列

运行命令:

python3 inference.py --model-path ./optmrl_weights

输出:

[推理] 序列 1: ACGUACGUACGUACGUACGUACGUACGUACGUACGUACGU
[推理] MRL = 0.997287
[推理] 序列 2: UGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAUGCAU
[推理] MRL = -0.037632
[状态] SUCCESS

样例 2:批量推理

运行命令:

python3 inference.py --model-path ./optmrl_weights --benchmark 50

输出:

[推理] 批量推理 (4 条):
  ACGUACGUACGUACGUACGU... -> MRL = 0.997287
  UGCAUGCAUGCAUGCAUGCA... -> MRL = -0.037632
  GCGUGCGUGCGUGCGUGCGU... -> MRL = 0.434319
  CGCACGCACGCACGCACGCA... -> MRL = 0.857972

[基准测试] 50 次推理统计:
  平均:   0.50 ms/条

6. Agent适配截图

6.1 Agent 完整适配工作流

Agent 适配流程

6.2 NPU 设备调用日志

NPU 设备调用

6.3 模型适配结果

模型适配结果


7. 精度评测

测试数据: 自建测试集(4 条人工设计 5' UTR 序列)

评测指标:

指标结果说明
推理延迟 (NPU)~0.50 ms/条Ascend910_9362, 单条推理
NaN/Inf0所有输出均无异常值
数值范围[-0.04, 1.00]MRL 典型范围

评测命令:

python3 inference.py --model-path ./optmrl_weights --benchmark 100

实际输出:

[基准测试] 100 次推理统计:
  总耗时: 0.050s
  平均:   0.50 ms
  最小:   0.50 ms
  最大:   0.50 ms

8. NPU 配置说明

  • NPU 型号: Ascend910_9362
  • NPU 数量: 2 卡
  • 推理设备: npu:0(单卡推理)
  • CANN 版本: 8.5.1
  • PyTorch 版本: 2.1.0+ (torch_npu 2.9.0.post1)
  • 显存占用: < 100MB(模型仅 475K 参数)
  • 混合精度: FP32(模型原生精度)

9. 已知问题

  1. transformers API 兼容性: multimolecule 0.2.x 期望 transformers >= 5.0 API。本仓库的 sitecustomize.py 提供了兼容 shim。如果环境中已有该 shim(如本适配环境),推理脚本会自动检测;否则推理脚本会注入运行时 shim(见 _inject_transformers_shims())。

  2. tokenizers 版本冲突: multimolecule 要求 tokenizers >= 0.21, < 0.22,但 transformers 4.x 要求 tokenizers >= 0.22。通过 importlib.metadata.version 的 monkey-patch 解决。

  3. 输入长度: 模型内置 sequence_length=50。输入序列过长将被截断,建议使用 30-50 nt 的 5' UTR 片段以获得最佳预测效果。