DeepSEA(Zhou & Troyanskaya, 2015)在 ENCODE 数据上训练,输入固定 1000 bp 的人类基因组 DNA 窗口,对 919 个染色质特征分别输出一个结合/开放概率 (0~1,多标签二分类,sigmoid)。它是基因组功能预测的经典基座模型,可用于预测 任意基因组位置的染色质状态:转录因子结合、DNase I 超敏位点、组蛋白修饰。
| 组件 | 版本 |
|---|---|
| torch | 2.9.0 |
| torch-npu | 2.9.0.post1 |
| transformers | 5.9.0 |
| multimolecule | 0.2.1 |
| fastapi | 0.123.10 |
| CANN | 8.5.1 |
| NPU | Ascend 910(64GB HBM) |
DeepSEA 将 1000 bp DNA 序列按 A/C/G/T one-hot 编码(4 通道,N 作为 pad 编码为零向量) 送入 1D 卷积栈,逐块 MaxPool 降采样,展平后经全连接层回归 919 个染色质特征 概率。关键配置:
| 配置项 | 值 |
|---|---|
| 模型类型 | DeepSeaForSequencePrediction |
| 输入窗口 | 固定 1000 bp(嵌入层强校验,短序列双侧补 N / 长序列中心裁剪) |
| 卷积层 | 3 层(Conv1d 320@k8、480@k8、960@k8)+ ReLU + Dropout(0.2,0.2,0.5) |
| 池化层 | MaxPool1d(4、4、1) |
| 全连接层 | 1 层(FC 925,含 Dropout(0.5)) |
| 特征平均 | reverse_complement_average=True:自动对反向互补链做概率平均(模型内部处理,外部无需操作) |
| 输出 | 919 个染色质特征概率(多标签二分类,sigmoid) |
| 词表 | A/C/G/T(DnaTokenizer,U 自动转 T,pad=N;vocab_size=4) |
| 参数量 | 52,843,400 |
| 权重大小 | model.safetensors 约 202MB(float32) |
输入为 DNA 序列(DnaTokenizer 按 A/C/G/T 编码,0-3;N 为 pad_token_id=0,编码为
零向量),输出为 919 个 0~1 概率(原始 logits 经 sigmoid 映射,与模型
postprocess 一致,无需额外归一化)。每个通道对应一个染色质特征(TF 结合/
DNase 可及性/组蛋白修饰);config id2label 为 null 时命名为 chromatin_0~
chromatin_918。概率 > 0.5 判定该染色质特征在该序列窗口处活跃/结合。
| # | 适配点 | 说明 |
|---|---|---|
| 1 | 非 LLM,不走 vLLM-Ascend | DeepSEA 是基因组功能预测 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(约 202MB) |
| 4 | 定长输入强校验 | 模型要求 sequence_length=1000 bp;脚本自动将短序列双侧补 N、长序列中心裁剪到 1000 bp(N 即 pad_token,编码为零向量) |
| 5 | 反向互补平均 | 模型配置 reverse_complement_average=True,forward 内部自动对输入序列与其反向互补链各推理一次,将两侧 sigmoid 概率取平均(clamp 到 [1e-7, 1-1e-7])再 logit 还原为 logits,无需外部额外处理 |
| 6 | 输出语义 | 919 个 logits 经 sigmoid 映射为染色质特征概率(多标签二分类),直接输出;active_tracks 统计概率 > 0.5 的活跃/结合通道数 |
模型验证:在昇腾 NPU 上对 1000 bp 确定性合成 DNA(seed=42)推理,输出
max_prob = 0.993376(chromatin_860)、active_tracks = 5;与 CPU 推理结果
余弦相似度 1.0(max abs diff < 0.001,纯浮点噪声),行为符合预期。
pip install -r requirements.txt模型权重可从以下任一来源获取:
# 方式一:从 gitcode 镜像(推荐)
git clone https://gitcode.com/hf_mirrors/multimolecule/deepsea.git /opt/atomgit/models/deepsea
# 方式二:从 HuggingFace 直接下载
from multimolecule import DeepSeaForSequencePrediction, DnaTokenizer
model = DeepSeaForSequencePrediction.from_pretrained('multimolecule/deepsea')
tokenizer = DnaTokenizer.from_pretrained('multimolecule/deepsea')# 默认演示(1000 bp 随机合成 DNA)
python3 inference.py --model-path /opt/atomgit/models/deepsea --device npu:0
# 自定义序列
python3 inference.py --model-path /opt/atomgit/models/deepsea \
--sequence ACGTACGT...(1000 bp) \
--device npu:0
# 从 FASTA 文件读取
python3 inference.py --model-path /opt/atomgit/models/deepsea \
--sequence-file ./example.fa \
--device npu:0 --top-k 10python3 inference.py --serve --model-path /opt/atomgit/models/deepsea \
--port 8000 --device npu:0服务化推理暴露的 HTTP 端点:
| 端点 | 方法 | 说明 |
|---|---|---|
/health | GET | 健康检查(返回 NPU 设备信息与模型状态) |
/v1/models | GET | 模型信息(模型 ID、任务、标签数、参数量、输入长度) |
/v1/predict | POST | 染色质特征预测 |
请求示例:
curl -X POST http://localhost:8000/v1/predict \
-H "Content-Type: application/json" \
-d '{"sequence": "ACGT..."}'| 指标 | 值 |
|---|---|
| 模型加载时间 | |
| 首次推理延迟 | ~632ms(含算子编译) |
| 预热后推理延迟 | ~2.38ms |
| CPU vs NPU 余弦相似度 | 1.0 |
| 进程峰值内存 | ~1.7GB(含权重+图内存) |
| HBM 峰值使用 | ~1.8GB |
使用模型默认的 1000 bp 确定性合成 DNA(seed=42)演示,输出 top-5 染色质特征:
| 排名 | 通道 | 概率 | 说明 |
|---|---|---|---|
| 1 | chromatin_860 | 0.993 | 对应 ENCODE 特征 |
| 2 | chromatin_814 | 0.859 | 对应 ENCODE 特征 |
| 3 | chromatin_305 | 0.843 | 对应 ENCODE 特征 |
| 4 | chromatin_657 | 0.841 | 对应 ENCODE 特征 |
| 5 | chromatin_897 | 0.784 | 对应 ENCODE 特征 |
reverse_complement_average=True,forward
内部自动完成,第三方调用无需额外处理。--port 8010 指定其他端口。