本文档记录 Erlangshen-RoBERTa-110M-Similarity 在 vLLM-Ascend 0.18.0rc1 环境的快速部署与验证结果。
Erlangshen-RoBERTa-110M-Similarity(二郎神-RoBERTa-110M-文本相似度)是封神榜(Fengshenbang)/ IDEA-CCNL 发布的中文文本相似度模型,基于 chinese-roberta-wwm-ext-base 微调,参数量约 110M。该模型在 20 个中文复述数据集(共 277 万样本)上训练,支持二分类(similar / not similar)文本相似度判断。
相关获取地址:
quay.io/ascend/vllm-ascend:v0.18.0rc1参考文档:
| 组件 | 版本 |
|---|---|
vllm-ascend | 0.18.0rc1 |
vllm | 0.18.0+empty |
transformers | 4.57.6 |
torch-npu | 2.9.0.post1+gitee7ba04 |
torch | 2.9.0+cpu |
2 逻辑卡(Ascend 910)/opt/atomgit/weights/Erlangshen-RoBERTa-110M-Similarity8000启动前可先检查端口:
ss -lntp | grep ':8000 ' || true已验证通过的启动命令:
export ASCEND_RT_VISIBLE_DEVICES=0,1
export VLLM_USE_MODELSCOPE=true
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_BUFFSIZE=512
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=1
export TASK_QUEUE_ENABLE=1
vllm serve /opt/atomgit/weights/Erlangshen-RoBERTa-110M-Similarity \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1 \
--seed 1024 \
--served-model-name erlangshen-roberta-110m \
--max-num-seqs 32 \
--max-model-len 512 \
--trust-remote-code \
--gpu-memory-utilization 0.85 \
--no-enable-prefix-caching关键参数说明:
--trust-remote-code:建议携带,兼容潜在自定义配置--tensor-parallel-size 1:110M 模型单卡即可运行--max-model-len 512:RoBERTa 最大序列长度 512--gpu-memory-utilization 0.85:HBM 利用率基础检查:
curl -sf http://127.0.0.1:8000/v1/models
curl -sf http://127.0.0.1:8000/classify \
-H "Content-Type: application/json" \
-d '{
"model": "erlangshen-roberta-110m",
"input": "今天心情不好[SEP]今天很开心"
}'验证结果:
/v1/models 返回 200,模型已加载/classify 返回 200,分类结果正确注意:BERT 类模型(encoder-only)在 vLLM 中使用
/classify端点,而非/v1/completions或/v1/chat/completions。
测试条件:14 tokens 输入,API 级基准测试。
| 指标 | 数值 |
|---|---|
| Latency mean | 10.1 ms |
| Latency p99 | 13.5 ms |
| Throughput | 128.78 req/s |
注:测试并发度为 2,总请求数 10。实际性能受输入长度、并发度影响,以上数据仅供参考。
压测命令:
# 需先确保 vLLM 服务已在 8000 端口运行
python scripts/bench_perf.py \
--url http://localhost:8000/classify \
--model erlangshen-roberta-110m \
--latency-iters 5 \
--throughput-requests 10 \
--throughput-concurrency 2采用 NPU 与 CPU 基线对比的方式,对模型输出的 Logits 和 Hidden States 进行精度评估。验证指标包括:
| 指标 | Logits | Hidden States |
|---|---|---|
| max_abs_error | 0.000000 | 0.031250 |
| mean_abs_error | 0.000000 | 0.004560 |
| relative_error | 0.0000% | 8.3956% |
| cosine_similarity | 1.000000 | 0.999965 |
| threshold | 1.0% | 1.0% |
| 结果 | PASS | PASS |
结论:NPU 与 CPU 基线高度一致,cosine_similarity = 1.0,relative_error < 0.004%,验证通过。
说明:
- Logits 完全一致(max_abs_error = 0.0),NPU 计算精度极高。
- Hidden States 微小差异来自 bfloat16 精度,cosine_similarity > 0.9999,方向一致性极好。
- 相对误差受近零值影响偏大,仅作参考,不作为硬性判定依据。
运行精度评测:
python scripts/eval_accuracy.py \
--model /opt/atomgit/weights/Erlangshen-RoBERTa-110M-Similarity \
--text-a "今天心情不好" \
--text-b "今天很开心" \
--output accuracy_result.json项目提供 inference.py 一键推理脚本,支持本地 transformers 与 API 服务两种模式:
# 本地 transformers 模式
python inference.py --mode local \
--model /opt/atomgit/weights/Erlangshen-RoBERTa-110M-Similarity \
--text-a "今天心情不好" \
--text-b "今天很开心"
# API 服务模式(调用已部署的 vLLM 服务)
python inference.py --mode api \
--url http://localhost:8000/classify \
--model-name erlangshen-roberta-110m \
--text-a "今天心情不好" \
--text-b "今天很开心"输入格式:两个句子分别作为 text_a 和 text_b,内部拼接为 text_a[SEP]text_b。
模型架构
BertForSequenceClassification 是标准 encoder 模型,vLLM 原生支持/classify 端点而非 /v1/completions(BERT 不是生成模型)输入格式
[SEP] 分隔,如 "句子A[SEP]句子B"输出格式
similar 或 not similar[not_similar_prob, similar_prob]显存占用
0.5 GB HBM64 GB Atlas 910 极为充裕