---
title: 昇腾小模型迁移方案（part2/2）-官方技术文章-昇腾社区
description: 本文主要系统性地陈述小模型推理迁移至NPU的技术路线方案，用于指导读者根据不同框架模型选择合适的迁移路线，并引导入门
keywords: 昇腾小模型迁,移方案,官方技术文章,昇腾社区,模型推理及应用,推理工具使用,指南,推理命令介绍
url: https://www.hiascend.com/developer/techArticles/20260228-1?envFlag=1
section: (其他)
---

# 昇腾小模型迁移方案（part2/2）-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20260228-1?envFlag=1
描述: 本文主要系统性地陈述小模型推理迁移至NPU的技术路线方案，用于指导读者根据不同框架模型选择合适的迁移路线，并引导入门
关键词: 昇腾小模型迁,移方案,官方技术文章,昇腾社区,模型推理及应用,推理工具使用,指南,推理命令介绍

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

昇腾小模型迁移方案（part2/2）

昇腾小模型迁移方案（part2/2）

模型推理

发表于: 2026/02/28

## 模型推理及应用

### ais_bench推理工具使用指南

通过ais-bench工具验证om模型是否可以正常推理；用来针对指定的推理模型运行推理程序，并能够测试推理模型的性能（包括吞吐率、时延）；

ais_bench推理工具的使用方法主要分为命令行使用和API调用；

ais-bench工具接口开放:

ais_bench推理工具inferface推理Python接口。接口文档见https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/API_GUIDE.md [了解详情](https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/API_GUIDE.md)

aclruntime API。接口文档见https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/aclruntime_API_GUIDE.md [了解详情](https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/aclruntime_API_GUIDE.md)

#### ais_bench推理命令介绍

端到端推理流程一般包括：预处理、模型推理和后处理三个步骤

预处理：将推理脚本中预处理代码保存为预处理文件，并将预处理后的数据保存为BIN文件或NPY文件；

模型推理：使用命令行执行推理，保存为BIN/NPY/TXT格式；

后处理：将推理脚本中后处理代码保存为后处理文件，并读取模型输出数据进行后处理操作；

注意：多个输入可保存在不同的文件夹下，同一个数据对应的多个输入使用相同命名方式，可直接按顺序传入输入文件夹执行推理；

使用ais_bench进行推理验证，参考命令：

```
python -m ais_bench --model /path/to/model.om --input /path/to/input --output /path/to/output
```

--model: 昇腾离线模型OM的路径

--input: 指定模型需要的输入数据路径。如果模型有多个输入节点，则指定多个输入路径，用“,”隔开。路径可以是文件或者目录，若为文件则执行单样本推理，若为目录，则对该目录下的所有样本进行推理。

--output: 推理结果保存目录。配置后会创建“日期+时间”的子目录，保存输出结果。

#### ais_bench推理接口参考示例

推理流程：

1）将推理脚本中model的加载代码替换为OM模型加载代码

2）将推理脚本中model的推理代码替换为使用OM模型执行推理的代码

注意： 输入输出在List中的顺序与OM模型的输入输出顺序相同

示例：继承已改写的PytorchInferencer类，增加OM加载代码、重写model_inference函数

主要步骤：

① 创建session实例：

```
from ais_bench.infer.interface import InferSession 
session = InferSession(device_id=0,model_path="/path/to/model.om")
```

② 使用session实例进行推理

```
model_output = session.infer(feeds=model_input)[0]
```

#### 通过python调用aisbench使用指南参考

ais_bench提供的python API可供使能基于昇腾硬件的离线模型(.om模型)推理；在这里重点展开进行说明。

onnx为常见的模型格式，通常通过onnx转om模型实现在昇腾硬件上的推理加速，而ais_bench则是om模型推理工具，支持多Device推理、支持动态Batch参数、多线程推理等。

使用ais_bench工具，通常是通过命令行进行调用，每次模型均需要重复初始化和释放，不适合模型的服务化部署，但ais_bench工具也可以通过python进行调用，通过拆分ais_bench工具的处理逻辑，分为模型初始化、模型推理、获取模型性能数据、模型释放几个部分。

```
#导入依赖包
from ais_bench.infer.interface import InferSession
#加载模型，InferSession的初始化表示在device id为0的npu芯片上加载模型model.om
session = InferSession(device_id=0, model_path="model.om")
#调用接口推理模型得到输出；feeds传入一组输入数据；mode选择模型类型，static表示输入节点shape固定的静态模型
#outputs 为ndarray格式的tensor
outputs = session.infer(feeds=inputs, mode="static")
#获取模型数据性能
#exec_time_list 按先后顺序保留了所有session在执行推理的时间。
exec_time = session.summary().exec_time_list[-1]
#释放模型占用的内存
session.free_resource()
```

#### aclruntime API使用指南参考

用户可以通过命令行以及Python API接口执行模型的推理过程。这两种方法主要使用了Python端封装的类InferSession，调用其中封装的参数设置、模型推理函数，获得推理结果和性能测试情况。

aclruntime绑定了Python前端InferSession类和C++后端PyInferenceSession类，直接开放aclruntime推理API，使用户可以直接调用aclruntime模块，用Python函数代码直接调用模型推理后端的C++函数，减少了在Python端的一些操作，提升模型推理和开发的效率。

01导入依赖包

```
使用aclruntime API前需要导入如下依赖：
import aclruntime
```

02加载模型

aclruntime.InferenceSession 是运行模型推理aclruntime API的主要类，用于加载om模型和执行om模型的推理，模型推理前需要初始化一个InferenceSession的实例。

```
# session_options()构建了一个包含：log_level、loop、aclJsonPath的实例，存储模型信息
options = aclruntime.session_options()
# 该初始化表示在device_id的npu芯片上加载模型,并将options作为参数传入
session = aclruntime.InferenceSession(model_path, device_id, options)
```

03数据迁移至device

aclruntime API直接调用后端C++函数，在该过程中需要数据在npu上，所以需要将模型的输入数据提前放在device侧。

```
# 利用aclruntime.Tensor将数据转化为适合模型推理的类型
tensor = aclruntime.Tensor(ndata)
# 将数据放至device上
tensor.to_device(device_id)
```

04执行模型推理

建立好模型推理的实例session后，准备outnames，表示模型输出结果的名称。在npu芯片上的数据和配置都已经设定完成，调用session的成员函数接口进行模型推理，接口返回值就是推理结果。

```
# outnames表示模型推理结果输出的名称
outnames = [meta.name for meta in session.get_outputs()]
# feeds数据类型是list，存放着一组模型推理的Tensor类型的数据。outputs是ndarray格式的tensor，表示模型推理的输出。
outputs = session.run(outnames, feeds)
```

05获取模型数据性能

推理结束，推理的性能数据也保存在session中，可以通过session的接口获取性能数据。

```
# exec_time_list 按先后顺序保留了所有session在执行推理的时间。
ssession.sumary().exec_time_list
```

### Mxvision（Vision SDK）应用开发

#### Mxvision背景介绍

Vision SDK是MindSDK中面向图片和视频视觉分析的SDK，致力于视频图像处理算法加速，提升视频图像处理性能，降低CV应用的开发复杂度，加速CV应用开发部署。提供了基本的视频、图像智能分析能力及编程框架。简化昇腾芯片推理业务开发过程，降低使用昇腾芯片开发的门槛。

计算机视觉（Computer Vision，以下简称“CV”）最初是为了实现计算机对数字图片的简单处理而产生的，研究内容主要包括图像处理、模式识别、机器学习、深度学习等方面。在智能视频分析（Intelligent Video Analytics，以下简称“IVA”）行业中，传统计算常见算法的应用领域有很多，例如目标识别、视频结构化、动作行为识别等。随着硬件技术和算法的不断进步，视频与图像已逐渐成为全球互联网流量的主要组成部分。随着媒体服务的快速增长，AI图像算法基础的视频图像处理，逐渐成为计算流程中的成本壁垒和性能瓶颈。

相关的开发流程及API参考等更多细节请查看Vision SDK官方链接：https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0002.html [了解详情](https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0002.html)

Vision SDK主要有以下两种调用方式。

通过API接口方式开发：提供原生的推理API以及算子加速库，用户可通过调用API接口的方式开发应用。对于有固定应用开发流程的用户，建议采用此方式，借用Vision SDK提供算法加速能力构建CV应用。

通过流程编排方式开发：采用模块化的设计理念，将业务流程中的各个功能单元封装成独立的插件。用户可以用流程编排的方式，通过插件的串接快速构建业务，进行应用开发。此方式提供常用功能插件，具备流程编排能力，提供插件自定义开发功能。

#### API接口开发方式（C++）及样例

以Atlas 推理系列产品为例，使用Vision SDK C++接口开发图像目标检测应用进行演示，图像目标检测模型推理流程如下图所示。

目标检测模型推理流程图：

样例取用TensorFlow框架YoloV3模型，具体实现过程参考：https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0014.html [了解详情](https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0014.html)

#### API接口开发方式（Python）及样例

以Atlas 推理系列产品为例，使用Vision SDK Python接口开发图像分类应用进行演示，图像分类模型推理流程如下图所示。

样例取用Caffe框架ResNet-50模型，具体实现过程参考：https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0015.html [了解详情](https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0015.html)

#### 流程编排开发方式及样例

以Atlas 推理系列产品为例，通过Vision SDK图像分类案例，介绍如何使用Vision SDK流程编排方式开发推理应用。案例使用YoloV3模型对图片进行分类并最后输出分类结果。

样例取用TensorFlow框架YoloV3模型,具体实现过程参考：https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0016.html [了解详情](https://www.hiascend.com/document/detail/zh/mindsdk/730/vision/visionug/mxvisionug_0016.html)

### pyACL使用说明（可选）

pyACL（Python Ascend Computing Language）就是在AscendCL的基础上使用CPython封装得到的Python API库，提供运行时管理、模型推理、媒体数据处理等API，单算子执行，使用户可以通过Python语言进行昇腾AI处理器的运行管理、资源管理等。

pyACL应用开发指南：https://www.hiascend.com/document/detail/zh/canncommercial/81RC1/developmentguide/appdevg/aclpythondevg/aclpythondevg_0000.html [了解详情](https://www.hiascend.com/document/detail/zh/canncommercial/81RC1/developmentguide/appdevg/aclpythondevg/aclpythondevg_0000.html)

### ACL使用说明（可选）

AscendCL（Ascend Computing Language）是一套开发深度神经网络应用的C语言API库，能够实现利用底层硬件计算资源，在CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等。简单来说，就是统一的API框架，实现对所有资源的调用。计算资源层是昇腾AI处理器的硬件算力基础，主要完成神经网络的矩阵相关计算、完成控制算子/标量/向量等通用计算和执行控制功能、完成图像和视频数据的预处理，为深度神经网络计算提供了执行上的保障。

ACL应用开发指南：https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/appdevg/acldevg/acldevg_0001.html [了解详情](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/appdevg/acldevg/acldevg_0001.html)

高阶案例：https://gitee.com/ascend/samples/tree/master/inference/modelInference/sampleYOLOV7MultiInput [了解详情](https://gitee.com/ascend/samples/tree/master/inference/modelInference/sampleYOLOV7MultiInput)
