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

multimolecule/borzoi-human 在昇腾 NPU 上的适配

1. 简介

  • 模型来源:multimolecule/borzoi-human(Calico Labs Borzoi 人类变体)
  • 模型任务:调控基因组学 —— 以 524288 bp(512 kb)DNA 窗口为输入,预测 7611 条人类调控 track(RNA-seq / CAGE / ChIP-seq 等)的 32 bp 分箱覆盖度
  • 架构:Enformer 扩展路线 —— 卷积 stem + 宽度递增残差卷积塔 + U-Net bottleneck + Transformer-XL 风格相对位置编码主干(8 层)+ 两段跳跃连接 U-Net 上采样尾 + 中心裁剪 + 逐 track 回归头(softplus 输出非负覆盖度)
  • 参数量:约 186M(fp32 权重 743 MB)
  • 适配状态:成功
  • 适配时间:2026-08-19

2. 验证环境

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

3. 模型结构

Borzoi 是 Enformer 的继任者,将输入窗口扩展到 512 kb、输出 bin 细化到 32 bp,并引入 U-Net 式上采样尾以提供更高分辨率的覆盖度预测:

组件配置说明
One-hot 嵌入vocab=5(A/C/G/T/N)F.one_hot 生成 (batch, 5, 524288) 输入,_dtype_reference 缓冲跟踪当前 dtype
卷积 stemConv1d(5→512, k=15) + 池化预激活残差 + attention-pool 下采样
卷积塔608→736→896→1056→1280,k=5宽度递增的残差下采样塔(5 级)
U-Net bottleneck池化 + 投影到 hidden_size=1536进入 Transformer 主干前的降采样瓶颈
Transformer 主干8 层 × hidden=1536,8 头Transformer-XL 风格相对位置编码(central-mask 基,32 维)
U-Net 上采样尾2 段 depthwise-separable 卷积跳跃连接上采样,unet_kernel_size=3
中心裁剪target_length=6144只保留窗口中心的 6144 个 bin(32 bp/bin)
回归头Conv1d(→1920) + 逐 track 投影softplus 输出非负覆盖度,(batch, 6144, 7611)

Borzoi 是判别式(discriminative)卷积 + Transformer 编码器模型(调控覆盖度回归),不是自回归文本生成模型。vLLM-Ascend 面向自回归文本生成架构(Qwen/Llama 等),无法加载此类模型;本适配通过 multimolecule + torch_npu 直接在昇腾 NPU 上运行,并用 FastAPI 提供 OpenAI 兼容的服务化推理。

输入输出

  • 输入:固定 524288 bp DNA 窗口,仅含 A/C/G/T/N(N 为背景填充,覆盖度预测趋近 0)
  • 输出:(batch, 6144, 7611) 覆盖度张量 —— 6144 个 bin(每 bin 32 bp)× 7611 条人类调控 track,经 softplus 保证非负

4. 昇腾 NPU 适配要点

#要点说明
1服务化方案模型为判别式回归模型,vLLM-Ascend 不支持;采用 multimolecule 加载 + torch_npu 映射到 NPU AICore + FastAPI OpenAI 兼容服务(/v1/models、/v1/predict、/v1/chat/completions、/v1/health)
2全标准算子F.one_hot / Conv1d / BatchNorm1d / ReLU / MaxPool1d / Linear / Softplus / Transformer-XL 相对注意力均为标准 PyTorch 算子,无 CUDA-only 依赖,torch_npu 直接映射到昇腾 NPU,无需源码改动
3fp32 精度权重以 config 原生 fp32 加载(dtype: float32),避免 bf16/fp16 精度损失;186M 参数 fp32 权重约 743 MB,Ascend 910 64GB HBM 富余
4本地加载from_pretrained(local_files_only=True) 加载权重与 DnaTokenizer,离线不联网
5定长输入模型要求固定 524288 bp 窗口;脚本 normalize_sequence 自动对短序列补 'N'(原生填充,覆盖度趋近背景)、对长序列保留 5' 端
6轻量输出输出张量 (1, 6144, 7611) 约 46.7M 元素(fp32 约 187 MB),脚本只搬运标量统计与 top-k track 回 CPU,避免冗余 H2D 传输
7精度评测CPU fp32 参考 vs NPU fp32 输出余弦相似度 ≈ 1.0,--benchmark 一键验证(含延迟统计)

5. 快速开始

5.1 安装依赖

# 配置华为镜像源(可选,加速下载)
export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/

pip install -r requirements.txt

注意:multimolecule 顶层会 import datasets/danling/chanfig/matplotlib/torchmetrics,requirements.txt 已一并列出,请勿只装 multimolecule 本体。

5.2 下载模型权重

# 方式一:GitCode 镜像(推荐,git-lfs 拉取真实权重)
git clone https://gitcode.com/hf_mirrors/multimolecule/borzoi-human.git
cd borzoi-human && git lfs pull

# 方式二:Hugging Face
git clone https://huggingface.co/multimolecule/borzoi-human
cd borzoi-human && git lfs pull

权重文件为 Git LFS 管理(model.safetensors,约 743 MB),克隆后需 git lfs pull 或按 LFS 指示下载。

5.3 单次推理(CLI)

python3 inference.py \
    --model-path ./borzoi-human \
    --device npu:0 \
    --seq "GTTTCTTCTGCTTGGGCGCGCACGGTTCCACTGAGGTCCTCAGGTCCTGAGTCAACCTGGGGTGAGGTGGTGGGGTGCAGGGGTGTGGTGGAGGGATGGGGCTGAGGACCTGGTCCTCTGACTGCTCTTTTCACCCATCTACAGTCCCCCTTGCCGTCCCAAAGCATGGATGATTTGATGCTGTCCCCGGACGATATTGAACAATGGTTCACTGAAGACCCAGGTCCAGATGAAGCTCCCAGAATGCCAGAGGCTGCTCCCCGCGTGGCCCC"

5.4 精度 / 性能基准

python3 inference.py --benchmark \
    --model-path ./borzoi-human \
    --device npu:0 --n-runs 10 --output report.json

5.5 服务化推理

export ASCEND_RT_VISIBLE_DEVICES=0
python3 inference.py --serve \
    --model-path ./borzoi-human \
    --port 8000 --device npu:0

验证服务:

# 列出模型(OpenAI 兼容)
curl http://127.0.0.1:8000/v1/models

# 覆盖度预测
curl http://127.0.0.1:8000/v1/predict -H 'Content-Type: application/json' \
    -d '{"sequence": "GTTTCTTCTGCTTGGGCGCGCACGGTTCCACTGAGGTCCTCA..."}'

# OpenAI 兼容对话包装
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' \
    -d '{"messages":[{"role":"user","content":"GTTTCTTCTGCTTGGGCGCGCACGGTTCCACTGAGGTCCTCA..."}]}'

# 健康检查(含 NPU 可用性)
curl http://127.0.0.1:8000/v1/health

6. 推理结果

模型推理结果

7. 环境检查

NPU 设备调用

8. 复现步骤

# 1. 环境准备(依赖 + 权重)
pip install -r requirements.txt
git clone https://gitcode.com/hf_mirrors/multimolecule/borzoi-human.git
cd borzoi-human && git lfs pull

# 2. 单次推理(验证 NPU 输出)
python3 inference.py --model-path ./borzoi-human --device npu:0

# 3. 精度/性能基准
python3 inference.py --benchmark --model-path ./borzoi-human --device npu:0

# 4. 服务化推理
python3 inference.py --serve --model-path ./borzoi-human --port 8000 --device npu:0
curl http://127.0.0.1:8000/v1/health
curl http://127.0.0.1:8000/v1/predict -H 'Content-Type: application/json' -d '{"sequence":"ACGT..."}'

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