小模型在昇腾NPU上的推理部署:【AISBENCH】
AISBENCH是昇腾平台面向轻量级模型推出的端侧推理工具集,它集成了模型转换、图优化、量化压缩与运行时调度等核心功能。极轻量:内存占用与二进制体积极小,适合嵌入式场景低延迟:优化数据流与算子调度,推理速度更快易用性:提供一键式编译工具,简化部署流程高能效:支持功耗与性能的平衡调节,延长设备续航本文详细介绍了使用AISBENCH在昇腾 NPU 上部署轻量化模型的完整流程,从环境配置到实际推理,提供
作者:昇腾实战派
小模型在NPU上的推理部署: 【知识地图】
引言
在边缘计算和端侧AI应用蓬勃发展的今天,如何在资源有限的设备上实现高效、低延迟的模型推理,成为开发者面临的关键挑战。昇腾(Ascend)NPU 作为国产AI硬件的代表,以其高能效比备受关注。而 AISBENCH 正是华为为昇腾平台量身打造的轻量级推理工具链,特别适合小模型在边缘设备上的部署。
本文将带你从零开始,一步步完成 YOLOv5 模型在昇腾 NPU 上的完整部署流程,并提供可直接运行的代码示例。
什么是 AISBENCH?
AISBENCH 是昇腾平台面向轻量级模型推出的端侧推理工具集,它集成了模型转换、图优化、量化压缩与运行时调度等核心功能。与通用的推理框架相比,AISBENCH 专门针对小模型的特点进行了深度优化:
- 极轻量:内存占用与二进制体积极小,适合嵌入式场景
- 低延迟:优化数据流与算子调度,推理速度更快
- 易用性:提供一键式编译工具,简化部署流程
- 高能效:支持功耗与性能的平衡调节,延长设备续航
环境准备与版本配套
重要提示
ais_bench 推理工具包含两个部分:aclruntime包 和 ais_bench推理程序包。安装前请务必注意以下事项:
- 确保网络畅通
- CentOS 平台默认的 gcc 4.8 可能无法安装,建议升级 gcc 版本
推荐安装方式
对于大多数开发者,建议直接使用 昇腾官方镜像,可省去复杂的环境配置:
更多安装说明:建议访问 ais_bench 官方仓库 获取最新安装指南。
部署实战:YOLOv5 模型部署全流程
步骤1:模型准备与转换
-
# 克隆 YOLOv5 官方仓库 git clone https://github.com/ultralytics/yolov5.git cd yolov5 # 导出 ONNX 格式 python export.py --weights yolov5s.pt --include onnx --imgsz 640 -
转换为昇腾 OM 格式
使用昇腾 ATC 工具将 ONNX 转为 OM:atc --model=yolov5s.onnx \ --framework=5 \ --output=yolov5s \ --input_shape="images:1,3,640,640" \ --soc_version=Ascend310P3 \ --log=info
步骤2:AISBENCH Python API 推理实现
完整示例代码
import cv2
import numpy as np
import torch
from ais_bench.infer.interface import InferSession
from ultralytics.data.augment import LetterBox
class YOLOv5NPUInference:
def __init__(self, model_path, device_id=0):
"""
初始化 NPU 推理会话
Args:
model_path: OM 模型路径
device_id: NPU 设备ID
"""
self.session = InferSession(device_id, model_path)
def preprocess(self, image_path, target_size=(640, 640)):
"""
图像预处理(保持 YOLOv5 原始预处理逻辑)
"""
# 读取图像
img = cv2.imread(image_path)
if img is None:
raise ValueError(f"无法读取图像: {image_path}")
original_img = img.copy()
# 使用 LetterBox 进行预处理(保持长宽比)
img = LetterBox(target_size, auto=False)(image=img)
# 转换通道顺序 HWC -> CHW
img = img.transpose(2, 0, 1)
img = np.ascontiguousarray(img)
# 归一化并添加 batch 维度
img = torch.from_numpy(img).float() / 255.0
img = img.unsqueeze(0)
return img.numpy(), original_img
def inference(self, image_path):
"""
执行推理
"""
# 1. 预处理
input_data, original_img = self.preprocess(image_path)
# 2. NPU 推理
outputs = self.session.infer([input_data])
# 3. 后处理(示例,需根据实际模型输出调整)
predictions = self.postprocess(outputs[0], original_img.shape)
return predictions, original_img
def postprocess(self, output, img_shape):
"""
后处理:将输出转换为检测结果
注:此处为简化示例,实际需根据 YOLOv5 输出格式完整实现
"""
# 获取原始图像尺寸
original_h, original_w = img_shape[:2]
# 示例:假设输出格式为 [batch, num_detections, 6]
# 其中最后维度为 [x1, y1, x2, y2, confidence, class]
detections = []
for det in output[0]:
if det[4] > 0.25: # 置信度阈值
# 将归一化坐标转换回原始图像尺寸
x1 = int(det[0] * original_w)
y1 = int(det[1] * original_h)
x2 = int(det[2] * original_w)
y2 = int(det[3] * original_h)
detections.append({
'bbox': [x1, y1, x2, y2],
'confidence': float(det[4]),
'class_id': int(det[5])
})
return detections
更多学习资源
总结
本文详细介绍了使用 AISBENCH 在昇腾 NPU 上部署轻量化模型的完整流程,从环境配置到实际推理,提供了代码示例。主要步骤包括:
- 环境准备:选择合适的安装方式,推荐使用官方镜像
- 模型转换:使用 ATC 工具将 ONNX 转为 OM 格式
- 推理实现:利用 AISBENCH Python API 加载并执行模型
- 性能优化:通过基准测试和参数调优提升推理效率
随着昇腾边缘计算生态的不断完善,AISBENCH 将成为轻量化模型在国产 AI 硬件上部署的重要选择。无论是智能制造、自动驾驶,还是智能安防、物联网设备,这种高能效的部署方案都能为边缘 AI 应用提供坚实的技术支撑。
更多推荐


所有评论(0)