AWNN 工具链使用指南
本文档描述了 AWNN 工具链的功能与使用方法,面向零基础用户介绍如何操作工具链,在 PC 上完成模型转换及板端结果验证等功能,旨在协助技术支持工程师、AI 软件开发工程师和 AI 算法开发工程师快速上手 AWNN 工具链的使用。
概述
AWNN 工具链用来帮助用户将深度学习模型部署在 Allwinner 芯片上。为了调用 NPU 资源,用户需要使 用 AWNN 工具链提供的离线工具,将模型转换成 AWNN 支持的模型文件,并使用 AWNN Runtime 库来完成开发板上的板端部署。

工具链包含以下功能模块:
| 功能模块 | 具体描述 |
|---|---|
| build | 完成模型优化、量化等操作,生成可供 NPU 使用的模型文件 |
| profile | 帮助用户完成模型量化后的精度分析 |
| simulate | 用于模型仿真,可以脱离板端获取目标模型的推理仿真结果 |
| encrypt | 为用户提供基础的模型加密功能 |
| generate_config_file | 基于用户提供的模型为用户生成配置文件模板 |
所有功能指令以 awnntools 开头,对应命令为 awnntools build、awnntools profile、awnntools simulate、awnntools encrypt 以及 awnntools generate_config_file。
root@xxx:/data# awnntools -h
usage: awnntools [-h] [-v] {convert,build,profile,simulate,encrypt,generate_config_file} ...
AWNNToolKits: The offline tools for Neural Network quantization and optimization.
positional arguments:
{convert,build,profile,simulate,encrypt,generate_config_file}
convert convert your model to ncnn format
build compiling the model for execution on NPU devices.
profile get profile information
simulate get simulate results
encrypt encrypt model files
generate_config_file
generate the required configuration file template based on the provided ONNX model
optional arguments:
-h, --help show this help message and exit
-v, --version show version
此外,AWNN 还提供了板端推理验证工具 awnn_verify,用于在开发板上执行模型推理并与仿真结果进行比对。
快速入门
本节以 yolov5s 模型为例,演示从 PC 端模型转换到板端部署验证的完整流程,帮助用户快速上手 AWNN 工具链。
准备资源
- 模型
目前工具仅支持 ONNX 模型转化,本节基于 $(V861-SDK)/platform/allwinner/vision/awnn_sdk 中的 yolov5s 示例进行说明,模型位置 awnn_sdk/toolkits/example/yolov5s,我们将其拷贝到创建的 awnn_workspace 中。
📷 原文图片缺失:
figures/2026-06-09 15-34-26.png
其中的 models/yolov5s.onnx 为标准的 ONNX 模型文件。如开发者使用其他深度学习框架,请先将其模型转换至 ONNX 格式。
- 校准文件
images/* 目录存放用于模型量化(Quantization)校准图像数据集。
📷 原文图片缺失:
figures/2026-06-09 15-35-10.png
- yml 文件
yolov5_config.yml 定义了模型构建、性能剖析与仿真所需的全部参数。建议开发者首先使用 awnntools 生成一个标准配置模板,然后基于该模板根据您的具体需求进行修改。
执行命令:
awnntools generate_config_file configs/config.yml models/yolov5s.onnx
generate_config_file:子命令,功能是生成一个配置文件模板configs/config.yml:指定生成的配置文件的保存路径和文件名models/yolov5s.onnx:指定源模型文件(此处为 yolov5s 的 ONNX 格式)的路径
Loading asciinema cast...
PC 端模型转换
执行编译
执行 awnntools build 命令来完成模型的编译。
awnntools build configs/yolov5_config.yml
build:子命令,功能是将配置文件描述的模型编译成 NPU 可执行文件configs/yolov5_config.yml:指定编译所需的配置文件
Loading asciinema cast...
精度分析
执行 awnntools profile 命令对比量化模型与浮点模型的精度。
awnntools profile configs/yolov5_config.yml --log-file ./output/yolov5s.csv
profile:子命令,功能是对配置文件描述的模型进行 profile 分析configs/yolov5_config.yml:指定 profile 所需的配置文件--log-file:指定保存 profile 信息的文件
Loading asciinema cast...
执行仿真
执行 awnntools simulate 命令完成模型仿真,利用仿真数据核验板端推理结果。
awnntools simulate configs/yolov5_config.yml
simulate:子命令,功能是对配置文件描述的模型进行仿真configs/yolov5_config.yml:指定仿真所需的配置文件
Loading asciinema cast...
仿真结束后,推理的结果保存在 results 目录下。
板端快速部署
编译推理工具
执行 make menuconfig,选中 awnn 中间件配置以及验证工具,重新编译 SDK 生成 awnn_verify 工具。
OpenWrt Configuration
Allwinner --->
Vision --->
<*> awnn_runtime....................... Allwinner NPU (AWNN) runtime librarys
<*> awnn_verify........................................... awnn verify toools
awnn_runtime:NPU 运行相关的中间件awnn_verify:模型板端推理工具
将推理文件推送至板端
将 yolov5s 仿真结果推送到板端设备中,包含的文件及目录格式如下:
~/awnn_sdk/toolkits/example/yolov5s-ver$ tree
.
├── models
│ ├── yolov5s_ipu.bin
│ └── yolov5s_ipu.param
└── results
└── images_dog.jpg
├── config.txt
├── images_fp32.bin
├── images_int8.bin
├── _model.24_Reshape_1_output_0_fp32.bin
├── _model.24_Reshape_1_output_0.npy
├── _model.24_Reshape_2_output_0_fp32.bin
├── _model.24_Reshape_2_output_0.npy
├── _model.24_Reshape_output_0_fp32.bin
└── _model.24_Reshape_output_0.npy
3 directories, 11 files
板端执行推理
root@(none):/tmp/awnn/yolov5s-ver# awnn_verify results/images_dog.jpg/config.txt
查看推理信息
运行的 log 信息示例:
AWNN SDK Version: 1.0.8
finish setting outputPrefix.
finish creating AWNNInstance.
finish setting input buffer.
finish setting input information.
finish setting output information.
======>finish assigning blob memory offset!
finish precompiler.
finish loading input bin.
finish setInTensors.
-----------------------caseNet inference 0-----------------------
NPU Layer NETQUEUE subnet[0] | Write BW: 91.26 MBps | Read BW: 212.68 MBps | Time: 34.22 ms |
MIX Layer LayoutConvert BUFFER2HOST | Write BW: 65.41 MBps | Read BW: 43.63 MBps | Time: 28.07 ms |
CPU Layer Reshape /model.24/Reshape | Write BW: 816000.06 MBps | Read BW: 816000.06 MBps | Time: 0.01 ms |
NPU Layer NETQUEUE subnet[1] | Write BW: 67.45 MBps | Read BW: 199.28 MBps | Time: 3.42 ms |
MIX Layer LayoutConvert BUFFER2HOST | Write BW: 65.93 MBps | Read BW: 43.98 MBps | Time: 6.96 ms |
CPU Layer Reshape /model.24/Reshape_1 | Write BW: 108800.00 MBps | Read BW: 108800.00 MBps | Time: 0.01 ms |
NPU Layer NETQUEUE subnet[2] | Write BW: 26.38 MBps | Read BW: 255.38 MBps | Time: 3.88 ms |
MIX Layer LayoutConvert BUFFER2HOST | Write BW: 69.34 MBps | Read BW: 46.25 MBps | Time: 1.66 ms |
CPU Layer Reshape /model.24/Reshape_2 | Write BW: 58285.72 MBps | Read BW: 58285.72 MBps | Time: 0.01 ms |
finish inference.
outputNames[0] = /model.24/Reshape_output_0, [w, h, d, c] = [80, 80, 85, 3], size = 1632000
outputNames[1] = /model.24/Reshape_1_output_0, [w, h, d, c] = [40, 40, 85, 3], size = 408000
outputNames[2] = /model.24/Reshape_2_output_0, [w, h, d, c] = [20, 20, 85, 3], size = 102000
finish getting output tensor dim info.
finish getOutTensors.
results/images_dog.jpg/_model.24_Reshape_output_0_fp32.bin: test success ^_^ ^_^ ^_^
count success num: 1632000, count fail num: 0
results/images_dog.jpg/_model.24_Reshape_1_output_0_fp32.bin: test success ^_^ ^_^ ^_^
count success num: 408000, count fail num: 0
results/images_dog.jpg/_model.24_Reshape_2_output_0_fp32.bin: test success ^_^ ^_^ ^_^
count success num: 102000, count fail num: 0
yolov5s: min = 89.45 max = 89.45 avg = 89.45
AWNN Memory Statistics: blobMemorySize=15.2039MB, weightMemorySize=6.9608MB, queueMemorySize=0.7748MB, npuMemorySize=22.9395MB
模型运行耗时
- min、max、avg 的值表示模型在 NPU 上单次推理的完整处理耗时。由于测试时
loop_count设为 1(即仅运行一次),因此示例中最小值、最大值与平均值相同。在实际多轮测试中,这三个数值将分别反映最快、最慢和平均推理时间。
内存占用统计
blobMemorySize:存储网络中间特征图(feature maps)所需的内存空间weightMemorySize:存储模型权重(weights)参数所需的内存空间npuMemorySize:NPU 运行该模型所需的总内存(前三项之和)
配置文件
配置文件(config.yml)是 AWNN 工具链的核心,所有功能(build、profile、simulate、encrypt)都依赖它来指定模型路径、数据集、量化参数等。本章介绍配置文件的生成方法和各参数的含义。
提示
建议先使用 generate_config_file 生成模板,再根据实际需求修改。详细参数表见 附录:config.yml 完整参数参考。
:::
生成配置文件模板
使用 generate_config_file 功能,根据用户提供的模型生成对应的配置文件模板。工具会根据模型信息生成输入模型的建议存放路径,以及输入输出 tensor 的名称和 shape 信息。
root@xxx:/data# awnntools generate_config_file -h
usage: awnntools generate_config_file [-h] config model_path
positional arguments:
config generated config file path
model_path input onnx model path
optional arguments:
-h, --help show this help message and exit
以 ResNet18 为例:
root@xxx:/data$ awnntools generate_config_file resnet18_config.yml ${model_path}/resnet18.onnx
注意
用户获取的配置文件模板只是一个参考模板,用户必须仔细核对各项配置,不能直接拿来当作最终的配置文件使用。
:::
备注
general_conf下的model_path和model_names会根据输入 ONNX 模型的路径生成。用户也可根据自己的需要来自行配置模型路径信息。dataset_conf中,preprocess_conf默认为列表,列表中的数目依赖于工具读取到的 ONNX 模型信息,其中各个列表元素中的name和shape会根据输入的 ONNX 模型读取生成。用户也可根据自己的判断以及模型实际情况来自行配置输入信息。tensor_layout默认设置为NCHW。- 如果工具判断输入模型为多输入模型,工具会指定
dataset_conf中的type为DATASET_TYPE_JSON。 - 工具依赖于输入 ONNX 的信息来给出基础的配置信息,如果出现与用户预期(或者可视化软件呈现)不一致的情况,首先需要用户自行确认 ONNX 模型的详细信息,如果 ONNX 模型存储信息确实与预期不一致,则需要用户自行修改 ONNX 模型,如果确认为工具解析问题,请反馈给工具开发人员。
- 用户导出 ONNX 模型前,请参考 NPU 硬件算子支持列表,酌情将包含不支持算子的部分不导出或者导出后自行裁剪(工具提供了一定程度的模型裁剪功能,该功能参考 模型子图切分),一般来讲,对于用户模型部署所需的后处理操作,基于模型部署效率的考量,我们建议用户自行实现。
- 建议用户导出 ONNX 模型时,指定 opset=11。optset 不等于 11 时(尤其是低于 11 时),如果遇到转换出错的问题,可以尝试重新导出 ONNX 模型,并指定 opset=11。
:::
general_conf
general_conf 用于配置模型的通用信息,该类信息可以用于工具的不同子功能的使用。
| 参数 | 说明 | 类型 |
|---|---|---|
model_type | 输入模型的类型。build 功能使用时可配置为 onnx,其余功能工具会强制使用 ncnn | string |
model_path | 输入模型文件的路径。使用相对路径时,应为相对于当前工作目录的路径 | string |
model_names | 输入模型的名称。ncnn 时需两个值(.param + .bin),onnx 时仅需一个 .onnx 值 | string list |
output | 输出文件存放路径 | string |
dataset_conf
dataset_conf 用于构建数据集的参数管理,被 build、profile、simulate 等多个功能共用。
数据集管理类型:
| 类型 | 说明 |
|---|---|
DATASET_TYPE_TXT | 通过用户给定的 txt 文件来管理校准数据集,一行作为一组输入 |
DATASET_TYPE_PATH | 工具自动分析用户给定路径下的图片格式文件(jpg、png、JPEG、bmp),全部作为校准数据 |
DATASET_TYPE_JSON | 适配多输入模型的校准数据,数据集须为字典的列表,每个元素包含输入名称和数据路径 |
数据集配置参数:
| 参数 | 说明 | 类型 |
|---|---|---|
type | 数据集的管理类型 | string |
path | 数据集的路径或者数据集管理文件(TXT 或 JSON)的路径 | string |
preprocess_conf | 校准数据集的预处理操作配置(见下表) | list |
preprocess_conf 预处理参数:
| 参数 | 说明 | 类型 |
|---|---|---|
name | 输入 tensor 的名称 | string |
color_space | 图片的颜色空间,支持 RGB、BGR、RGBA、BGRA 和 GRAY | string |
mean | 数据预处理使用的均值,列表长度与通道数一致 | float list |
norm | 数据预处理使用的归一化系数,列表长度与通道数一致 | float list |
tensor_layout | 输入数据的张量布局,支持 NHWC、NCHW、HWC 和 CHW | string |
shape | 输入数据的形状,需与 tensor_layout 吻合(如 NCHW 对应 [N, C, H, W]) | int list |
备注
参数 color_space、mean、norm 只对图片格式的输入数据有效,对于 npy 数据不生效,且 npy 格式的数据的 shape 信息以及 tensor_layout 与参数配置值要保持一致。
:::
build_conf
build_conf 用于配置模型 build 阶段的参数信息。
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
build_mode | 模型构建模式。auto:默认全流程;quantize:混合精度量化;prefabricated:自定义量化校准表 | string | auto |
export_type | 模型导出模式,目前仅支持 standard | string | standard |
debug_enable | 是否开启 debug 模式,false 时不输出调试信息 | bool | true |
enable_onnxsim | 是否使用 onnxsim 来简化 onnx 模型 | bool | true |
save_temporary_model | 是否存储临时模型数据 | bool | false |
use_npu_preprocess | 是否使用 NPU 进行图像预处理 | bool | false |
opt_level | 优化等级。0:不优化;1:开启硬件相关优化 | int | 1 |
calibration_engine | 校准引擎,目前仅支持 default | string | default |
cutstartname | 模型裁剪后的输入节点名称(用于子图切分) | string list | - |
cutendname | 模型裁剪后的输出节点名称(用于子图切分) | string list | - |
quantize_conf 量化参数:
| 参数 | 说明 | 可选值 |
|---|---|---|
calibration_algorithm | 量化校准算法 | minmax、kl、percentile(推荐) |
hybrid_quantization_conf 混合精度量化参数:
| 参数 | 说明 | 类型 |
|---|---|---|
white_list | 算子白名单,名单内的算子将取消量化,使用浮点精度推理 | string list |
op_type_white_list | 算子类型白名单,该类型算子将取消量化, 使用浮点精度推理 | string list |
profile_conf
profile_conf 用于配置模型 profile 阶段的参数信息。
| 参数 | 说明 | 类型 |
|---|---|---|
gt_model_names | 转换后的浮点模型文件名列表。不指定时根据 general_conf 推断 | string list |
quantized_model_names | 量化后的模型文件名列表(_ipu 后缀) | string list |
dataset_conf | 数据集配置,参照 dataset_conf | - |
evaluation_conf | 评估指标配置(见下表) | - |
evaluation_conf 评估参数:
| 参数 | 说明 | 可选值 |
|---|---|---|
sort_flag | 排序使能 | bool |
analysis_conf | 精度评估度量维度 | layer_wise、graph_wise |
measure_method | 精度评估度量方法 | snr、mse、cos-similarity |
simulate_conf
simulate_conf 用于配置模型 simulate 阶段的参数信息。
| 参数 | 说明 | 类型 |
|---|---|---|
model_names | 输入模型文件名称(目前仅支持 ncnn 模型及本工具量化后的模型) | string list |
monitor_blobs | 仿真导出 blob 的名称,建议按网络中的调用顺序指定 | string list |
dump_path | 导出数据存放路径 | string |
dataset_conf | 数据集配置,参照 dataset_conf | - |
encrypt_conf
encrypt_conf 用于配置模型 encrypt 阶段的参数信息。
| 参数 | 说明 | 类型 |
|---|---|---|
model_names | 需要加密的模型文件名称 | string list |
output | 加密后的模型文件的存放路径 | string |
模型编译(build)
本章介绍如何使用 awnntools build 将 ONNX 模型转换为 NPU 可执行的格式,以及相关的进阶配置(子图切分、混合精度量化)。
基本用法
AWNN 工具链支持 ONNX(Open Neural Network Exchange) 作为输入模型的中间表示来完成模型转换量化。用户可以通过深度学习框架(TensorFlow、PyTorch、MXNet)的 ONNX 格式文件的导出接口来生成 ONNX 格式模型文件。
用户需要正确配置 config.yml 中的 general_conf 和 build_conf,然后使用 awnntools build 编译生成 NPU 支持的格式文件。
root@xxx:/data$ awnntools build -h
usage: awnntools build [-h] [--build_mode {auto,quantize,encrypt}] [--model_type {onnx,ncnn}] [--model_path MODEL_PATH] [--model_names MODEL_NAMES [MODEL_NAMES ...]] [--output OUTPUT] config
positional arguments:
config deploy config path
optional arguments:
-h, --help show this help message and exit
--build_mode {auto,quantize,encrypt}
set compile mode, quantize mode is for hybrid_quantization
--model_type {onnx,ncnn} input model type
--model_path MODEL_PATH
input model path
--model_names MODEL_NAMES [MODEL_NAMES ...]
input model names
--output OUTPUT
output path
用户也可以通过命令行赋值的方式来配置个别参数(如 build_mode、model_type、model_path、model_names、output),命令行传入的参数将覆盖 config 文件中的配置。
模型转换运行示例:
root@xxx:/data$ awnntools build config.yml
转换结束后,用户会在模型所在的目录下或者用户配置的 output 目录下生成一系列的文件:
root@xxx:/data$ tree
.
├── resnet18.bin # 从 onnx 模型转换得到的 ncnn 模型权重文件
├── resnet18.param # 从 onnx 模型转换得到的 ncnn 模型结构文件
├── resnet18.table # 使用 PTQ 校准算法得到的校准表
├── resnet18_ipu.bin # 量化后的模型权重文件
├── resnet18_ipu.param # 量化后的模型结构文件
├── resnet18_opt.bin # 优化后的模型权重文件
├── resnet18_opt.param # 优化后的模型结构文件
└── resnet18_opt.table # 优化后的得到的校准表
0 directories, 8 files
其中,后缀含 _ipu 的文件为板端可运行的模型文件。
模型子图切分
如果模型中存在 AWNN 工具链不支持的算子(如 TopK、NonMaxSuppression、Less 等后处理算子),导致转换报错,或者后处理使用工 具链导出效率不如用户自己实现,可以通过模型裁剪功能将图的后处理子图部分或前处理部分移除。
模型裁剪通过 config 文件中的 cutstartname 和 cutendname 参数进行:
cutstartname:指定裁剪后的输入节点名称cutendname:指定裁剪后的输出节点名称- 不配置时将使用原有的输入输出节点名称
build_conf:
cutstartname:
- 'input_0' # 输入节点名称
cutendname:
- 'output_0' # 输出节点名称
- 'output_1' # 输出节点名称
备注
用户如果要配置 cutstartname,一定要将裁剪后的新模型所有输入节点的名称全部配置进去。
:::
混合精度量化
AWNN 工具链支持混合精度量化,可以对指定算子或者某一类算子设置量化精度。对于精度损失较大的算子,可以指定其解除量化,使用 CPU 进行浮点运算。
配置方法:设置 build_conf 中的 build_mode 为 quantize(或继续使用 auto),然后配置 hybrid_quantization_conf:
white_list:将需要使用 CPU 浮点计算的算子名称添加进去op_type_white_list:将需要浮点计算的某类算子添加进去
build_conf:
build_mode: quantize
export_type: standard
debug_enable: True
opt_level: 1
hybrid_quantization_conf:
op_type_white_list:
- HardSigmoid
- HardSwish
white_list:
- /fc/Gemm
注意
使用 CPU 进行浮点运算会带来运行耗时的增加,请谨慎选择需要解除量化的算子。
:::
精度分析(profile)
本章介绍如何使用 awnntools profile 进行量化精度分析,包括分析维度、评估指标和精度问题排查流程。
基本用法
模型转换完成后,用户可以使用 profile 功能来完成模型的量化精度分析。
root@xxx:/data# awnntools profile -h
usage: awnntools profile [-h] [--model_type {onnx,ncnn}] [--model_path MODEL_PATH] [--model_names MODEL_NAMES [MODEL_NAMES ...]] [--quantized_model_names QUANTIZED_MODEL_NAMES [QUANTIZED_MODEL_NAMES ...]] [--log-file LOG_FILE] config
positional arguments:
config deploy config path
optional arguments:
-h, --help show this help message and exit
--model_type {onnx,ncnn} input model type
--model_path MODEL_PATH
input model path
--model_names MODEL_NAMES [MODEL_NAMES ...]
gt model names
--quantized_model_names QUANTIZED_MODEL_NAMES [QUANTIZED_MODEL_NAMES ...]
quantized model names
--log-file LOG_FILE log file path, endswith .csv
可选参数 log_file 用于保存工具运行过程中的 log 信息以及最终的精度分析结果,后缀须为 .csv,方便使用表格文件查看。
模型精度分析运行示例:
root@xxx:/data$ awnntools profile config.yml
以 resnet18 模型为例,profile 之后存储的 log 信息如下: