本文档记录 ncbi/MedCPT-Query-Encoder 在 Ascend 910B3 NPU 环境下的适配与验证结果。
MedCPT(Medical Contrastive Pre-Training)是由 NCBI/NLM/NIH 发布的生物医学文本嵌入模型,在大规模 PubMed 搜索日志(2.55 亿查询-文章对)上预训练。该模型使用 BERT-base 架构,采用 [CLS] token 的 last hidden state 作为文本表示向量。
MedCPT 包含两个编码器:
应用场景包括:生物医学语义搜索、查询-文章检索、查询/文章聚类、零样本生物医学信息检索。
本仓库提供:
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
transformers | 4.57.6 |
Ascend 910B3,1 逻辑卡BertModel(BERT-base)7681212110M768([CLS] 向量)64 token(查询级别)启动前可先检查 NPU 可用性:
python3 -c "import torch; print(f'NPU available: {torch.npu.is_available()}')"环境准备:
pip install torch torch_npu transformers
export ASCEND_RT_VISIBLE_DEVICES=0已验证通过的推理命令:
单条文本编码:
python inference.py --text "diabetes treatment"批量编码:
python inference.py --input-file queries.txtCPU 编码(参考基准):
python inference.py --device cpu --text "hypertension treatment"不归一化输出:
python inference.py --no-normalize --text "test query"输出格式:
{
"model": "ncbi--MedCPT-Query-Encoder",
"device": "npu:0",
"num_texts": 1,
"dimension": 768,
"inference_time_seconds": 0.003,
"texts_per_second": 333.33,
"embeddings": [[0.0123, -0.0045, 0.0089, ...]]
}python inference.py --text "diabetes treatment"预期输出:
dimension 为 768验证结果:
测试条件:8 条文本,batch_size=32,max_length=64。
| 指标 | CPU | NPU |
|---|---|---|
avg_time | 0.3479 s | 0.0191 s |
throughput | 22.99 texts/s | 418.61 texts/s |
speedup | - | 18.21x |
精度评测采用余弦距离作为主要指标,对比 NPU 与 CPU 输出的嵌入向量。
| 指标 | 数值 |
|---|---|
| 测试样本数 | 8 |
| 嵌入维度 | 768 |
| 最大绝对误差 | 2.7395e-03 |
| 平均绝对误差 | 8.2550e-05 |
| 最小余弦相似度 | 0.99999225 |
| 平均余弦相似度 | 0.99999380 |
| 最大余弦距离 | 0.000775% |
| 精度要求(余弦距离 < 1%) | 通过 |
结论:NPU 与 CPU 输出的嵌入向量余弦距离仅 0.000775%,远低于 1% 的阈值,精度通过验证。
--no-normalize 关闭。--max-length 参数(最大 512)。