本项目为 nomic-embed-vision-v1.5 在华为昇腾 NPU 上的适配版本。
nomic-embed-vision-v1.5 是一个高性能的视觉嵌入模型,与 nomic-embed-text-v1.5 共享相同的嵌入空间。
| 名称 | Imagenet 零样本 | Datacomp(平均 38) | MTEB |
|---|---|---|---|
nomic-embed-vision-v1.5 | 71.0 | 56.8 | 62.28 |
nomic-embed-vision-v1 | 70.7 | 56.7 | 62.39 |
| OpenAI CLIP ViT B/16 | 68.3 | 56.3 | 43.82 |
| Jina CLIP v1 | 59.1 | 52.2 | 60.1 |
| 项目 | 说明 |
|---|---|
| 硬件 | Ascend910 |
| CANN版本 | 8.5.1 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
pip install torch==2.9.0 transformers pillow requests注意:昇腾 NPU 环境需预先安装 CANN 工具包和 torch_npu。
modelscope download --model nomic-ai/nomic-embed-vision-v1.5 --local_dir /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5python3 -m atomgit download hf_mirrors/nomic-ai/nomic-embed-vision-v1.5 -d /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5本适配基于原仓库推理脚本,主要改动如下:
trust_remote_code=True),因网络原因无法直接访问。适配方案为:
nomic-ai/nomic-bert-2048 中的 configuration_hf_nomic_bert.py 和 modeling_hf_nomic_bert.pyconfig.json 中的 auto_map 指向本地模块model.to("npu") 将模型加载至昇腾 NPU,无需修改模型内部算子。assets/test_image.jpg),非随机生成。python3 inference.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg --device npuLoading processor from /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5...
Loading model from /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5...
Loading image from assets/test_image.jpg...
Processing image...
Running inference on npu:0...
==================================================
Inference Result:
Image size: (640, 480)
Device: npu:0
Embedding shape: torch.Size([1, 768])
Embedding dtype: torch.float32
Embedding sample (first 10): [-0.00218224 -0.0262305 0.01322797 -0.0211441 -0.04752079 -0.01160997
-0.0071497 -0.03654667 -0.07669468 -0.01584212]
==================================================python3 benchmark.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg --device npu| Batch Size | Avg Time (ms) | Min Time (ms) | Max Time (ms) | Throughput (img/s) |
|---|---|---|---|---|
| 1 | 12.38 | 10.57 | 23.90 | 80.78 |
| 2 | 10.64 | 10.57 | 10.76 | 187.89 |
| 4 | 10.88 | 10.74 | 11.14 | 367.79 |
| 8 | 15.12 | 15.07 | 15.16 | 528.98 |
| 16 | 25.25 | 25.13 | 25.42 | 633.75 |
测试环境:Ascend910, warmup=3, runs=10
python3 accuracy.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg以 CPU 运行结果为基准,对比 NPU 输出精度:
| 指标 | 数值 | 阈值 | 结果 |
|---|---|---|---|
| cosine_similarity | 1.000000 | > 0.99 | PASS |
| mae | 0.000000 | N/A | PASS |
| relative_error_pct | 0.001104 | < 1% | PASS |
| max_ae | 0.000000 | N/A | PASS |
| rmse | 0.000000 | N/A | PASS |
结论:NPU 与 CPU 精度误差为 0.0011%,远小于 1%,精度验证通过。
| 文件/目录 | 说明 |
|---|---|
inference.py | NPU 推理脚本 |
benchmark.py | 性能测试脚本 |
accuracy.py | 精度对比评测脚本 |
assets/ | 测试图片等资源 |
output/ | 运行输出目录 |