m0_74196153/aimv2-large-patch14-448
模型介绍文件和版本Pull Requests讨论分析

AIMv2-Large-Patch14-448 on Ascend NPU

模型简介

aimv2-large-patch14-448 是 Apple 发布的 AIMv2 系列视觉 Transformer (ViT) 模型之一,输入分辨率为 448×448,patch size 为 14×14,输出图像 patch 级特征向量。

本仓库提供了该模型在 华为昇腾 Ascend910B4 NPU 上的推理适配方案,基于原生 transformers 4.57.6 实现,无需 trust_remote_code。

模型架构

  • Patch Embed: Conv2d (patch_size=14) + RMSNorm + 可学习位置编码
  • Transformer Encoder: 24 层, hidden_size=1024, 8 头注意力, SwiGLU FFN
  • 输出: last_hidden_state [1, 1024, 1024]

相关地址

  • 权重下载(ModelScope):https://modelscope.cn/models/apple/aimv2-large-patch14-448
  • 权重下载(HuggingFace):https://huggingface.co/apple/aimv2-large-patch14-448

验证环境

组件版本
transformers4.57.6
torch2.5.1
torch-npu2.9.0.post1+gitee7ba04
NPUAscend910B4 × 1
CANN8.5.1
  • 模型路径:/opt/atomgit/.cache/modelscope/hub/models/apple/aimv2-large-patch14-448
  • 推理设备:npu:0

模型加载

from transformers import AutoImageProcessor
from transformers.models.aimv2.modeling_aimv2 import Aimv2VisionModel

model_path = "/path/to/aimv2-large-patch14-448"
processor = AutoImageProcessor.from_pretrained(model_path, trust_remote_code=True)
model = Aimv2VisionModel.from_pretrained(model_path)
model.eval()
model = model.to("npu:0")

说明:ModelScope 提供的自定义 modeling_aimv2.py 使用合并 QKV 投影,与权重文件(分离 Q/K/V 投影)不兼容。transformers 4.57.6 原生 Aimv2VisionModel 使用分离投影,可直接加载权重。


推理验证

推理脚本

# 随机图片推理
python3 inference.py --model 448 --device npu:0

# 真实图片推理
python3 inference.py --model 448 --device npu:0 --image /path/to/image.jpg

# CPU 参考推理
python3 inference.py --model 448 --device cpu --image /path/to/image.jpg

验证结果

[INFO] Loading model from: /path/to/aimv2-large-patch14-448
[INFO] Parameters: 309.98M
[INFO] Device: npu:0
[INFO] Input shape: [1, 3, 448, 448]
[INFO] Inference time: 24.94 ms
[INFO] Output shape: [1, 1024, 1024]
[DONE] Inference completed successfully

精度评测

评测方法:CPU (FP32) 参考 vs NPU (FP32) 推理,逐元素对比。

指标数值
Max Abs Diff5.42e-01
Mean Abs Diff5.91e-04
Mean Rel Diff0.29%
Cosine Similarity1.000152
Outlier Ratio (>0.1)0.0009%
结论PASS

NPU 与 CPU 输出余弦相似度 > 0.9999,平均相对误差 < 0.3%,满足精度要求。


性能参考

测试条件:Ascend910B4 × 1, FP32, batch size 1~8, 20 轮取平均。

Batch Size延迟 (ms)吞吐 (img/s)
125.0239.97
238.1952.37
477.9651.31
8172.1846.46

相比 CPU (31.7s/iter),NPU 推理加速约 1272×。


评测材料

  • 精度评测:evaluate.py + eval_results/accuracy.json
  • 性能基准:evaluate.py + eval_results/performance.json
  • 评测日志:eval_results/run.log

注意事项

  1. 自定义代码兼容性:ModelScope 下载的 modeling_aimv2.py 与 safetensors 权重存在结构不匹配(合并 QKV vs 分离 QKV),请使用原生 Aimv2VisionModel 加载。
  2. NPU 浮点差异:NPU 的浮点累加顺序与 CPU 不同,会导致元素级微小差异(一般 < 0.3%),但不影响下游任务精度。
  3. use_head 参数:当前权重 use_head=false,模型仅输出 last_hidden_state,pooler_output 为 None。
下载使用量0