骁龙神经处理引擎SDK参考指南(31)
8 工具
snpe-diagview
snpe-diagview 每当对输入张量数据进行操作时都会加载由 snpe-net-run 生成的 DiagLog 文件。DiagLog 文件包含每层的计时信息以及整个前向传播时间。如果运行使用输入张量的输入列表,则 snpe-diagview 报告的计时信息是整个输入集的平均值。
snpe-net-run 生成一个名为“SNPEDiag_0.log”、“SNPEDiag_1.log”…、“SNPEDiag_n.log”的文件,其中 n 对应于 snpe-net-run 执行的第 n 次迭代。
usage: snpe-diagview --input_log DIAG_LOG [-h] [--output CSV_FILE]
Reads a diagnostic log and output the contents to stdout
required arguments:
--input_log DIAG_LOG
Diagnostic log file (required)
optional arguments:
--output CSV_FILE
Output CSV file with all diagnostic data (optional)
snpe-dlc-info
snpe-dlc-info 从 DLC 文件输出层信息,该文件提供有关网络模型的信息。
usage: snpe-dlc-info [-h] -i INPUT_DLC [-s SAVE]
required arguments:
-i INPUT_DLC, --input_dlc INPUT_DLC
path to a DLC file
optional arguments:
-s SAVE, --save SAVE
Save the output to a csv file. Specify a target file path.
snpe-dlc-diff
snpe-dlc-diff 比较两个 DLC,并默认以表格格式输出其中的一些差异:
-
两个 DLC 之间的独特层
-
公共层参数差异
-
与公共层相关的缓冲区尺寸差异
-
公共层的权重差异
-
输出张量命名公共层中的差异
-
两个 DLC 之间的唯一记录(当前仅检查 AIP 记录)
usage: snpe-dlc-diff [-h] -i1 INPUT_DLC_ONE -i2 INPUT_DLC_TWO [-c] [-l] [-p] [-d] [-w] [-o] [-i] [-x] [-s SAVE] required arguments: -i1 INPUT_DLC_ONE, --input_dlc_one INPUT_DLC_ONE path to the first dl container archive -i2 INPUT_DLC_TWO, --input_dlc_two INPUT_DLC_TWO path to the second dl container archive optional arguments: -h, --help show this help message and exit -c, --copyrights compare copyrights between models -l, --layers compare unique layers between models -p, --parameters compare parameter differences between identically named layers -d, --dimensions compare dimension differences between identically named layers -w, --weights compare weight differences between identically named layers. -o, --outputs compare output_tensor name differences names between identically named layers -i, --diff_by_id Overrides the default comparison strategy for diffing 2 models components. By default comparison is made between identically named layers. With this option the models are ordered by id and diff is done in order as long as no more than 1 consecutive layers have different layer types. -x, --hta compare HTA records differences in Models -s SAVE, --save SAVE Save the output to a csv file. Specify a target file path.
snpe-dlc-viewer
snpe-dlc-viewer 在 Web 浏览器中可视化 DLC 的网络结构。
usage: snpe-dlc-viewer [-h] -i INPUT_DLC [-s]
required arguments:
-i INPUT_DLC, --input_dlc INPUT_DLC
Path to a DLC file
optional arguments:
-s, --save Save HTML file. Specify a file name and/or target save path
-h, --help Shows this help message and exits
额外细节:
DLC 查看器工具以 HTML 格式呈现指定的网络 DLC,可以在 Web 浏览器上查看。
在支持本机 Web 浏览器的安装中,会打开一个浏览器实例,在该实例上自动呈现网络。
用户可以选择将 HTML 内容保存在系统上的任何位置,并稍后在选定的 Web 浏览器上独立打开。
- 特征:
- 网络模型的基于图形的表示,其中节点描述层,边缘描述缓冲区连接。
- 彩色图例指示图层类型。
- 提供缩放和拖动选项以方便可视化。
- 鼠标悬停时的工具提示可描述详细的图层参数。
- 显示 DLC 记录中的元数据的部分 - 支持的浏览器:
- 谷歌浏览器
- 火狐浏览器
- Windows 上的 Internet Explorer
- Windows 上的 Microsoft Edge 浏览器
- Mac 上的 Safari
snpe-dlc-quantize
snpe-dlc-quantize 将非量化 DLC 模型转换为量化 DLC 模型。
命令行选项:
[ -h,--help ] 显示此帮助消息。
[ --version ] 显示版本信息。
[ --verbose ] 启用详细用户消息。
[ --quiet ] 禁用某些用户消息。
[ --silent ] 禁用除致命用户消息之外的所有消息。
[ --debug=<val> ] 设置调试日志级别。
[ --debug1 ] 启用级别 1 调试消息。
[ --debug2 ] 启用 2 级调试消息。
[ --debug3 ] 启用级别 3 调试消息。
[ --log-mask=<val> ] 设置调试日志掩码以设置一个或多个区域的日志级别。
示例:“.*=USER_ERROR、.*=INFO、NDK=DEBUG2、NCC=DEBUG3”
[ --log-file=<val> ] 覆盖调试日志文件的默认名称。
[ --log-dir=<val> ] 覆盖写入调试日志文件的默认目录路径。
[ --log-file-include-hostname ]
将此主机的名称附加到日志文件名。
[ --input_dlc=<val> ]
dlc 容器的路径,该容器包含应为其生成定点编码元
数据的模型。这个参数是必需的。
[ --input_list=<val> ]
指定试验输入的文件路径。该文件应该是纯文本文件,
每行包含一个或多个绝对文件路径。这些文件将被用来构成
试验集。每个路径都应指向一个二进制文件,其中包含一个
“原始”格式的试验输入,可供 SNPE 使用,无需任何进一步修改。
这类似于向 snpe-net-run 应用程序提供输入的方式。
[ --no_weight_quantization ]
生成并添加定点编码元数据,但保留
浮点权重。该参数是可选的。
[ --output_dlc=<值> ]
应写入包含元数据的量化模型容器的路径。
如果省略此参数,则量化模型将写入 <unquantized_model_name>_quantized.dlc。
[ --enable_htp ] 将 HTP 信息打包到量化的 DLC 中。
[ --htp_socs=<val> ] 指定为其生成 HTP 离线缓存的 SoC。
SoC 使用 ASIC 标识符指定,以逗号分隔列表形式。
例如, --htp_socs sm8550
[ --overwrite_cache_records ]
覆盖 DLC 中存在的 HTP 缓存记录。
[ --use_float_io ]
将 HTP 信息打包在量化的 DLC 中(注意:已弃用)。
[ --use_enhanced_quantizer ]
量化模型时使用增强的量化器功能。
常规量化使用正在量化的数据的最小值和最大值的实际值来确定范围。增强量化使用算法来确定最佳范围。它
对于量化在量化数据分布中具有长尾的模型非常有用。
[ --use_adjusted_weights_quantizer ]
使用调整后的 tf 量化器仅量化权重。这可能有助于提高某些模型的准确性,
例如正在测试的降噪模型。该选项仅在使用 8 位量化权重时使用。
[ --optimizations ] 使用此选项启用新的优化算法。用法是:
--optimizations <algo_name1> --optimizations <algo_name2>
可用的优化算法有:
cle - 跨层均衡包括多种跨层均衡权重和偏差的方法,以纠正导致量化误差的不平衡。
bc - 偏差校正调整偏差以抵消激活量化误差。通常与“cle”结合使用以提高量化精度(注意:已弃用)。
[ --override_params ]
当从原始源框架提供量化时(例如 TF 伪量化),使用此选项覆盖量化参数。
[ --use_encoding_optimizations ]
使用此选项启用量化编码优化。这可以减少图中的重新量化,并可能提高某些模型的准确性
(注意:可以传入此标志,但它是一个无操作。将来将删除对此标志的识别)。
[ --use_symmetry_quantize_weights ]
量化模型权重时使用对称量化器功能。它确保最小值和最大值具有
关于零的相同绝对值。对称量化数据也将存储为 int#_t 数据,使得偏移量始终为 0。
[ --bias_bitwidth=<val> ]
使用 --bias_bitdwith 选项选择量化偏差时要使用的位宽,可以是 8(默认) ) 或 32。使用 32 位偏差
有时可能会稍微提高精度。不能与--bitwidth 混合使用。
[ --act_bitwidth=<val> ]
使用 --act_bitwidth 选项选择量化激活时要使用的位宽,8(默认)或 16。
当前仅 HTA 支持 8w/16a。不能与--bitwidth 混合使用。
使用 --weights_bitwidth 选项选择量化权重时要使用的位宽,可以是 8(默认)或 16。
当前仅 HTA 支持 8w/16a。不能与--bitwidth 混合使用。
[ --bitwidth=<val> ]
使用 --bitwidth 选项选择量化权重/激活/偏差时要使用的位宽,8(默认)或 16。不能与
--weights_bitwidth 或 --act_bitwidth混合使用或--bias_bitdwith。
[ --udo_package_path=<val> ]
使用此选项指定 UDO 包的注册库的路径。用法是:
--udo_package_path=<path_to_reg_lib>
必须为具有 UDO 的网络指定此选项。网络中的所有 UDO 必须具有主机可执行的 CPU 实现
描述:
为浮点 SNPE 模型生成 8 或 16 位 TensorFlow 风格的定点权重和激活编码。
额外细节:
- 要指定 input_list,请参阅snpe-net-run中的input_list 参数以获取支持的输入格式(为了计算所有层的输出激活编码信息,不包括指定所需输出的行)。
- 该工具要求在原始模型转换步骤中将 DLC 输入文件的批量维度设置为 1。
- 使用 snpe-dlc-quantize 进行量化的示例可以在 C/C++ 教程部分:运行 Inception v3 模型 中找到。有关量化的详细信息,请参阅量化模型与非量化模型。
- 要在 HTA 上运行,必须使用 snpe-dlc-quantize。请参阅添加 HTA 部分。
- 要在 Snapdragon 865 上的 DSP 运行时上运行,必须使用 snpe-dlc-quantize。建议使用离线缓存生成。它是通过使用 snpe-dlc-quantize 的 –enable_htp 选项来指定的。
- 当对 HTP 使用离线缓存生成时,应在使用 snpe-dlc-quantize 时指定相同的输入张量或层以及输出张量或层,并使用 SNPE API 或 snpe-net- 在模型上运行推理。跑步。不这样做会导致缓存失效,并且图初始化会花费更长的时间。
- 可以通过按以下方式修改 input_list 来指定 snpe-dlc-quantize 的输出:
#<output_layer_name>[<space><output_layer_name>]
%<output_tensor_name>[<space><output_tensor_name>]
<input_layer_name>:=<input_layer_path>[<space><input_layer_name>:=<input_layer_path>]
…
**注意:**输出张量和层可以单独指定,但是在指定两者时,必须使用显示的顺序来指定每个张量和层。
- 使用 snpe-net-run 运行具有离线生成的缓存的模型时:
- 调用 snpe-dlc-quantize 时指定的任何输出层都需要使用输入列表来指定,如snpe-net-run的input_list 参数中所示。
- 调用 snpe-dlc-quantized 时指定的任何输出张量都需要使用snpe-net-run 的–set_output_tensors参数指定。请参阅snpe-net-run了解文档。 - 使用 SNPE API 时:
- 调用 snpe-dlc-quantize 时指定的任何输出层都需要使用 SNPEBuilder::setOutputLayers 函数指定。
- 调用 snpe-dlc-quantize 时指定的任何输出张量都需要使用 SNPEBuilder::setOutputTensors 函数指定。
snpe-dlc-quant
snpe-dlc-quant 将非量化 DLC 模型转换为量化 DLC 模型。
命令行选项:
[ -h,--help ] 显示此帮助消息。
[ --version ] 显示版本信息。
[ --verbose ] 启用详细用户消息。
[ --quiet ] 禁用某些用户消息。
[ --silent ] 禁用除致命用户消息之外的所有消息。
[ --debug=<val> ] 设置调试日志级别。
[ --debug1 ] 启用级别 1 调试消息。
[ --debug2 ] 启用 2 级调试消息。
[ --debug3 ] 启用级别 3 调试消息。
[ --log-mask=<val> ] 设置调试日志掩码以设置一个或多个区域的日志级别。
示例:“.*=USER_ERROR、.*=INFO、NDK=DEBUG2、NCC=DEBUG3”
[ --log-file=<val> ] 覆盖调试日志文件的默认名称。
[ --log-dir=<val> ] 覆盖写入调试日志文件的默认目录路径。
[ --log-file-include-hostname ]
将此主机的名称附加到日志文件名。
[ --input_dlc=<val> ]
dlc 容器的路径,该容器包含应为其生成定点编码元
数据的模型。这个参数是必需的。
[ --input_list=<val> ]
指定试验输入的文件路径。该文件应该是纯文本文件,
每行包含一个或多个绝对文件路径。这些文件将被用来构成
试验集。每个路径都应指向一个二进制文件,其中包含一个
“原始”格式的试验输入,可供 SNPE 使用,无需任何进一步修改。
这类似于向 snpe-net-run 应用程序提供输入的方式。
[ --no_weight_quantization ]
生成并添加定点编码元数据,但保留
浮点权重。该参数是可选的。
[ --output_dlc=<值> ]
应写入包含元数据的量化模型容器的路径。
如果省略此参数,则量化模型将写入 <unquantized_model_name>_quantized.dlc。
[ --use_enhanced_quantizer ]
量化模型时使用增强的量化器功能。
常规量化使用正在量化的数据的最小值和最大值的实际值来确定范围。增强量化使用算法来确定最佳范围。它
对于量化在量化数据分布中具有长尾的模型非常有用。
[ --use_adjusted_weights_quantizer ]
使用调整后的 tf 量化器仅量化权重。这可能有助于提高某些模型的准确性,
例如正在测试的降噪模型。该选项仅在使用 8 位量化权重时使用。
[ --optimizations ] 使用此选项启用新的优化算法。用法是:
--optimizations <algo_name1> --optimizations <algo_name2>
可用的优化算法有:
cle - 跨层均衡包括多种跨层均衡权重和偏差的方法,以纠正导致量化误差的不平衡。
[--override_params]
当从原始源框架提供量化时(例如 TF 伪量化),使用此选项覆盖量化参数
[ --use_encoding_optimizations ]
使用此选项启用量化编码优化。这可以减少图中的重新量化,并可能提高某些模型的准确性
(注意:已弃用)。
[ --use_symmetry_quantize_weights ]
量化模型权重时使用对称量化器功能。它确保最小值和最大值具有
相同的关于零的绝对值。对称量化的数据也将存储为 int#_t 数据,使得偏移量始终为 0。
[ --bias_bitwidth=<val> ]
使用 --bias_bitdwith 选项选择量化偏差时要使用的位宽,可以是 8(默认)或 32。使用 32 位偏差
有时可能会稍微提高准确性。不能与--bitwidth 混合使用。
[ --act_bitwidth=<val> ]
使用 --act_bitwidth 选项选择量化激活时要使用的位宽,8(默认)或 16。
当前仅 HTA 支持 8w/16a。不能与--bitwidth 混合使用。
[ --weights_bitwidth=<val> ]
使用 --weights_bitwidth 选项选择量化权重时要使用的位宽,可以是 8(默认)或 16。
当前仅 HTA 支持 8w/16a。不能与--bitwidth 混合使用。
[ --bitwidth=<val> ]
使用 --bitwidth 选项选择量化权重/激活/偏差时要使用的位宽,8(默认)或 16。不能与
--weights_bitwidth 或 --act_bitwidth混合使用或--bias_bitdwith。
[ --udo_package_path=<val> ]
使用此选项指定 UDO 包的注册库的路径。用法是:
--udo_package_path=<path_to_reg_lib>
必须为具有 UDO 的网络指定此选项。网络中的所有 UDO 必须具有主机可执行的 CPU 实现
描述:
为浮点 SNPE 模型生成 8 或 16 位 TensorFlow 风格的定点权重和激活编码。
额外细节:
- 要指定 input_list,请参阅snpe-net-run中的input_list 参数以获取支持的输入格式(为了计算所有层的输出激活编码信息,不包括指定所需输出的行)。
- 该工具要求在原始模型转换步骤中将 DLC 输入文件的批量维度设置为 1。
- 使用 snpe-dlc-quant 进行量化的示例可以在 C/C++ 教程部分:运行 Inception v3 模型 中找到。有关量化的详细信息,请参阅量化模型与非量化模型。
- 可以通过按以下方式修改 input_list 来指定 snpe-dlc-quant 的输出:
#<output_layer_name>[<space><output_layer_name>]
%<output_tensor_name>[<space><output_tensor_name>]
<input_layer_name>:=<input_layer_path>[<space><input_layer_name>:=<input_layer_path>]
…
**注意:**输出张量和层可以单独指定,但是在指定两者时,必须使用显示的顺序来指定每个张量和层。
- 使用 SNPE API 时:
- 调用 snpe-dlc-quant 时指定的任何输出层都需要使用 SNPEBuilder::setOutputLayers 函数指定。
- 调用 snpe-dlc-quant 时指定的任何输出张量都需要使用 SNPEBuilder::setOutputTensors 函数指定。
snpe-dlc-graph-prepare
snpe-dlc-graph-prepare 用于对量化 dlc 执行离线图形准备,以在 DSP/HTP 运行时上运行。
命令行选项:
[ -h, --help ]
显示此帮助消息。
[ --version ]
显示版本信息。
[ --verbose ]
启用详细用户消息。
[ --quiet ]
禁用某些用户消息。
[ --silent ]
禁用除致命用户消息之外的所有消息。
[ --debug=<val> ]
设置调试日志级别。
[ --debug1 ]
启用级别 1 调试消息。
[--debug2]
启用 2 级调试消息。
[ --debug3 ]
启用级别 3 调试消息。
[ --log-mask=<val> ]
设置调试日志掩码以设置一个或多个区域的日志级别。
示例:“.*=USER_ERROR, .*=INFO, NDK=DEBUG2, NCC=DEBUG3”
[ --log-file=<val> ]
覆盖调试日志文件的默认名称。
[ --log-dir=<val> ]
覆盖写入调试日志文件的默认目录路径。
[ --log-file-include-hostname ]
将此主机的名称附加到日志文件名中。
[ --input_dlc ]
包含应为其生成图形缓存的模型的 dlc 容器的路径。这个参数是必需的。
[ --output_dlc ]
包含模型容器的缓存数据应写入的路径。如果省略此参数,则量化模型将写入
InputModelName_cached.dlc。
[ --set_output_tensors ]
指定执行后要输出的逗号分隔的张量列表,不带空格。
[ --set_output_layers ]
指定以逗号分隔的层列表,其输出缓冲区应在执行后输出,不带空格。
[ --input_list ]
指定试验输入的文件路径。该文件应该是纯文本文件,每行包含一个或多个绝对文件路径。这些文件
将被用来构成试验集。每个路径都应指向一个二进制文件,其中包含一个“原始”格式的试验输入,可供
SNPE 使用,无需任何进一步修改。这类似于向 snpe-net-run 应用程序提供输入的方式。
[ --htp_socs ]
指定要为其生成 HTP 离线缓存的 SoC。SoC 使用 ASIC 标识符指定
,以逗号分隔的列表形式,不带空格。例如
--htp_socs sm8350、sm8450、sm8550。该标志和 --htp_archs 是互斥的
[ --htp_archs ]
指定为其生成通用 HTP 离线缓存的 DSP 架构。
架构用 ASIC 标识符指定,以逗号分隔的列表形式,
不带空格。例如,--htp_archs v68,v73。该标志不能
与 --htp_socs 或 --vtcm_override 结合使用
[ --vtcm_override ]
指定一个值,表示生成的 HTP 离线缓存的 VTCM 大小(以 MB 为单位)。
例如,--vtcm_override 4。此标志可与--htp_socs 结合使用以
覆盖默认的 SOC vtcm 大小设置
[ --buffer_data_type ]
在准备期间设置 IO 缓冲区的数据类型。数据类型可以是以下类型:
float32、fixedPoint8、fixedPoint16。参数的格式应如下:
--buffer_data_type buffer_name1=buffer_name1_data_type
--buffer_data_type buffer_name2=buffer_name2_data_type
(注意:已弃用)
[ --overwrite_cache_records ]
在生成请求的缓存之前擦除 DLC 中存在的所有 HTP 缓存记录
[ --use_float_io ]
准备量化 HTP 图形以使用浮点输入进行操作/outputs (注意:已弃用)
[ --udo_package_path ]
使用此选项指定 UDO 包的注册库的路径。用法是:
--udo_package_path=<path_to_reg_lib>
(可选)用户可以提供多个包作为逗号分隔列表。
必须为具有 UDO 的网络指定此选项。网络中的所有 UDO 必须具有主机可执行 CPU 实现