aimv2-1B-patch14-336 是 Apple 发布的 AIMv2 系列视觉 Transformer (ViT) 模型之一,输入分辨率为 336×336,patch size 为 14×14。隐藏层维度 2048,16 头注意力,参数量 1.24B。
本仓库提供了该模型在 华为昇腾 Ascend910B4 NPU 上的推理适配方案,基于原生 transformers 4.57.6 实现,无需 trust_remote_code。
last_hidden_state [1, 576, 2048]| 组件 | 版本 |
|---|---|
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-1B-patch14-336npu:0from transformers import AutoImageProcessor
from transformers.models.aimv2.modeling_aimv2 import Aimv2VisionModel
model_path = "/path/to/aimv2-1B-patch14-336"
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 336 --device npu:0
# 真实图片推理
python3 inference.py --model 336 --device npu:0 --image /path/to/image.jpg
# CPU 参考推理
python3 inference.py --model 336 --device cpu --image /path/to/image.jpg[INFO] Loading model from: /path/to/aimv2-1B-patch14-336
[INFO] Parameters: 1235.61M
[INFO] Device: npu:0
[INFO] Input shape: [1, 3, 336, 336]
[INFO] Inference time: 37.53 ms
[INFO] Output shape: [1, 576, 2048]
[DONE] Inference completed successfully评测方法:CPU (FP32) 参考 vs NPU (FP32) 推理,逐元素对比。
| 指标 | 数值 |
|---|---|
| Max Abs Diff | 1.82e+00 |
| Mean Abs Diff | 1.03e-03 |
| Mean Rel Diff | 0.26% |
| Cosine Similarity | ~1.000000 |
| Outlier Ratio (>0.1) | 0.0030% |
| 结论 | PASS |
NPU 与 CPU 输出余弦相似度 > 0.9999,平均相对误差 < 0.3%,满足精度要求。
测试条件:Ascend910B4 × 1, FP32, batch size 1~8, 20 轮取平均。
| Batch Size | 延迟 (ms) | 吞吐 (img/s) |
|---|---|---|
| 1 | 37.53 | 26.65 |
| 2 | 67.83 | 29.49 |
| 4 | 130.15 | 30.73 |
| 8 | 247.14 | 32.37 |
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。