Interlinked7/levit-192-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

levit-192-NPU

#+NPU #+昇腾 #+Ascend910 #+CV #+图像分类 #+LeViT #+Transformer #+ViT

模型介绍

本仓库包含了 facebook/levit-192 在华为昇腾 Ascend910 NPU 上的适配版本,支持 CPU 和 NPU 两种推理方式,并提供了完整的精度验证流程。

LeViT(LeVity Vision Transformer)是一种混合神经网络架构,结合了 CNN 和 ViT 的优点。LeViT-192 是 LeViT 系列的中等模型,具有 192 维隐藏层。

原始模型地址: facebook/levit-192

任务类型

图像分类(Image Classification),1000 类 ImageNet 分类

模型框架

PyTorch(HuggingFace Transformers)

输入格式

图像(Image),RGB 格式,预处理后为 224×224 张量

输出格式

1000 个类别的分类 logits 和概率分数

依赖环境

依赖版本
Python>= 3.8
PyTorch>= 2.0.0
torch_npu>= 2.0.0
Transformers>= 4.30.0
NumPy>= 1.20.0
Pillow>= 9.0.0

NPU 适配说明

本适配基于华为 Ascend910 NPU(CANN 8.5.1,显存 64GB)完成。适配内容包括:

  1. 使用 HuggingFace Transformers 加载 LeViT-192 预训练模型
  2. 通过 model.to("npu:0") 将模型权重迁移到 NPU 设备实现加速推理
  3. 对输入张量进行设备迁移以确保在 NPU 上正确运行
  4. 实现了 CPU 与 NPU 推理结果的精度对比验证

环境准备

pip install torch torch_npu transformers Pillow numpy -i https://mirrors.aliyun.com/pypi/simple/

推理命令

CPU 推理:

python3 inference.py

CPU vs NPU 精度对比:

python3 compare_cpu_npu.py

部署和推理方法

import torch
from transformers import LevitForImageClassificationWithTeacher, LevitImageProcessor
from PIL import Image

processor = LevitImageProcessor.from_pretrained("facebook/levit-192")
model = LevitForImageClassificationWithTeacher.from_pretrained("facebook/levit-192")

model = model.to("npu:0")
image = Image.open("test.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items() if isinstance(v, torch.Tensor)}

with torch.no_grad():
    outputs = model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
print(probs)

CPU/NPU 精度测试方法

  1. 使用 HuggingFace Transformers 加载 LeViT-192 预训练模型
  2. 在 CPU 上执行推理,记录输出分数和标签
  3. 将模型迁移到 NPU 设备,在 NPU 上执行相同推理
  4. 对比 CPU 与 NPU 输出的各项差异指标

CPU/NPU 精度测试结果

指标值
最大绝对误差1.639128e-05
平均绝对误差3.600753e-08
相对误差0.0017%
余弦相似度1.000000
Top-1 标签匹配True
Top-5 一致率100%
CPU 推理耗时55.4 ms
NPU 推理耗时202.8 ms

Top-5 分类结果对比

排名CPU 类别CPU 分数NPU 类别NPU 分数
Top-1class 120.983460class 120.983444
Top-2class 100.007913class 100.007917
Top-3class 130.000328class 130.000328
Top-4class 140.000321class 140.000321
Top-5class 110.000296class 110.000296

精度结论

NPU 与 CPU 推理结果误差 < 1%(实际相对误差为 0.0017%),精度完全满足要求。

性能测试结果

平台推理耗时 (ms)加速比
CPU55.41.00x
NPU (Ascend910)202.80.27x

运行截图

推理截图

推理

精度对比截图

精度对比

模型标签

#+NPU #+昇腾 #+Ascend910 #+CV #+图像分类 #+LeViT #+Transformer #+ViT