Qualcomm Cloud AI SDK 用户指南(9)
2.3 在生产管道中执行、集成和部署
本节将介绍开发人员在云 AI 平台上执行推理的不同方式(CLI、C++、Python 等)以及可集成到推理应用程序并部署在生产管道中的所有工具/实用程序。
2.3.1 模型执行
Qualcomm Cloud AI 100 设备上有 4 种调用推理的方法。
- 命令行接口
qaic-runner是一个 CLI(命令行推理)工具,旨在使用预编译的二进制文件(也称为 QPC(Qaic 程序容器)二进制文件)在设备上运行推理。它提供了各种选项和功能来促进推理和性能/基准分析。在本文档中,我们将讨论工具中可用的不同选项qaic-runner、它们的默认值并提供它们的使用示例。
选项和默认值
范围 | 描述 | 默认 |
---|---|---|
-d, --aic-device-id | 指定 AIC 设备 ID。 | 0 |
-D, --dev-list [:] | 多设备网络的设备 ID 映射。 | 0[:1] |
-d, --aic-device-id | AIC设备ID,默认自动拾取 | 0 |
-D, --aic-device-map [:] | 多设备网络的设备 ID 映射, | 0[:1] |
-t, --test-data
| 程序二进制文件的位置 | |
-i, --input-file
| 要从中加载输入数据的输入文件名。为每个输入文件指定多次。如果未给出 -i,则在 -t 目录下的 bindings.json 中查找可用输入。如果绑定.json 不可用,将生成随机输入。 | |
-n, --num-iter | 迭代次数, | 40 |
–time | 提交推论的持续时间(以秒为单位) | |
-l, --live-reporting | 启用以 1 秒为间隔的定期实时报告 | 离开 |
-r, --live-reporting-period | 在女士中设置实时报告时间 | 1000 |
-s --stats | 以 1 秒的间隔定期启用实时分析统计报告 | |
-a, --aic-num-of-activations | 激活次数 | 1 |
–aic-profiling-start-iter | 分析开始迭代 | 0 |
–aic-profiling-start-delay | 分析开始延迟(以毫秒为单位)。分析将在给定的延迟期过后开始 | |
–aic-profiling-num-samples | 分析要保存到文件的样本数 | 1 |
–aic-profiling-format | 已弃用 | DEF |
–aic-profiling-type | 分析类型,‘stats’|‘trace’|‘latency’用于遗留分析和’trace_stream’ | 'latency_stream’流分析。多次设置多种格式 | 没有任何 |
–aic-profiling-duration | 运行分析的分析持续时间(以毫秒为单位)。开始分析后,分析持续时间结束后将停止 | |
–aic-profiling-sampling-rate | 分析采样率 [ full/half/fourth/eighth/sixteenth]。程序将以请求的速率生成分析样本。要分析所有样本,请选择完整,对于每隔一个样本,请选择一半,依此类推 | 满的 |
–aic-profiling-reporting-rate | 分析报告生成率(以毫秒为单位)[ 500/1000/2000/4000]。将在分析持续时间内按照请求的时间间隔生成分析报告 | 500 |
–aic-profiling-out-dir
| 保存文件的位置,dir应该存在并且可写 | ‘.’ |
–write-output-start-iter | 写入输出开始迭代 | 0 |
–write-output-num-samples | 要写入的输出数量 | 1 |
–write-output-dir
| 保存输出文件的位置,dir应该存在并且可写 | ‘.’ |
–aic-lib-path DEPRECATED | 已弃用,请将环境变量 QAIC_LIB 设置为自定义库的完整路径,默认从安装位置加载 libQAic.so | |
–aic-batch-input-directory | 批处理模式:处理输入目录中的所有文件。目前仅支持具有单个输入文件的网络 | DEF |
–aic-batch-input-file-list | 批处理模式:指定包含逗号分隔的缓冲区绝对路径的输入文件。每行是 1 个推理,并且必须具有程序所需的缓冲区数量和大小 | DEF |
–aic-batch-max-memory | 批处理模式:加载文件时限制内存使用,提供以 Mb 为单位的参数 | 1024 |
–submit-timeout | 等待内核上的推理请求完成的时间。默认 0 毫秒。当为0时,内核默认为5000ms | |
–submit-retry-count | 推理请求超时时等待调用重试的次数。 | 5 |
–unbound-random | 在缓冲区中填充随机值时,不要考虑输入缓冲区格式并使用 0 到 255 之间的随机输入填充每个字节。这可能会导致某些网络出现意外行为。 | |
–dump-input-buffers | 转储基准测试模式中使用的输入缓冲区 | |
-S, --set-size | 设置推理循环执行的大小,最小值:1 | 10 |
-T, --aic-threads-per-queue | 每个队列的线程数 | 4 |
–auto-batch-input | 自动批量输入,满足网络批量要求。输入的批量大小应为 1 | 1 |
-p, --pre-post-processing | 前后处理[ on|off] 在 | |
-v, --verbose | 程序的详细日志 | |
-h, --help | 帮助 |
使用示例
- 使用随机输入运行推理
例子:
sudo /opt/qti-aic/exec/qaic-runner -t /path/to/qpc -a 3 -n 5000 -d 0 -v
- 在此示例中,我们使用已生成的预编译二进制文件。
- 3 个激活 - 这里的激活是指您想要在设备上运行的网络实例的数量。在这种情况下,网络的 3 个副本可以在设备上并行运行。
- 假设每个网络都是用 4 个核心编译的(在此命令的输出中sudo /opt/qti-aic/tools/qaic-qpc validate -i /path/to/qpc/programqpc.bin查找Number of NSP required值。)
- 确保您使用的设备至少有 12 个空闲核心,即 3x4 核心。
- 由于未提供输入,我们将随机生成的输入(具有从 qpc 推断出的适当尺寸和类型)提供给设备。
- 这个随机生成的输入用于 5000 次推理。
- 在设备 ID 上0。使用 CLI 工具检查您的设备 ID /opt/qti-aic/tools/qaic-util -q,查找其中的 QID 值。
- 使用-v选项启用详细日志。
- 此配置中的工具可用于测量性能。
对一组输入运行推理
在运行推理之前,需要根据输入大小和类型将输入转换为适当的格式。看看这个 Jupyter 笔记本示例
- 生成延迟捕获转储
- aic-profiling-format latency
- aic-profiling-out-dir:延迟捕获的输出目录(运行此命令之前需要存在)
- aic-profiling-start-iter:将此值设置得足够高,以便在设备预热后开始捕获样本
- aic-profiling-num-samples:要捕获的样本数。可以设置大于推理数
生成延迟统计信息的示例命令
!/opt/qti-aic/exec/qaic-runner -t ./BERT_LARGE -a 8 -S 1 -d 0 \ #-i inputFiles/input.raw \
--aic-profiling-format latency --aic-profiling-out-dir ./BERT_LARGE_STATS \
--aic-profiling-start-iter 100 --aic-profiling-num-samples 99999 --time 20
看看这个 Jupyter 笔记本示例
结论
qaic-runnerCLI 工具主要用于性能测试目的。对于实际的推理任务,建议使用 Python 或 C++ API,具体取决于您首选的技术堆栈。
2.使用Python API
参考Python API
3.使用C++ API
参考C++ API
4.使用Onnxrt
使用Qualcomm Cloud AI 100 作为 onnxrt 中的执行提供程序。
2.3.2 推理分析 - Cloud AI 100
推理分析
Cloud AI支持系统级和设备级分析,帮助开发人员识别性能瓶颈。无需对 QPC 进行任何更改即可执行系统分析,而设备分析则需要重新编译模型。
系统级分析
系统级分析包括应用程序、Linux 运行时、内核模式驱动程序和设备处理之间的推理时间细分。这可以深入了解每次推理在主机与设备上花费的推理时间。开发人员可以使用此信息优化他们的应用程序或模型。
请参阅教程部分中的 Profiler 笔记本,了解使用 qaic-runner CLI 的模型的完整系统级分析工作流程。
还支持使用 Python API 进行分析。请参阅此页。
设备级分析
设备级分析面向希望识别设备上推理执行瓶颈的高级开发人员。这需要对AI核心和SoC架构有很好的了解。开发人员会感兴趣的 3 个关键功能 -
- 内存指标 - 这提供了编译器对模型的板载 DDR 与 VTCM(矢量紧耦合内存)使用情况的估计。
- 摘要视图 - 这提供了操作的直方图、每个操作所花费的总时间、操作数的存储位置(DDR 与 VTCM)、AI 内核中各个 IP 块的有效使用等。此功能仅用于调试,因为它可能会根据模型的大小影响性能。
- 时间线视图 - 这提供了从推理开始到结束在所有 IP 块上执行的所有操作的时间线视图。此功能主要用于放大操作以了解瓶颈。此功能仅用于调试,因为它会影响性能。
请参阅 Profiler Jupyter笔记本,了解使用 qaic-exec 和 qaic-runner CLI 的模型的完整设备级分析工作流程。