小模型在昇腾NPU上的推理部署:【ONNX 模型快速部署】
2026/4/18 8:40:12 网站建设 项目流程

作者:昇腾实战派

小模型在NPU上的推理部署:【知识地图】

背景概述

本文为开发者提供一份实用指南,演示如何利用ONNX Runtime华为 CANN的对接能力,将通用 ONNX 模型快速部署到昇腾 AI 处理器(NPU)上进行高效推理。通过标准化的中间格式和高效的执行提供者,实现一次导出、多处部署,是拥抱国产 AI 硬件生态的便捷路径。

什么是 ONNX Runtime CANN?

ONNX Runtime (ORT)是一个跨平台的高性能推理引擎,支持多种硬件后端。CANN是华为昇腾 AI 处理器的计算架构。两者的结合点在于ONNX Runtime 的 CANN Execution Provider (EP)

该执行提供者使得 ONNX Runtime 能够将计算图或算子直接调度到昇腾 NPU 上执行。其核心优势在于:

关键前提:版本配套与环境要求

建议使用 昇腾官方 CANN 镜像 创建容器并安装 onnxruntime 和 onnxruntime-cann。

部署实践:以 YOLOv5 模型为例

环境准备:安装 ONNX Runtime CANN

建议在昇腾 NPU 开发环境或官方 Docker 容器中进行。

# 1. 进入昇腾开发环境(假设已安装 CANN)source/usr/local/Ascend/ascend-toolkit/set_env.sh# 2. 安装 ONNX Runtime(选择与 CANN 兼容的版本)pipinstallonnx==1.20.0onnxruntime==1.23.2 onnxruntime-cann==1.23.2

准备 ONNX 模型

请前往 Ultralytics 官网 下载 YOLOv5 模型,并使用官方脚本导出为 ONNX 格式。

使用 ONNX Runtime + CANN 进行推理

以下为关键步骤的代码示例,展示了如何使用 onnxruntime_cann 在昇腾 NPU 上加载模型并进行推理。

1. 初始化模型
importonnxruntimeasortdefload_model(model_path,device_id):# 设置 NPU 设备torch.npu.set_device(f'npu:{device_id}')providers=[("CANNExecutionProvider",{"device_id":device_id,"arena_extend_strategy":"kNextPowerOfTwo","npu_mem_limit":4*1024*1024*1024,"enable_cann_graph":True,}),]session=ort.InferenceSession(model_path,providers=providers)returnsession
2. 预处理
importcv2importnumpyasnpimporttorchfromultralytics.data.augmentimportLetterBoxdefpreprocess_image(image_path,target_size=(640,640)):original_image=cv2.imread(image_path)# 使用 LetterBox 进行预处理,保持长宽比image=LetterBox(target_size,auto=False)(image=original_image)image=image.transpose(2,0,1)# HWC to CHWimage=np.ascontiguousarray(image)image=torch.from_numpy(image).float()/255.0image=image.unsqueeze(0)# 添加 batch 维度returnimage.numpy(),original_image
3. 推理
# 加载模型model_path="yolov5s.onnx"device_id=0# NPU 设备 IDsession=load_model(model_path,device_id)# 获取输入输出名称input_name=session.get_inputs()[0].name output_name=session.get_outputs()[0].name# 预处理图像input_image,original_image=preprocess_image("test.jpg")# 执行推理outputs=session.run([output_name],{input_name:input_image})
4. 后处理

后处理部分通常包括非极大值抑制(NMS)等操作,此处以 YOLOv5 为例进行简单展示:

fromultralytics.utils.nmsimportnon_max_suppressiondefpostprocess(prediction,original_shape,input_shape):# 使用非极大值抑制pred=non_max_suppression(prediction,conf_thres=0.25,iou_thres=0.45)# 将检测框映射回原图尺寸fordetinpred:ifdetisnotNoneandlen(det):det[:,:4]=scale_boxes(input_shape,det[:,:4],original_shape).round()returnpred

更多资源

更多详细使用教程请参考 ONNX Runtime CANN 官方文档。

总结

本文演示了使用ONNX Runtime + CANN在昇腾 NPU 上进行模型推理的核心流程。通过本文提供的示例代码,开发者可以了解如何在昇腾 NPU 上使用 ONNX Runtime CANN 执行提供者加载 ONNX 模型并进行推理。

主要步骤包括:

  1. 模型初始化:配置 CANNExecutionProvider 并创建推理会话
  2. 预处理:将输入图像转换为模型所需的格式
  3. 推理:调用 ONNX Runtime 的 run 方法在 NPU 上执行计算
  4. 后处理:对模型输出进行解析和转换

本文仅提供了关键步骤的代码片段,完整的部署方案需要根据具体模型和业务需求进行补充。相比直接使用torch_npu,ONNX Runtime 方案更适合需要跨框架部署、已有 ONNX 格式模型或追求标准化推理流程的场景。

随着 ONNX 生态和 CANN 的不断完善,这一方案将成为昇腾 NPU 推理部署的重要选择。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询