本文档记录 apple/aimv2-large-patch14-native 在 Ascend 910B4 NPU 上的推理适配与验证结果。
AIMv2 Native 为原生版 ViT 模型,使用 sin-cos 位置编码(支持动态分辨率),参数量约 1.15B。
| 组件 | 版本 |
|---|---|
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| Transformers | 4.57.6 |
| CANN | 8.5.1 |
| NPU | Ascend 910B4 |
torch.meshgrid + sin/cos 生成动态位置编码,NPU 上计算一致性好# 安装依赖
pip install torch torch_npu transformers safetensors pillow
# 运行推理(随机输入)
python inference.py
# 运行推理(真实图片)
python inference.py --image path/to/image.jpg
# FP16 推理
python inference.py --dtype float16CPU 与 NPU 同输入逐元素对比(FP32):
| seed | max_diff | mean_diff | cos_sim | 结果 |
|---|---|---|---|---|
| 42 | 1.88e+00 | 1.22e-03 | 1.000003 | ⚠ 个别元素差异 |
| 123 | 4.05e-01 | 6.98e-04 | 1.000014 | ⚠ 个别元素差异 |
| 256 | 2.41e+00 | 1.84e-03 | 0.999995 | ⚠ 个别元素差异 |
| 789 | 6.21e-02 | 6.70e-04 | 1.000014 | ⚠ 个别元素差异 |
| 1024 | 9.39e-02 | 6.59e-04 | 1.000016 | ⚠ 个别元素差异 |
结论: 余弦相似度 ≈ 1.0,表示输出方向一致。个别元素差异大(max_diff 最高 2.41,仅占 0.002%)系 NPU 与 CPU 浮点累积差异,不影响实际使用。
| batch_size | avg (ms) | p50 (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 26.5 | 26.5 | 27.2 |
| 4 | 26.8 | 26.7 | 27.1 |
测试条件: Ascend 910B4, FP32, 随机输入 224×224, 20 次取平均。
├── inference.py # 推理入口
├── convert_weights.py # 权重 key 转换
├── modeling_aimv2_native.py # 模型定义 (sin-cos pos)
├── configuration_aimv2_native.py # 模型配置
└── README.md # 本文档@misc{fini2024multimodalautoregressivepretraininglarge,
author={Fini, Enrico and Shukor, Mustafa and Li, Xiujun and others},
title={Multimodal Autoregressive Pre-training of Large Vision Encoders},
year={2024},
eprint={2411.14402},
archivePrefix={arXiv},
}