g
gcw_coj3XaOd/multimolecule_borzoi-human
模型介绍
文件和版本
Pull Requests
讨论
分析

Borzoi-Human - 昇腾 NPU 推理部署

1. 模型简介

模型名称: multimolecule/borzoi-human

模型链接: HuggingFace

模型描述: Borzoi 是基于 Enformer 架构的基因组序列预测模型,用于预测 DNA 序列上的实验测量数据(如 ATAC-seq 信号)。该模型结合了卷积塔和 Transformer 注意力机制,能够捕捉局部序列模式和长程依赖关系。

模型架构: Borzoi (Conv Tower + Transformer + Token Prediction Head)

参数规模: ~186M

输入规格:

  • 形状:[batch_size, seq_len, 5](one-hot DNA 编码 + 链信息)
  • 类型:torch.float32
  • 序列长度:支持任意长度(推荐 1024)

输出规格:

  • 形状:[batch_size, seq_len, 7611]
  • 类型:torch.float32
  • 含义:每个位置预测 7611 个基因组特征的信号值

2. 环境依赖

依赖项版本要求说明
Python>= 3.10推荐 3.11
torch>= 2.1.0PyTorch 框架
torch_npu>= 2.1.0昇腾 NPU 后端
numpy< 2.0数值计算
昇腾驱动CANN 8.0+推荐 CANN 8.5.1

安装命令:

pip install torch torch_npu numpy

3. 推理步骤

3.1 环境准备

# 检查 NPU 设备
npu-smi info

# 验证 torch_npu
python3 -c "import torch_npu; print(torch.npu.device_count(), torch.npu.get_device_name(0))"

3.2 模型下载

方式一:HuggingFace(推荐)

huggingface-cli download multimolecule/borzoi-human --local-dir ./weights

方式二:AtomGit 镜像(HuggingFace 下载慢时使用)

huggingface-cli download https://ai.gitcode.com/hf_mirrors/multimolecule/borzoi-human --local-dir ./weights

3.3 运行推理

# 启动服务
python3 inference.py --model-path ./weights --seq-len 1024 --device npu

# 参数说明
# --model-path: 模型权重目录(包含 pytorch_model.bin)
# --seq-len: 输入序列长度,默认 1024
# --device: 设备类型,支持 cpu/npu/cuda
# --batch-size: 批量大小,默认 1

3.4 推理参数说明

参数类型默认值说明
--model-pathstr必填模型 checkpoint 路径
--seq-lenint1024输入序列长度
--devicestrnpu设备类型 (cpu/npu/cuda)
--batch-sizeint1批量大小

4. 推理成功日志

4.1 单条推理日志

[模型] multimolecule/borzoi-human
[设备] Ascend910_9362 (npu:0)
[输入] shape=(1, 1024, 5), dtype=torch.float32
[输出] shape=(1, 1024, 7611), dtype=torch.float32
[耗时] 504.5ms
[状态] SUCCESS

4.2 批量推理日志

[基准测试] 4次推理统计 (seq_len=1024):
  平均: 107.8ms
  最小: 99.1ms
  最大: 179.6ms
  标准差: 23.9ms
  P50: 99.9ms
  P99: 179.6ms

5. 测试样例及输出结果

样例 1:单条序列推理(seq_len=512)

运行命令:

python3 inference.py --model-path ./weights --seq-len 512 --device npu --batch-size 1

输出:

[模型] multimolecule/borzoi-human
[设备] npu
[权重] ./weights/pytorch_model.bin
Loaded weights: 215 keys
[NPU] Ascend910_9362
[输入] shape=(1, 512, 5), dtype=torch.float32
[输出] shape=(1, 512, 7611), dtype=torch.float32
[耗时] 391.9ms
[状态] SUCCESS

样例 2:批量推理(batch_size=4, seq_len=1024)

运行命令:

python3 inference.py --model-path ./weights --seq-len 1024 --device npu --batch-size 4

输出:

[基准测试] 批量推理统计 (seq_len=1024):
  平均: 47.2ms
  最小: 19.0ms
  最大: 92.6ms
  标准差: 32.1ms
  P50: 46.6ms
  P99: 92.6ms

6. Agent适配截图

6.1 Agent 完整适配工作流

Agent 适配流程

6.2 NPU 设备调用日志

NPU 设备调用

6.3 模型适配结果

模型适配结果


7. 精度评测

测试数据: 使用随机 one-hot 编码 DNA 序列作为测试输入

评测指标:

指标结果说明
权重加载215/215 keys所有预训练权重完全匹配
单条推理 (seq=512)391.9msAscend910_9362
批量推理 (batch=4, seq=1024)P50: 46.6ms吞吐量约 85.8 seq/s

评测命令:

python3 inference.py --model-path ./weights --seq-len 1024 --device npu --batch-size 1

8. NPU 配置说明

  • NPU 型号: Ascend910_9362
  • NPU 卡数: 1
  • 显存占用: ~8GB(batch_size=1, seq_len=1024)
  • CANN 版本: 8.5.1
  • torch_npu 版本: 2.9.0

9. 实现说明

由于 multimolecule 包与 transformers >= 4.50 存在兼容性问题(merge_with_config_defaults 和 output_capturing 模块已被移除),本实现采用纯 PyTorch 直接加载权重的方式,绕过了 multimolecule 包的导入问题。

模型架构完全从预训练权重文件中解析,包括:

  • 卷积塔(5 层 Conv1D + BatchNorm + GELU)
  • 可分离卷积(Depthwise + Pointwise)
  • U-Net 风格跳跃连接
  • 8 层 Transformer 块(多头注意力 + FFN)
  • Token 预测头(7611 维输出)

10. 已知问题

无