本文档记录 HFL(哈工大讯飞联合实验室)发布的 bert-tiny-chinese 中文轻量 BERT 模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。
该模型是 BERT-tiny 架构的中文版本(L=2, H=128,仅 3.2M 参数),是目前最小的中文 BERT 变体之一。通过 Mean Pooling 可提取 128 维句嵌入,适合资源极度受限的中文 NLP 场景(如移动端、边缘设备、IoT)。
相关获取地址:
hfl/bert-tiny-chinese| 组件 | 版本 |
|---|---|
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
transformers | 5.8.1 |
CANN | 8.5.1 |
8 × Ascend 910B3vocab.txt,使用 slow tokenizer(BertTokenizer)conda create -n bert-tiny-chinese python=3.11 -y
conda activate bert-tiny-chinese
pip install torch==2.8.0 torch_npu==2.8.0.post4 \
-i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers numpy \
-i https://pypi.tuna.tsinghua.edu.cn/simplepython inference.py --text "今天天气很好。" --device npufrom inference import BGEEncoder
encoder = BGEEncoder(model_path="./bert-tiny-chinese", device="npu")
embeddings = encoder.encode(["今天天气很好。"])
# embeddings.shape → (1, 128)python inference.py --text "今天天气很好。" --device npu预期输出:128 维嵌入向量,无运行时错误。
测试条件:23 条多样化测试句子,batch_size=32,NPU 预热 1 轮。
| 指标 | 数值 |
|---|---|
| NPU 吞吐量 | 2,037.3 sentences/s |
BERT-tiny 仅 2 层 128 维,推理速度极快(2037 sent/s),是已适配模型中最快的之一。
分别在 CPU 和 NPU 上对 23 条测试句子推理,比较 128 维嵌入向量的余弦相似度、MSE、语义相似度矩阵 Pearson 相关系数。
| 指标 | 数值 | 说明 |
|---|---|---|
| 有效句子数 | 23 | — |
| 平均余弦相似度 | 1.000000 | 完美一致 |
| 最小余弦相似度 | 1.000000 | 全部完美 |
| 精度误差率 | 0.0000% | 远低于 1% |
| MSE | 0.00000000 | 无可测偏差 |
| 相似度矩阵 Pearson r | 1.000000 | 语义结构完全保持 |
结论:精度误差率 0.0000%,NPU 与 CPU 输出完全等价,评测通过。
AutoModel.from_pretrained() 加载,model.to("npu:0") 迁移vocab.txt,需 use_fast=False 使用 slow tokenizerfrom transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("bert-tiny-chinese").to("npu:0")
tokenizer = AutoTokenizer.from_pretrained("bert-tiny-chinese", use_fast=False)
inputs = tokenizer("今天天气很好。", return_tensors="pt")
inputs = {k:v.to("npu:0") for k,v in inputs.items()}
with torch.no_grad():
emb = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).float()
embedding = torch.nn.functional.normalize((emb*mask).sum(1)/mask.sum(1), p=2, dim=1)vocab.txt,需使用 BertTokenizer(slow),不支持 BertTokenizerFast