MPRA-DragoNN 输入一段 145 bp 的 DNA 窗口,输出 12 个 MPRA 活性标量 (z 评分后的 log2 RNA/DNA 比率),对应 K562 / HepG2 两种细胞系 × 最小启动子 (minP)/ 强 SV40 启动子(SV40p)× 两个独立重复与合并平均值,是调控基因组学中 大规模平行报告基因(MPRA)活性预测的经典模型。
| 组件 | 版本 |
|---|---|
| torch | 2.9.0 |
| torch-npu | 2.9.0.post1 |
| transformers | 5.9.0 |
| multimolecule | 0.2.1 |
| fastapi | 0.123.10 |
| numpy | 1.26.4 |
| CANN | 8.5.1 |
| NPU | Ascend 910(64GB HBM) |
MPRA-DragoNN 将 145 bp DNA 序列逐碱基编码(A/C/G/T/N one-hot)后送入 3 个卷积块 (Conv1D + ReLU + BatchNorm + Dropout),展平后经全连接层输出 12 个任务活性值。 关键配置:
| 配置项 | 值 |
|---|---|
| 模型类型 | MpraDragoNnForSequencePrediction |
| 卷积块数 | 3 |
| 每块卷积通道 | 120 |
| 卷积核大小 | 5(valid 填充) |
| BatchNorm | momentum=0.01, eps=1e-3 |
| Dropout | p=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}。
| # | 适配点 | 说明 |
|---|---|---|
| 1 | 非 LLM,不走 vLLM-Ascend | MPRA-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 个活性值),
行为符合预期。
pip install -r requirements.txt若 vLLM-Ascend 环境已存在(transformers<5),建议使用独立 venv 安装本仓库依赖, 避免与 multimolecule 所需的 transformers 5.9.0 冲突。
# 方式一: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')"# 缺省:自动生成 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# 启动服务(默认 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}'
命令行推理输出(演示序列,昇腾 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
}
服务健康检查返回:
{
"status": "ok",
"model": "multimolecule/mpradragonn",
"device": "npu:0",
"npu": {"available": true, "device_count": 1, "name": "Ascend910_9362"},
"input_length": 145
}
# 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 | 赛道: 模型适配赛道