飞桨x昇腾生态适配方案:12_动态OM推理

简介: 本文介绍了基于Ascend AI平台的OM模型动态推理方法,包括动态BatchSize、动态分辨率、动态维度及动态Shape四种场景,支持固定模式与自动设置模式。通过`ais_bench`工具实现推理,提供示例命令及输出结果说明,并解决常见问题(如环境变量未设置、输入与模型不匹配等)。此外,还提供了API推理指南及参考链接,帮助用户深入了解ONNX离线推理流程、性能优化案例及工具使用方法。

动态BatchSize OM推理

以档位1 2 4 8档为例,设置档位为2,本程序将获取实际模型输入组Batch,每2个输入为一组,进行组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_batch_size_det.om --input ./inference/input/ --output ./inference/output/ --dymBatch 2

推理结果:
01_动态BatchSizeOM推理.png

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_11_48
        ├── image_0.bin
    └── 2025_03_17-11_11_48_summary.json

动态分辨率 OM推理

以档位224,224;448,448档为例,设置档位为224,224,本程序将获取实际模型输入组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_image_size_det.om --input ./inference/input/ --output ./inference/output/ --dymHW 224,224

推理结果:
02_动态分辨率OM推理.png

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_47_25
        ├── image_0.bin
    └── 2025_03_17-11_47_25_summary.json

动态维度 OM推理

固定维度模式

以设置档位1,3,224,224为例,本程序将获取实际模型输入组Batch。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_dims_det.om --input ./inference/input/ --output ./inference/output/ --dymDims x:1,3,224,224

推理结果:
03_固定维度模式.png

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_17-11_53_04
        ├── image_0.bin
    └── 2025_03_17-11_53_04_summary.json

自动设置维度模式

动态维度模型输入数据的Shape可能是不固定的,比如一个输入文件Shape为1,3,224,224,另一个输入文件Shape为 1,3,448,448。若两个文件同时推理,则需要设置两次动态Shape参数,当前不支持该操作。针对该场景,增加动态Dims模式,可以根据输入文件的Shape信息,自动设置模型的Shape参数。
示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_dims_det.om --input ./inference/input/ --output ./inference/output/ --auto_set_dymdims_mode 1

推理结果:
04_自动设置维度模式.png

输入文件:

# 输入的input文件夹内容如下
ls ./inference/input/
image_1_224_224.npy  image_1_448_448.npy

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_18-23_54_55
        ├── image_1_224_224_0.bin
        ├── image_1_448_448_0.bin
    └── 2025_03_18-23_54_55_summary.json

动态shape OM推理

固定shape模式

以ATC设置[1~8,3,224~448,224~448],设置档位1,3,256,256为例,本程序将获取实际模型输入组Batch。
动态Shape的输出大小通常为0,建议通过--outputSize参数设置对应输出的内存大小。

示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_shape_det_linux_aarch64.om --input ./inference/image.npy --output ./inference/output/ --dymShape x:1,3,256,256 --outputSize 10000

推理结果:
05_固定shape模式.png

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_19-00_12_07
        ├── image_0.bin
    └── 2025_03_19-00_12_07_summary.json

自动设置Shape模式

动态Shape模型输入数据的Shape可能是不固定的,比如输入文件Shape分别为1,3,224,224;1,3,256,256;1,3,448,448。若三个文件同时推理,则需要设置三次动态Shape参数,当前不支持该操作。针对该场景,增加动态Shape模式,可以根据输入文件的Shape信息,自动设置模型的Shape参数。

示例命令:

python3 -m ais_bench --model ./inference/om/dynamic_shape_det_linux_aarch64.om --auto_set_dymshape_mode 1  --input ./inference/input/ --output ./inference/output/ --outputSize 10000

推理结果:
06_自动设置Shape模式.png

输入文件:

# 输入的input文件夹内容如下
ls ./inference/input/
image_1_224_224.npy  image_1_256_256.npy  image_1_448_448.npy

输出结果:
执行完毕后,输出会被保存在 ./inference/output/路径下:

inference/output/
    ├── 2025_03_19-00_21_55
        ├── image_1_224_224_0.bin
        ├── image_1_256_256_0.bin
        ├── image_1_448_448_0.bin
    └── 2025_03_19-00_21_55_summary.json

注意:该场景下的输入文件必须为npy格式,如果是bin文件将获取不到真实的Shape信息。

profiler或dump场景

--profiler参数和--dump参数,必须要增加--output参数,指示输出路径。

--profiler和--dump可以分别使用,但不能同时启用。

python3 -m ais_bench  --model ./inference/om/det.om --output ./inference/output/ --dump 1
python3 -m ais_bench  --model ./inference/om/det.om --output ./inference/output/ --profiler 1

常见问题

未设置环境变量

每次使用离线推理前务必先设置环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh

实际输入HW和OM模型不一致

报错信息:
07_实际输入HW和OM模型不一致.png

错误原因:
det.om模型的输入input_shape=x:1,3,224,224;而image.npy的输入为:1,3,256,256。

实际输入Dims和OM模型不一致

报错信息:
08_实际输入Dims和OM模型不一致.png

错误原因:
dynamic_dims_det.om模型的输入dynamic_dims="1,224,224;8,448,448";而实际的输入为:1,3,224,224;1,3,448,448。

动态OM模型未设置动态参数

报错信息:
09_动态OM模型未设置动态参数.png

错误原因:
使用动态OM模型(包括动态BatchSize、动态分辨率、动态维度、动态shape)推理,但并未设置相关的动态参数。

CANN包版本老旧

报错信息:
10_CANN包版本老旧.png

错误原因:
CANN包版本老旧,参考“环境准备->更新CANN包”章节更换CANN版本。

API推理

请参考ais_bench interface python API使用指南:
https://gitee.com/ascend/tools/blob/master/ais-bench_workload/tool/ais_bench/API_GUIDE.md

参考链接

目录
相关文章
|
5月前
|
人工智能 测试技术 API
飞桨x昇腾生态适配方案:11_静态OM推理
昇腾AI推理工具`ais_bench`基于ACL开发,支持命令行快速推理与性能测试(吞吐率、时延等),并提供相关API。用户需下载适配环境的`aclruntime`和`ais_bench`的whl包后通过pip安装。设置环境变量后,可通过多种场景使用工具:纯推理(默认输入全0数据)、调试模式(获取详细参数与耗时信息)、文件/文件夹输入(指定Numpy文件或目录)、以及多Device并行推理。例如,BERT模型需按顺序传入三个文件夹对应其输入参数。工具输出包括吞吐率、耗时等关键指标,助力高效模型性能评估。
253 0
|
5月前
|
编解码 人工智能 JSON
飞桨x昇腾生态适配方案:10_ONNX转OM
本章节主要介绍如何将ONNX模型转化为昇腾AI处理器支持的OM模型,并进行离线推理。通过昇腾张量编译器(ATC),可实现静态OM、动态BatchSize、动态分辨率、动态维度及动态shape等多种模型转换。文中详细说明了ATC工具的使用方法、参数配置、命令格式以及常见问题解决方法,同时提供了具体示例和可视化工具辅助输入参数确认,帮助用户高效完成模型转换与部署。
597 0
|
5月前
|
API Python
飞桨x昇腾生态适配方案:13_API离线推理
ais_bench 提供了基于昇腾硬件的 Python API,用于离线模型(.om模型)推理。支持静态与动态API场景,如单个或多个OM模型推理。通过 `InferSession` 类加载模型并执行推理,可灵活处理输入输出形状转换。示例代码涵盖图片读取、形状调整、多模型串联推理及资源释放等操作,满足多样化推理需求。
301 26
|
6月前
|
容器
vllm+vllm-ascend本地部署QwQ-32B
本指南介绍如何下载、安装和启动基于Ascend的vLLM模型。首先,可通过华为镜像或Hugging Face下载预训练模型;其次,安装vllm-ascend,支持通过基础镜像(如`quay.io/ascend/vllm-ascend:v0.7.3-dev`)或源码编译方式完成;最后,使用OpenAI兼容接口启动模型,例如运行`vllm serve`命令,设置模型路径、并行规模等参数。适用于大模型推理场景,需注意显存需求(如QwQ-32B需70G以上)。
2324 17
|
6月前
|
机器学习/深度学习 PyTorch API
MindIE Torch快速上手
MindIE Torch 是一款高效的深度学习推理优化工具,支持 PyTorch 模型在 NPU 上的高性能部署。其核心特性包括:1) 子图与单算子混合执行,配合 torch_npu 实现高效推理;2) 支持 C++ 和 Python 编程语言,灵活适配不同开发需求;3) 兼容多种模式(TorchScript、ExportedProgram、torch.compile),覆盖广泛场景;4) 支持静态与动态 Shape 模型编译,满足多样化输入需求。通过简单易用的 API,开发者可快速完成模型加载、编译优化、推理执行及离线模型导出等全流程操作,显著提升开发效率与性能表现。
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
飞桨x昇腾生态适配方案:00_整体方案介绍
本文详细介绍PaddlePaddle与NPU的适配工作,涵盖训练与推理支持、性能优化及离线推理方案。PaddleCustomDevice作为适配层,支持主流模型(详见飞桨-昇腾模型列表),多数性能媲美V100,部分调优模型接近0.8*A800。硬件适配主要针对A2芯片,A1兼容但310系列建议离线推理。提供常用模型仓链接及整体方案导览,包括环境准备、算子适配、性能调优和Paddle转ONNX/OM等内容。
246 0
|
5月前
|
存储 算法
飞桨x昇腾生态适配方案:09_Paddle转ONNX
本节主要介绍如何将 PP-OCRv4 模型转化为 ONNX 模型,包括环境准备、模型下载、训练模型转 inference 模型及最终转为 ONNX 格式的过程。首先需安装 Paddle2ONNX 和 ONNXRuntime,接着下载并解压训练模型。通过 `export_model.py` 脚本将训练模型转化为 inference 模型,生成包含结构和参数的文件。最后使用 Paddle2ONNX 工具完成到 ONNX 格式的转换,并可选地使用 onnxslim 进行模型优化。各步骤均提供详细命令与参数说明,便于实际操作与部署。
222 9
|
5月前
|
Python
飞桨x昇腾生态适配方案:15_loop算子缺失(下):for循环替换loop
本章节基于上一内容,将ONNX模型拆分为loop算子部分与非loop算子部分,分别转换为OM模型。通过使用for循环替换loop算子的计算逻辑,构造子图执行流程,并编写OM模型推理脚本进行验证。同时,编写ONNX模型推理脚本对比两者推理结果,确保一致性。实验结果表明,拆分后的OM模型与原始ONNX模型推理结果一致,证明方案可行。
168 27
|
5月前
|
JSON 数据格式 AI芯片
飞桨x昇腾生态适配方案:14_loop算子缺失(上):ONNX模型拆分
本文针对NPU不支持LOOP算子的问题,提出一种解决方案:将ONNX模型拆分为含LOOP算子和不含LOOP算子的子图,单独推理LOOP部分。通过构造包含LOOP算子的ONNX模型,将其转换为JSON格式提取子图,并对子图进行修改(如添加输入节点、删除无关节点)。最后,将JSON转回ONNX格式,完成模型切分与优化。此方法适用于关键路径上的LOOP算子,可有效解决离线推理中的兼容性问题。
292 26
|
移动开发 Java API
大疆无人机对接
本文介绍了大疆无人机对接第三方云平台的方案,包括设备对接和CloudAPI对接两种方式,重点讨论了CloudAPI对接。CloudAPI对接方案通过DJI Pilot 2或大疆机场将无人机与第三方云平台连接,实现低门槛接入,无需重复开发APP。方案优势在于让开发者更专注于业务开发,而非无人机功能适配。文章详细阐述了对接流程,包括环境准备、申请APPKey、对接流程、直播功能及获取无人机实时数据等内容,并提供了丰富的接口说明和技术支持资源。
6490 4
大疆无人机对接