| 组件 | 版本 |
|---|---|
| torch | 2.9.0 |
| torch-npu | 2.9.0.post1 |
| transformers | 5.9.0 |
| multimolecule | 0.2.1 |
| CANN | 8.5.1 |
| NPU | Ascend 910(64GB HBM) |
Basenji2 是经典的一维卷积调控预测模型(Borzoi / Enformer 的前身),将 131 kb 基因组窗口下采样到 128 bp 分辨率,逐 bin 输出调控覆盖度:
| 组件 | 配置 | 说明 |
|---|---|---|
| One-hot 嵌入 | vocab=5(A/C/G/T/N) | F.one_hot 生成 (batch, 5, 131072) 输入,N 为背景 token |
| 卷积 stem | Conv1d(5→288, k=15) + 池化(2) | 预激活卷积块直接作用于 one-hot DNA |
| 卷积塔 | 339→399→470→554→652→768,k=5 | 6 级宽度递增的下采样塔,每级分辨率减半 |
| 膨胀残差塔 | 11 块 × bottleneck 384,k=3 | dilation 从 1 起逐块 ×1.5,扩大感受野到 131 kb |
| 中心裁剪 | crop_bins=64 | 裁剪 binned 轴两侧各 64 bins(1024→896) |
| 回归头 | pointwise Conv(→1536) + 逐 track 投影 | softplus 输出非负覆盖度,(batch, 896, 5313) |
Basenji2 是判别式(discriminative)卷积回归模型(基因组覆盖度预测),不是自回归文本生成模型。vLLM-Ascend 面向自回归文本生成架构(Qwen/Llama 等),无法加载此类模型;本适配通过
multimolecule+torch_npu直接在昇腾 NPU 上运行,并用 FastAPI 提供 OpenAI 兼容的服务化推理。
(batch, 896, 5313) 覆盖度张量 —— 896 个 bin(每 bin 128 bp)× 5313 条人类调控 track,经 softplus 保证非负| # | 要点 | 说明 |
|---|---|---|
| 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 均为标准 PyTorch 算子,无 CUDA-only 依赖,torch_npu 直接映射到昇腾 NPU,无需源码改动 |
| 3 | fp32 精度 | 权重以 config 原生 fp32 加载(dtype: float32),避免 bf16/fp16 精度损失;30M 参数 fp32 权重约 120 MB,Ascend 910 64GB HBM 富余 |
| 4 | 本地加载 | from_pretrained(local_files_only=True) 加载权重与 DnaTokenizer,离线不联网 |
| 5 | 定长输入 | 模型要求固定 131072 bp 窗口;脚本 normalize_sequence 自动对短序列双侧补 'N'(原生背景填充)、对长序列中心裁剪,保证真实序列落在输出 bins 中心区域 |
| 6 | 轻量输出 | 输出张量 (1, 896, 5313) 约 4.7M 元素(fp32 约 19 MB),脚本只搬运标量统计与 top-k track 回 CPU,避免冗余 H2D 传输 |
| 7 | 精度评测 | CPU fp32 参考 vs NPU fp32 输出余弦相似度 ≈ 1.0,--benchmark 一键验证(含延迟统计) |
# 配置华为镜像源(可选,加速下载)
export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/
pip install -r requirements.txt注意:
multimolecule顶层会 importdatasets/danling/chanfig/matplotlib/torchmetrics,requirements.txt 已一并列出,请勿只装multimolecule本体。
# 方式一:GitCode 镜像(推荐,git-lfs 拉取真实权重)
git clone https://gitcode.com/hf_mirrors/multimolecule/basenji.git
cd basenji && git lfs pull
# 方式二:Hugging Face
git clone https://huggingface.co/multimolecule/basenji
cd basenji && git lfs pull权重文件为 Git LFS 管理(model.safetensors,约 120 MB),克隆后需 git lfs pull 或按 LFS 指示下载。
python3 inference.py \
--model-path ./basenji \
--device npu:0 \
--seq "ACTCCCCTGCCCTCAACAAGATGTTTTGCCAACTGGCCAAGACCTGCCCTGTGCAGCTGTGGGTTGATTCCACACCCCCGCCCGGCACCCGCGTCCGCGCCATGGCCATCTACAAGCAGTCACAGCACATGACGGAGGTTGTGAGGCGCTGCCCCCACCATGAGCGCTGCTCAGATAGCGATGG"python3 inference.py --benchmark \
--model-path ./basenji \
--device npu:0 --n-runs 10 --output report.jsonexport ASCEND_RT_VISIBLE_DEVICES=0
python3 inference.py --serve \
--model-path ./basenji \
--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": "ACTCCCCTGCCCTCAACAAGATGTTTTGCCAACTGGCCAAGACCTG..."}'
# OpenAI 兼容对话包装
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' \
-d '{"messages":[{"role":"user","content":"ACTCCCCTGCCCTCAACAAGATGTTTTGCCAACTGGCCAAGACCTG..."}]}'
# 健康检查(含 NPU 可用性)
curl http://127.0.0.1:8000/v1/health

# 1. 环境准备(依赖 + 权重)
pip install -r requirements.txt
git clone https://gitcode.com/hf_mirrors/multimolecule/basenji.git
cd basenji && git lfs pull
# 2. 单次推理(验证 NPU 输出)
python3 inference.py --model-path ./basenji --device npu:0
# 3. 精度/性能基准
python3 inference.py --benchmark --model-path ./basenji --device npu:0
# 4. 服务化推理
python3 inference.py --serve --model-path ./basenji --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 | 赛道: 模型适配赛道