Yanguan/nomic-embed-vision-v1.5
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

nomic-embed-vision-v1.5 NPU 适配

本项目为 nomic-embed-vision-v1.5 在华为昇腾 NPU 上的适配版本。

模型介绍

nomic-embed-vision-v1.5 是一个高性能的视觉嵌入模型,与 nomic-embed-text-v1.5 共享相同的嵌入空间。

名称Imagenet 零样本Datacomp(平均 38)MTEB
nomic-embed-vision-v1.571.056.862.28
nomic-embed-vision-v170.756.762.39
OpenAI CLIP ViT B/1668.356.343.82
Jina CLIP v159.152.260.1

硬件信息

项目说明
硬件Ascend910
CANN版本8.5.1
PyTorch2.9.0+cpu
torch_npu2.9.0.post1

环境配置

pip install torch==2.9.0 transformers pillow requests

注意:昇腾 NPU 环境需预先安装 CANN 工具包和 torch_npu。

权重下载

方式1:ModelScope(推荐)

modelscope download --model nomic-ai/nomic-embed-vision-v1.5 --local_dir /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5

方式2:AtomGit

python3 -m atomgit download hf_mirrors/nomic-ai/nomic-embed-vision-v1.5 -d /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5

适配说明

本适配基于原仓库推理脚本,主要改动如下:

  1. 本地代码加载:原模型依赖 HuggingFace 远程代码(trust_remote_code=True),因网络原因无法直接访问。适配方案为:
    • 下载关联仓库 nomic-ai/nomic-bert-2048 中的 configuration_hf_nomic_bert.py 和 modeling_hf_nomic_bert.py
    • 将代码文件放置于模型权重目录下
    • 修改 config.json 中的 auto_map 指向本地模块
  2. NPU 推理:通过 model.to("npu") 将模型加载至昇腾 NPU,无需修改模型内部算子。
  3. 数据样本:使用 COCO 数据集验证图片(assets/test_image.jpg),非随机生成。

推理脚本 (inference.py)

运行方式

python3 inference.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg --device npu

运行结果

Loading 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]
==================================================

性能测试 (benchmark.py)

运行方式

python3 benchmark.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg --device npu

测试结果

Batch SizeAvg Time (ms)Min Time (ms)Max Time (ms)Throughput (img/s)
112.3810.5723.9080.78
210.6410.5710.76187.89
410.8810.7411.14367.79
815.1215.0715.16528.98
1625.2525.1325.42633.75

测试环境:Ascend910, warmup=3, runs=10

精度评测 (accuracy.py)

运行方式

python3 accuracy.py --model_path /opt/atomgit/weight/nomic-ai/nomic-embed-vision-v1.5 --image_path assets/test_image.jpg

评测结果

以 CPU 运行结果为基准,对比 NPU 输出精度:

指标数值阈值结果
cosine_similarity1.000000> 0.99PASS
mae0.000000N/APASS
relative_error_pct0.001104< 1%PASS
max_ae0.000000N/APASS
rmse0.000000N/APASS

结论:NPU 与 CPU 精度误差为 0.0011%,远小于 1%,精度验证通过。

文件说明

文件/目录说明
inference.pyNPU 推理脚本
benchmark.py性能测试脚本
accuracy.py精度对比评测脚本
assets/测试图片等资源
output/运行输出目录

参考资料

  • 原模型仓库:nomic-ai/nomic-embed-vision-v1.5
  • Nomic 官方博客:nomic-embed-vision
  • 技术报告:arXiv:2406.18587