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

APARENT(multimolecule/aparent)在昇腾 NPU 上的适配

1. 简介

  • 模型来源: multimolecule/aparent(gitcode 镜像: hf_mirrors/multimolecule/aparent)
  • 参数量: 6.426M(6,426,418)
  • 模型任务: 人 3'UTR 可变多聚腺苷酸化(Alternative Polyadenylation, APA) 预测
  • 模型架构: 一维卷积神经网络(1D CNN:2 层 Conv1D + MaxPool → 展平 → 2 层全连接),双输出头
  • 适配状态: 成功
  • 适配时间: 2026-08-19

APARENT(Linder, Bogard et al., Cell 2019,APolyA REgression NeT)是 MultiMolecule 团队 对 johli/aparent 的非官方复现实现。模型在 350 余万条随机化 3'UTR polyA 信号的 HEK293 高通量 mini-gene reporter(MPRA)数据上训练,输入固定 205 nt 的 3'UTR/polyA 序列,联合输出:

  • APA isoform proportion(isoform_proportion):可变多聚腺苷酸化异构体比例, 即近端 polyA 位点(proximal PAS)的使用比例(sigmoid,0~1);
  • positional cleavage distribution(cleavage_distribution):206 维位置切割分布 (softmax),对应 205 个序列位置 + 1 个远端(distal/library bias)槽位。

APARENT 主要用于评估遗传变异对 APA 调控的影响、以及设计新的多聚腺苷酸化信号。

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. 模型结构

APARENT 将 205 nt 3'UTR/polyA 序列按 A/C/G/U/N one-hot 编码(streamline 词表,5 通道, U 自动转 T、N 作为 pad)送入 1D 卷积栈,池化展平后经 2 层全连接得到共享表示, 再接两个输出头(isoform decoder + cleavage decoder)。关键配置:

配置项值
模型类型AparentForSequencePrediction
输入窗口固定 205 nt 3'UTR/polyA 序列(嵌入层自动补齐/裁剪到 205 nt)
卷积层2 层(Conv1d 96@k8、Conv1d 128@k6)+ MaxPool1d(2) + ReLU
全连接层2 层(512 → 256,dropout 0.1)
输出头isoform_decoder(1 维,sigmoid)+ cleavage_decoder(206 维,softmax)
词表A/C/G/U/N(RnaTokenizer,vocab_size=5,T 自动转 U,pad=N)
参数量6,426,418
权重大小model.safetensors 约 25.7MB(float32)

输出语义:

  • isoform_proportion = sigmoid(isoform_logits) ∈ [0,1],越大代表近端 polyA 位点使用比例越高;
  • cleavage_distribution = softmax(cleavage_logits),206 维;前 205 维对应窗口内 各位置的切割概率,末维为远端(distal/library bias)槽位——切割峰位在窗口内 表示存在明确的内源 polyA 切割位点,峰位在 205 表示切割发生在远端。

4. 昇腾 NPU 适配要点

#适配点说明
1非 LLM,不走 vLLM-AscendAPARENT 是 3'UTR/polyA 序列回归 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(约 25.7MB),峰值 HBM 约 170MB
4定长输入自适应嵌入层内部强制补齐/裁剪到固定 205 nt(短序列右补零、长序列取前 205 nt);脚本放开 tokenizer 的 model_max_length 以支持任意长度输入,>205 nt 提供滑窗扫描模式
5双输出头一次前向isoform 与 cleavage 两个头共用骨干网络一次前向(访问 model.model 骨干网,同时取回 isoform_logits 与 cleavage_logits),避免重复计算
6输出后处理isoform 头 sigmoid(回归概率);cleavage 头 softmax(206 维位置分布)

模型验证:在昇腾 NPU 上对内置演示序列(205 nt 3'UTR/polyA 窗口,第 65~70 位含经典 polyA 信号 AAUAAA、下游 ~25 nt 处含 U 富集元件)推理:

  • isoform proportion = 0.5242(近端 polyA 位点使用比例较高);
  • cleavage 峰 = 84(对应窗口内第 85 位,位于 AAUAAA 下游 20 nt,符合 polyA 切割位点位于信号下游 1030 nt 的生物学规律),distal 概率 = 0.1873;
  • 将 AAUAAA 突变为 AAAAAA 破坏 polyA 信号后,isoform 降至 0.2882、 cleavage 峰从窗口内位置移回 distal 槽位(205),行为符合预期。

5. 快速开始

5.1 安装依赖

pip install -r requirements.txt

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

5.2 下载模型权重

# 方式一:GitCode 镜像(用户提供的权重来源)
git clone https://ai.gitcode.com/hf_mirrors/multimolecule/aparent.git
# (仓库权重为 Git LFS,需 git-lfs pull 或经 LFS batch API 下载 model.safetensors,25.7MB)

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

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

5.3 命令行推理

# 缺省:使用内置演示序列(205 nt 3'UTR/polyA 窗口,含经典 AAUAAA polyA 信号)
python3 inference.py \
    --model-path /opt/atomgit/models/aparent \
    --device npu:0

# 传入自定义 3'UTR 序列(≤205 nt 单窗打分;DNA 输入 T 自动转 U)
python3 inference.py \
    --model-path /opt/atomgit/models/aparent --device npu:0 \
    --sequence "TTATAAATAAAATATGTA"

# 从 FASTA / 纯文本文件读取(>205 nt 自动滑窗扫描,寻找最强 polyA 信号区域)
python3 inference.py \
    --model-path /opt/atomgit/models/aparent --device npu:0 \
    --sequence-file ./example_3utr.fa --stride 1 --top-windows 5

5.4 服务化推理(FastAPI)

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

调用示例:

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

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

# APA 预测(sequence 缺省时使用内置演示序列)
curl -X POST http://127.0.0.1:8016/v1/predict \
    -H "Content-Type: application/json" \
    -d '{}'

# 传入自定义 3'UTR 序列
curl -X POST http://127.0.0.1:8016/v1/predict \
    -H "Content-Type: application/json" \
    -d '{"sequence": "TTATAAATAAAATATGTA"}'

# 长序列滑窗扫描(stride=50,返回 isoform 谱与 Top 高 APA 窗口)
curl -X POST http://127.0.0.1:8016/v1/predict \
    -H "Content-Type: application/json" \
    -d '{"sequence": "<500nt 3UTR>", "stride": 50, "top_windows": 3}'

6. 推理结果

模型推理结果

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

[demo] 未提供序列,使用内置演示序列(205 nt 3'UTR/polyA 窗口,含经典 AAUAAA polyA 信号)
模型路径: /opt/atomgit/models/aparent
设备:     npu:0
序列长度: 205 nt(模型固定窗口 205 nt)
正在加载模型(首次加载会编译算子,可能较慢)...
模型加载完成,耗时 7.2s,参数量 6.4264M

推理耗时: 195.6 ms
窗口长度: 205 nt(3'UTR/polyA 窗口,嵌入层自动补齐/裁剪)
APA isoform proportion: 0.5242(近端 polyA 位点使用比例)
cleavage 峰: 84 (position 85 in the 205 nt window) | distal 概率: 0.1873

SUCCESS

服务化推理返回(POST /v1/predict,内置演示序列):

{
  "model": "multimolecule/aparent",
  "sequence": "UAAGCCACGCUUGUGAUGACAUGUCGGUAGGUGCCCACAAUGA...",
  "length": 205,
  "mode": "single",
  "window": 205,
  "stride": 1,
  "inference_ms": 200.54,
  "isoform_proportion": 0.5242,
  "cleavage_distribution": [0.0, 0.0, ..., 0.18727],
  "cleavage_peak": 84,
  "cleavage_peak_label": "position 85 in the 205 nt window",
  "distal_probability": 0.1873
}

首次推理含算子编译约 195 ms;预热后单次推理约 3 ~ 6 ms (500 nt 长序列 stride=50 滑窗批量推理 6 个窗口共 5.6 ms)。

7. 环境检查

NPU 设备调用

服务健康检查返回:

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

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

{
  "object": "list",
  "data": [
    {
      "id": "aparent",
      "task": "alternative-polyadenylation",
      "library_name": "multimolecule",
      "params": 6426418,
      "window": 205,
      "num_isoform_labels": 1,
      "num_cleavage_labels": 206,
      "problem_type": "regression",
      "pipeline_tag": "tabular-regression"
    }
  ]
}

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

Agent 工作流

8. 复现步骤

# 1. 环境准备(依赖 + 权重)
pip install -r requirements.txt
git clone https://hf-mirror.com/multimolecule/aparent
# (下载 LFS 权重 model.safetensors,25.7MB)

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

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

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