aimv2-huge-patch14-448 是 Apple 发布的 AIMv2 系列视觉 Transformer (ViT) 模型之一,输入分辨率为 448×448,patch size 为 14×14,输出图像 patch 级特征向量。Huge 版本隐藏层维度为 1536(对比 Large 版为 1024),参数量 682.03M。
本仓库提供了该模型在 华为昇腾 Ascend910B4 NPU 上的推理适配方案,基于原生 transformers 4.57.6 实现,无需 trust_remote_code。
last_hidden_state [1, 1024, 1536]| 组件 | 版本 |
|---|---|
transformers | 4.57.6 |
torch | 2.5.1 |
torch-npu | 2.9.0.post1+gitee7ba04 |
| NPU | Ascend910B4 × 1 |
| CANN | 8.5.1 |
/opt/atomgit/.cache/modelscope/hub/models/apple/aimv2-huge-patch14-448npu:0from transformers import AutoImageProcessor
from transformers.models.aimv2.modeling_aimv2 import Aimv2VisionModel
model_path = "/path/to/aimv2-huge-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-huge-patch14-448
[INFO] Parameters: 682.03M
[INFO] Device: npu:0
[INFO] Input shape: [1, 3, 448, 448]
[INFO] Inference time: 38.83 ms
[INFO] Output shape: [1, 1024, 1536]
[DONE] Inference completed successfully评测方法:CPU (FP32) 参考 vs NPU (FP32) 推理,逐元素对比。
| 指标 | 数值 |
|---|---|
| Max Abs Diff | 1.11e+00 |
| Mean Abs Diff | 9.55e-04 |
| Mean Rel Diff | 0.27% |
| Cosine Similarity | 1.000217 |
| Outlier Ratio (>0.1) | 0.0008% |
| 结论 | PASS |
NPU 与 CPU 输出余弦相似度 > 0.9999,平均相对误差 < 0.3%,满足精度要求。
测试条件:Ascend910B4 × 1, FP32, batch size 1~8, 20 轮取平均。
| Batch Size | 延迟 (ms) | 吞吐 (img/s) |
|---|---|---|
| 1 | 38.83 | 25.75 |
| 2 | 74.37 | 26.89 |
| 4 | 152.12 | 26.29 |
| 8 | 308.73 | 25.91 |
evaluate.py + eval_results/accuracy.jsonevaluate.py + eval_results/performance.jsoneval_results/run.logmodeling_aimv2.py 与 safetensors 权重存在结构不匹配(合并 QKV vs 分离 QKV),请使用原生 Aimv2VisionModel 加载。use_head=false,模型仅输出 last_hidden_state,pooler_output 为 None。