作者:昇腾实战派
小模型在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 官方仓库gitclone https://github.com/ultralytics/yolov5.gitcdyolov5# 导出 ONNX 格式python export.py--weightsyolov5s.pt--includeonnx--imgsz640转换为昇腾 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 推理实现
完整示例代码
importcv2importnumpyasnpimporttorchfromais_bench.infer.interfaceimportInferSessionfromultralytics.data.augmentimportLetterBoxclassYOLOv5NPUInference:def__init__(self,model_path,device_id=0):""" 初始化 NPU 推理会话 Args: model_path: OM 模型路径 device_id: NPU 设备ID """self.session=InferSession(device_id,model_path)defpreprocess(self,image_path,target_size=(640,640)):""" 图像预处理(保持 YOLOv5 原始预处理逻辑) """# 读取图像img=cv2.imread(image_path)ifimgisNone:raiseValueError(f"无法读取图像:{image_path}")original_img=img.copy()# 使用 LetterBox 进行预处理(保持长宽比)img=LetterBox(target_size,auto=False)(image=img)# 转换通道顺序 HWC -> CHWimg=img.transpose(2,0,1)img=np.ascontiguousarray(img)# 归一化并添加 batch 维度img=torch.from_numpy(img).float()/255.0img=img.unsqueeze(0)returnimg.numpy(),original_imgdefinference(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)returnpredictions,original_imgdefpostprocess(self,output,img_shape):""" 后处理:将输出转换为检测结果 注:此处为简化示例,实际需根据 YOLOv5 输出格式完整实现 """# 获取原始图像尺寸original_h,original_w=img_shape[:2]# 示例:假设输出格式为 [batch, num_detections, 6]# 其中最后维度为 [x1, y1, x2, y2, confidence, class]detections=[]fordetinoutput[0]:ifdet[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])})returndetections更多学习资源
- AISBENCH 官方文档
- 昇腾 ModelZoo
- 昇腾 ATC 工具
总结
本文详细介绍了使用AISBENCH在昇腾 NPU 上部署轻量化模型的完整流程,从环境配置到实际推理,提供了代码示例。主要步骤包括:
- 环境准备:选择合适的安装方式,推荐使用官方镜像
- 模型转换:使用 ATC 工具将 ONNX 转为 OM 格式
- 推理实现:利用 AISBENCH Python API 加载并执行模型
- 性能优化:通过基准测试和参数调优提升推理效率
随着昇腾边缘计算生态的不断完善,AISBENCH 将成为轻量化模型在国产 AI 硬件上部署的重要选择。无论是智能制造、自动驾驶,还是智能安防、物联网设备,这种高能效的部署方案都能为边缘 AI 应用提供坚实的技术支撑。