本文档记录 BAAI/llm-embedder 在昇腾 Ascend 910B3 NPU 上的迁移适配、推理部署与精度评测结果。
LLM-Embedder 是 BAAI 推出的统一文本嵌入模型,基于 BERT-base 架构(12 层 Transformer,768 隐藏维),参数量约 109.48M。该模型可将任意文本映射为低维稠密向量,用于检索、聚类、语义搜索等任务。
本次适配工作包括:
inference.pyeval.py相关获取地址:
| 组件 | 版本 |
|---|---|
Python | 3.9.13 |
torch | 2.8.0+cpu |
torch_npu | 2.8.0.post4 |
transformers | 4.57.6 |
numpy | 1.24.4 |
Ascend 910B3 × 8 逻辑卡25.5.2LLM-Embedder 使用标准 BERT 架构,transformers 库原生支持。NPU 适配无需修改模型结构或权重。
已验证通过的适配流程:
import torch
import torch_npu
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("BAAI/llm-embedder")
model = model.npu()
model.eval()
tokenizer = AutoTokenizer.from_pretrained("BAAI/llm-embedder")
inputs = tokenizer(["Embed this text"], return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
embedding = outputs.last_hidden_state[:, 0, :].cpu()pip install torch torch_npu transformers -i https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com# NPU 推理(CLS 池化)
python inference.py --text "Climate change is a global challenge."
# Mean 池化 + L2 归一化
python inference.py --text "Embed this text" --pooling mean --normalize
# 从文件批量推理
python inference.py --input texts.txt --output embeddings.json
# CPU 推理
python inference.py --text "Text" --device cpupython inference.py --text "Climate change is a major global challenge."预期输出:
Embedding Results (NPU)
Pooling: cls, Normalize: False
Embedding dim: 768
Output shape: [1, 768]
...
Total: 0.xxxs | Avg: xxx.xxms/text测试条件:batch_size=20,seq_len=64,float32 精度,连续 10 次取平均。
| 指标 | CPU | NPU (Ascend 910B3) |
|---|---|---|
| 平均推理时间 (20 samples) | ~1540 ms | ~21 ms |
| 单样本平均耗时 | ~77 ms | ~1 ms |
| 加速比 | 1x | ~70x |
| 参数量 | 109.48M | 109.48M |
| 模型大小 | 417.6 MB | 417.6 MB |
使用 20 条科技文本进行评测:
| 指标 | 数值 | 要求 | 结果 |
|---|---|---|---|
| MSE | 2.02e-6 | - | - |
| Cosine Similarity (mean) | 0.99999666 | > 0.999 | ✓ |
| Cosine Similarity (min) | > 0.99999 | > 0.999 | ✓ |
| Max Absolute Error | 6.03e-3 | - | - |
结论:NPU 输出与 CPU 输出的平均余弦相似度达 0.99999666,满足精度要求。
详细评测日志见 eval_log.txt。
--pooling cls|mean)--normalize),用于余弦相似度检索torch_npu 版本:确保与 torch 版本匹配