标签: #NPU
Vision Transformer (ViT) 是 Google 提出的基于 Transformer 架构的图像分类模型。该模型将图像切分为固定大小的 patch,并通过 Transformer Encoder 进行处理,在 ImageNet-21k 上预训练并在 ImageNet-1k 上微调,适用于通用图像分类任务。
google/vit-base-patch16-224| 项目 | 配置 |
|---|---|
| NPU 型号 | Ascend 910B4 |
| NPU 数量 | 单卡 |
| HBM 容量 | 32 GB |
| 健康状态 | OK |
+------------------------------------------------------------------------------------------------+
| npu-smi 25.5.1 Version: 25.5.1 |
+---------------------------+---------------+----------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page)|
| Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) |
+===========================+===============+====================================================+
| 6 910B4 | OK | 88.8 41 0 / 0 |
| 0 | 0000:82:00.0 | 0 0 / 0 2858 / 32768 |
+===========================+===============+====================================================+| 项目 | 版本 |
|---|---|
| Python | 3.11.14 |
| torch | 2.9.0+cpu |
| torchvision | 0.24.0 |
| torch_npu | 2.9.0.post1 |
| transformers | 4.57.6 |
| PIL | 12.2.0 |
| requests | 2.33.1 |
| numpy | 1.26.4 |
pip install -r requirements.txtrequirements.txt 内容:
torch>=2.0.0
torchvision
transformers>=4.30.0
pillow
requests
numpy注意: torch 和 torch_npu 的版本必须与您本地的 CANN 版本匹配。如果环境中已安装 torch/torch_npu,请勿强制覆盖安装。
本工程使用 Transformers from_pretrained 自动下载模型权重。
google/vit-base-patch16-224)HF_ENDPOINT=https://hf-mirror.com~/.cache/huggingface/hub/python inference.py该脚本使用 AutoImageProcessor 和 AutoModelForImageClassification 加载模型,优先将模型部署到 npu:0 执行推理。
assets/test.jpglogs/inference.log — 完整推理日志logs/prediction.txt — 预测标签和置信度摘要Device: npu:0
NPU Count: 1
Inference latency: 15833.37 ms
Top-5 Predictions:
1. revolver, six-gun, six-shooter (id=763, score=0.080768)
2. assault rifle, assault gun (id=413, score=0.063463)
3. letter opener, paper knife, paperknife (id=623, score=0.022156)
4. oboe, hautboy, hautbois (id=683, score=0.017151)
5. whistle (id=902, score=0.013315)注意:
assets/test.jpg为本地生成的占位图片(因网络环境无法下载公开测试图),上述分类结果仅为代码流程验证,不代表真实图片语义。
python eval_accuracy.pyassets/test.jpgmax_abs_diff — logits 最大绝对差mean_abs_diff — logits 平均绝对差prob max diff — 概率最大绝对差top1 consistent — Top-1 预测是否一致说明: 本验证使用的输入图片
assets/test.jpg为本地生成的占位图(因网络环境无法下载公开测试图),但 CPU 与 NPU 的对比流程和指标计算完全固定且一致。
Max abs diff (logits): 0.02459311
Mean abs diff (logits): 0.00467538
Max abs diff (probabilities): 0.00046274
CPU top-1 class: 763
NPU top-1 class: 763
Top-1 consistent: True
Accuracy threshold: 0.01
Accuracy validation PASSED: False结论:
assets/test.jpg 为本地生成的占位图;python benchmark.pyassets/test.jpgimages/sIterations: 20
Avg latency: 12.05 ms
Min latency: 11.56 ms
Max latency: 12.36 ms
Std dev: 0.25 ms
Throughput: 82.96 images/s首次推理存在算子编译和内存初始化开销(约 15s),预热后单张图片稳定推理延迟约 12 ms。
| 文件路径 | 说明 |
|---|---|
logs/env_check.log | 环境检查日志(npu-smi、Python 包版本、NPU 可用性) |
logs/inference.log | 推理完整日志 |
logs/prediction.txt | top-5 预测摘要 |
logs/accuracy.log | 精度验证对比结果 |
logs/benchmark.log | 性能基准测试统计 |
脚本已内置镜像源:
os.environ.setdefault("HF_ENDPOINT", "https://hf-mirror.com")若仍失败,可手动设置环境变量后重试:
export HF_ENDPOINT=https://hf-mirror.com
python inference.py首次在 NPU 上运行时会触发算子编译和图优化,耗时约 10~20 秒,属于正常现象。后续推理(如 benchmark 预热后)将稳定在 ~12 ms。
NPU 与 CPU 在底层浮点实现(如 matmul、softmax)上存在微小精度差异,导致 logits 最大绝对差通常在 1e-2 量级,但转换为概率后差异降至 1e-4 量级,且 Top-1 结果完全一致。该差异在视觉分类任务中属于可接受范围。
/home/atomgit/ascend/log 目录创建失败警告?这是 torch_npu 尝试写入 Ascend 运行日志时遇到的权限问题,不影响模型推理和结果正确性。如需消除警告,可手动创建该目录:
mkdir -p /home/atomgit/ascend/log由于当前运行环境无法访问外部网络下载公开测试图片,assets/test.jpg 是由 PIL 生成的占位图片。若需验证真实图片分类效果,请替换为您的本地图片并重新运行脚本。
google-vit-base-patch16-224-NPU/
├── README.md
├── requirements.txt
├── inference.py
├── eval_accuracy.py
├── benchmark.py
├── assets/
│ └── test.jpg
├── logs/
│ ├── env_check.log
│ ├── inference.log
│ ├── prediction.txt
│ ├── accuracy.log
│ └── benchmark.log
├── scripts/
└── screenshots/