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

Malinois(multimolecule/malinois)在昇腾 NPU 上的适配

1. 简介

  • 模型来源:multimolecule/malinois(Gosai, Castro, et al., Nature 634, 2024)
  • 参数量:约 4.11M(4,113,723)
  • 模型任务:从 600 bp DNA 序列定量预测细胞型靶向顺式调控元件(CRE)活性(regulatory-activity)
  • 模型架构:深度一维卷积神经网络(Basset 风格 "branched" 1D CNN:3 个 Conv1d+BN+ReLU+MaxPool 块 → 共享全连接层 → 逐细胞系独立的分组线性塔)
  • 适配状态:成功
  • 适配时间:2026-08-19

Malinois(Gosai, Castro, et al., 2024,来自 Machine-guided design of cell-type-targeting cis-regulatory elements) 在 lentiMPRA 数据上训练,输入固定 600 bp 的 DNA 窗口(训练时将每个 ~200 bp 候选 CRE 用固定 MPRA 质粒侧翼补到 600 bp),输出 3 个连续回归值,对应 三个人类细胞系的 CRE 活性(log2 fold-change over input):

  • K562(0):红系白血病细胞系
  • HepG2(1):肝癌细胞系
  • SK-N-SH(2):神经母细胞瘤细胞系

是 DNA 序列 → 细胞型特异调控活性回归的经典模型,可用于细胞型靶向 CRE 预测 与合成调控元件设计。

2. 验证环境

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

3. 模型结构

Malinois 将 DNA 序列按 A/C/G/T/N one-hot 编码(5 通道)后送入 1D 卷积栈, 逐块 MaxPool 降采样,展平后经共享全连接层与逐细胞系独立的分组线性塔 (MalinoisGroupedLinear 块对角线性层)输出 3 个 CRE 活性分数。关键配置:

配置项值
模型类型MalinoisForSequencePrediction
输入窗口固定 600 bp(嵌入层强校验,短序列双侧补 N / 长序列中心裁剪)
卷积层3 层(300@k19、200@k11、200@k7)+ BatchNorm + ReLU
池化层MaxPool1d(3 / 4 / 4),第三个池化前常量 pad(1,1)
全连接层共享 1 层(Linear 1000)→ 分组线性塔 3 层(branch 140)
输出3 个连续值:K562 / HepG2 / SK-N-SH CRE 活性
词表A/C/G/T/N(DnaTokenizer,U 自动转 T,pad=N)
参数量4,113,723(约 4.11M)
计算量FLOPs 332.95M / MACs 165.70M

输入为 DNA 序列(DnaTokenizer 按 A/C/G/T/N 编码,0-4),输出为三个细胞系的 log2 富集度活性分数(原始 logits,无需 softmax / 后处理),数值越大代表 该序列在该细胞系中的调控活性越强。

4. 昇腾 NPU 适配要点

#适配点说明
1非 LLM,不走 vLLM-AscendMalinois 是基因组功能预测 CNN(回归任务,非自回归生成),vLLM / vllm-ascend 无法直接服务;采用 multimolecule + torch_npu + FastAPI 方案在昇腾 NPU 上推理
2依赖版本约束multimolecule 0.2.1 依赖 transformers.initialization,需要 transformers>=5.0(本仓库固定 5.9.0,与 config.json 的 transformers_version 一致);这会与 vllm 0.18(要求 transformers<5)冲突,但本模型不使用 vLLM,无影响
3推理设备通过 torch_npu 注册 npu 后端,模型 .to("npu:0") 在昇腾 910 上计算;权重为 float32(约 16.4MB),峰值 HBM 占用很低
4定长输入强校验模型嵌入层 MalinoisEmbedding 要求输入恰好 input_length=600 bp;脚本自动将短序列双侧补 N、长序列中心裁剪到 600 bp(N 即 pad_token=4)。官方训练流水线用固定 MPRA 质粒侧翼补齐候选序列,本脚本以 N 补齐便于任意输入推理;追求与训练分布严格一致时可先自行补齐质粒侧翼
5输出语义三个 logits 即为 K562 / HepG2 / SK-N-SH 细胞系 CRE 活性(log2 fold-change over input),直接输出,无需 softmax / 归一化

模型验证:在昇腾 NPU 上对 600 bp 确定性合成 DNA("ACGT"×150)推理, 输出 K562 = 8.421932、HepG2 = 7.514389、SK-N-SH = 15.251621; 与 CPU 推理结果 余弦相似度 1.0(max abs diff < 0.005,纯浮点噪声), 行为符合预期。

5. 快速开始

5.1 安装依赖

pip install -r requirements.txt

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

5.2 下载模型权重

# 方式一:AtomGit 镜像
git clone https://atomgit.com/hf_mirrors/multimolecule/malinois.git
# (仓库权重为 Git LFS,需 git-lfs pull 或经 LFS batch API 下载 model.safetensors,16.4MB)

# 方式二:GitCode 镜像
git clone https://ai.gitcode.com/hf_mirrors/multimolecule/malinois

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

5.3 命令行推理

# 缺省:自动生成 600 bp 确定性合成 DNA(seed=42)做演示
python3 inference.py \
    --model-path ./malinois \
    --device npu:0

# 传入自定义 DNA 序列(短序列自动双侧补 N,长序列自动中心裁剪到 600 bp)
python3 inference.py \
    --model-path ./malinois --device npu:0 \
    --sequence "ACTCCCCTGCCCTCAACAAGAT..."

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

5.4 服务化推理(FastAPI)

# 启动服务(默认 0.0.0.0:8000)
export ASCEND_RT_VISIBLE_DEVICES=0
python3 inference.py --serve \
    --model-path ./malinois \
    --device npu:0 \
    --host 0.0.0.0 --port 8000

调用示例:

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

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

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

# 传入自定义 DNA 序列
curl -X POST http://127.0.0.1:8000/v1/predict \
    -H "Content-Type: application/json" \
    -d '{"sequence": "ACTCCCCTGCCCTCAACAAGAT..."}'

6. 推理结果

模型推理结果

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

[demo] 未提供序列,自动生成 600 bp 确定性合成 DNA(seed=42)
模型路径: /opt/atomgit/models/malinois
设备:     npu:0
原始序列: 600 bp(模型要求定长 600 bp,短序列补 N / 长序列中心裁剪)
正在加载模型(首次加载会编译算子,可能较慢)...
模型加载完成,耗时 7.9s,参数量 4.114M

推理耗时: 203.04 ms
输出: 细胞系特异 CRE 活性预测(log2 fold-change over input)
  K562    = 0.327912(红系白血病细胞系)
  HepG2   = -0.068756(肝癌细胞系)
  SK-N-SH = -0.210851(神经母细胞瘤细胞系)
  input_bp      = 600 bp | raw_bp = 600 bp

SUCCESS

服务化推理返回(POST /v1/predict,演示序列 seed=42):

{
  "K562": 0.327912,
  "HepG2": -0.068756,
  "SK-N-SH": -0.210851,
  "input_bp": 600,
  "raw_bp": 600,
  "channels": ["K562", "HepG2", "SK-N-SH"],
  "output": "cell-type-specific CRE activity (log2 fold-change over input)",
  "inference_ms": 200.89
}

真实 CRE 示例(人源 TP53 区域 184 bp 序列,自动补 N 到 600 bp):

{
  "K562": 1.220261,
  "HepG2": 1.074175,
  "SK-N-SH": 1.131562,
  "input_bp": 600,
  "raw_bp": 184,
  "channels": ["K562", "HepG2", "SK-N-SH"],
  "output": "cell-type-specific CRE activity (log2 fold-change over input)",
  "inference_ms": 6.25
}

首次推理含算子编译约 200 ms;预热后单次推理约 1.7 ~ 7 ms。

7. 环境检查

NPU 设备调用

服务健康检查返回:

{
  "status": "ok",
  "model": "multimolecule/malinois",
  "device": "npu:0",
  "npu": {"available": true, "device_count": 2, "name": "Ascend910_9362"}
}

模型信息(GET /v1/models):

{
  "object": "list",
  "data": [
    {
      "id": "malinois",
      "task": "regulatory-activity",
      "library_name": "multimolecule",
      "params": 4113723,
      "sequence_length": 600,
      "num_labels": 3,
      "channels": ["K562", "HepG2", "SK-N-SH"],
      "pipeline_tag": "tabular-regression"
    }
  ]
}

峰值 HBM 占用约 100MB 以内(npu-smi 实测,进程内存)。

Agent 工作流

8. 复现步骤

# 1. 环境准备(依赖 + 权重)
pip install -r requirements.txt
git clone https://atomgit.com/hf_mirrors/multimolecule/malinois.git
# (下载 LFS 权重 model.safetensors,16.4MB,sha256 15aed27e...bbed641)

# 2. 命令行推理
python3 inference.py --model-path ./malinois --device npu:0

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

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