liuhongwei-2026/mpradragonn-npu
模型介绍
文件和版本
Pull Requests
讨论
分析

MPRA-DragoNN(multimolecule/mpradragonn)在昇腾 NPU 上的适配

1. 简介

  • 模型来源:multimolecule/mpradragonn(Movva et al., 2019,Sharpr-MPRA 报告基因活性预测 CNN)
  • 参数量:约 0.34M(344,160)
  • 模型任务:从 145 bp DNA 序列定量预测 12 个 Sharpr-MPRA 报告基因活性任务(回归)
  • 模型架构:3 层一维 CNN(Conv1D + ReLU + BatchNorm + Dropout,120 个宽度 5 滤波器,valid 填充)+ 展平 + 全连接头(15960 → 12)
  • 适配状态:成功
  • 适配时间:2026-08-19

MPRA-DragoNN 输入一段 145 bp 的 DNA 窗口,输出 12 个 MPRA 活性标量 (z 评分后的 log2 RNA/DNA 比率),对应 K562 / HepG2 两种细胞系 × 最小启动子 (minP)/ 强 SV40 启动子(SV40p)× 两个独立重复与合并平均值,是调控基因组学中 大规模平行报告基因(MPRA)活性预测的经典模型。

2. 验证环境

组件版本
torch2.9.0
torch-npu2.9.0.post1
transformers5.9.0
multimolecule0.2.1
fastapi0.123.10
numpy1.26.4
CANN8.5.1
NPUAscend 910(64GB HBM)

3. 模型结构

MPRA-DragoNN 将 145 bp DNA 序列逐碱基编码(A/C/G/T/N one-hot)后送入 3 个卷积块 (Conv1D + ReLU + BatchNorm + Dropout),展平后经全连接层输出 12 个任务活性值。 关键配置:

配置项值
模型类型MpraDragoNnForSequencePrediction
卷积块数3
每块卷积通道120
卷积核大小5(valid 填充)
BatchNormmomentum=0.01, eps=1e-3
Dropoutp=0.1
展平维度15,960
输出12 个 MPRA 活性标量
输入窗口145 bp(固定)
词表A/C/G/T/N(DnaTokenizer)
参数量344,160

输入为 DNA 序列(DnaTokenizer 按 A/C/G/T/N 编码,U 自动转 T,不足 145 bp 自动补 N), 输出为 12 个任务的活性预测值,顺序为 k562_minp_{rep1,rep2,avg}、 k562_sv40p_{rep1,rep2,avg}、hepg2_minp_{rep1,rep2,avg}、hepg2_sv40p_{rep1,rep2,avg}。

4. 昇腾 NPU 适配要点

#适配点说明
1非 LLM,不走 vLLM-AscendMPRA-DragoNN 是 DNA 序列回归 CNN(非自回归生成模型),vLLM / vllm-ascend 无法直接服务;采用 multimolecule + torch_npu + FastAPI 方案在昇腾 NPU 上推理
2算子兼容性模型仅使用 torch 原生算子(Conv1d、BatchNorm1d、Linear、ReLU、Dropout),无 CUDA/Triton 内核,昇腾 NPU 完全兼容,无需修改建模代码
3依赖版本约束multimolecule 0.2.1 需要 transformers>=5.0(本仓库固定 5.9.0,与 config.json 的 transformers_version 一致);与 vllm 0.18(要求 transformers<5)冲突,但本模型不使用 vLLM,无影响
4推理设备通过 torch_npu 注册 npu 后端,模型 .to("npu:0") 在昇腾 910 上计算;权重为 float32(约 1.36MB),无需量化
5序列预处理输入自动补齐/截断到 145 bp;DnaTokenizer 直接编码 A/C/G/T/N,U 自动转 T,非法字符替换为 N

模型验证:在昇腾 NPU 上对 145 bp 的确定性合成 DNA 序列(seed=42)推理, 输出维度 (1, 12),与官方接口一致(MpraDragoNnForSequencePrediction 输出 12 个活性值), 行为符合预期。

5. 快速开始

5.1 安装依赖

pip install -r requirements.txt

若 vLLM-Ascend 环境已存在(transformers<5),建议使用独立 venv 安装本仓库依赖, 避免与 multimolecule 所需的 transformers 5.9.0 冲突。

5.2 下载模型权重

# 方式一:GitCode 镜像(Git LFS,需 lfs 拉取)
git clone https://gitcode.com/hf_mirrors/multimolecule/mpradragonn.git

# 方式二:HuggingFace 镜像(hf-mirror.com)
git clone https://hf-mirror.com/multimolecule/mpradragonn

# 方式三:multimolecule 直接加载(会自动下载)
python -c "from multimolecule import MpraDragoNnForSequencePrediction, DnaTokenizer; \
tok = DnaTokenizer.from_pretrained('multimolecule/mpradragonn'); \
m = MpraDragoNnForSequencePrediction.from_pretrained('multimolecule/mpradragonn')"

5.3 命令行推理

# 缺省:自动生成 145 bp 确定性合成 DNA 序列(seed=42)做演示
python3 inference.py \
    --model-path ./mpradragonn \
    --device npu:0 --top-k 5

# 传入自定义 DNA 序列(不足 145 bp 自动补 N,超出自动截断)
python3 inference.py \
    --model-path ./mpradragonn --device npu:0 \
    --sequence "$(python3 -c "print('ACGT'*36 + 'A')")"

# 从 FASTA / 纯文本文件读取
python3 inference.py \
    --model-path ./mpradragonn --device npu:0 --sequence-file ./sequence.fa

# 保存结果为 JSON
python3 inference.py \
    --model-path ./mpradragonn --device npu:0 --save-json ./result.json

5.4 服务化推理(FastAPI)

# 启动服务(默认 0.0.0.0:8000,此处演示用 127.0.0.1:8010)
export ASCEND_RT_VISIBLE_DEVICES=0
python3 inference.py --serve \
    --model-path ./mpradragonn \
    --device npu:0 \
    --host 127.0.0.1 --port 8010

调用示例:

# 健康检查
curl http://127.0.0.1:8010/health

# 模型信息
curl http://127.0.0.1:8010/v1/models

# 活性预测(sequence 缺省时按 seed 生成演示序列)
curl -X POST http://127.0.0.1:8010/v1/predict \
    -H "Content-Type: application/json" \
    -d '{"top_k": 5}'

# 传入自定义序列(145 bp,可用 `$(python3 -c "print('ACGT'*36+'A')")` 生成)
curl -X POST http://127.0.0.1:8010/v1/predict \
    -H "Content-Type: application/json" \
    -d '{"sequence": "ACGT...(145bp)", "top_k": 5}'

6. 推理结果

模型推理结果

命令行推理输出(演示序列,昇腾 NPU):

设备: npu:0 | NPU 可用: True | 参数量: 0.344M
模型加载完成,设备: npu:0
序列长度: 145 bp(模型要求 145 bp)
推理耗时: 155.8 ms
12 任务 MPRA 活性预测(z 评分 log2 RNA/DNA 比率):
  k562_minp_rep1        -0.404913
  k562_minp_rep2        -0.492507
  k562_minp_avg         -0.523947
  k562_sv40p_rep1       -0.267639
  k562_sv40p_rep2       -0.209872
  k562_sv40p_avg        -0.279983
  hepg2_minp_rep1       -0.264329
  hepg2_minp_rep2       -0.090133
  hepg2_minp_avg        -0.217803
  hepg2_sv40p_rep1      -0.073966
  hepg2_sv40p_rep2      -0.067823
  hepg2_sv40p_avg       -0.086166
Top 任务:
  #1  hepg2_sv40p_rep2    -0.067823
  #2  hepg2_sv40p_rep1    -0.073966
  #3  hepg2_sv40p_avg     -0.086166

服务化推理返回(POST /v1/predict,节选):

{
  "sequence": "ACGTACGT...(145 bp)",
  "input_length": 145,
  "logits": {
    "k562_minp_rep1": -0.706807,
    "k562_sv40p_rep1": -0.361795,
    "hepg2_minp_rep1": -0.149018,
    "hepg2_sv40p_rep1": 0.343598
  },
  "top": [
    {"rank": 1, "task": "hepg2_sv40p_rep1", "value": 0.343598}
  ],
  "inference_ms": 37.45
}

7. 环境检查

NPU 设备调用

服务健康检查返回:

{
  "status": "ok",
  "model": "multimolecule/mpradragonn",
  "device": "npu:0",
  "npu": {"available": true, "device_count": 1, "name": "Ascend910_9362"},
  "input_length": 145
}

Agent 工作流

8. 复现步骤

# 1. 环境准备(依赖 + 权重)
pip install -r requirements.txt
git clone https://gitcode.com/hf_mirrors/multimolecule/mpradragonn.git
# (下载 LFS 权重 model.safetensors,1.36MB,sha256 458f9c32...42430a8)

# 2. 命令行推理
python3 inference.py --model-path ./mpradragonn --device npu:0 --top-k 5

# 3. 服务化推理
python3 inference.py --serve --model-path ./mpradragonn \
    --device npu:0 --host 127.0.0.1 --port 8010
curl http://127.0.0.1:8010/health

贡献者: liuhongwei-2026 | 赛道: 模型适配赛道