This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM62A7:TIDL 创建 2 个子图(未完全卸载到 NNA)–如何确认完整的 NNA 执行并替换不受支持的 ONNX 层?

Guru**** 2767655 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1602013/am62a7-tidl-creates-2-subgraphs-not-fully-offloaded-to-nna-how-to-confirm-full-nna-execution-and-replace-unsupported-onnx-layers

器件型号: AM62A7

TI 团队大家好、

我正在部署基于 ONNX 的 地标检测模型 消息流 EdgeAI-TIDL 工具 TI NNA。
虽然该模型主要在 NNA 上运行、但我观察到了这一点 TIDL 创建了 2 个子图、而不是 1 、且推理延迟高于预期。

我想理解 这意味着什么 如何确认我的模型是否在 NNA 上完全运行 、和 如何替换不受支持的图层/操作 以便卸载整个模型。

平台/软件详细信息

配置 : AM62A

操作系统 :Linux

TIDL 工具 :edgeai-tidl-tools

模型 : ONNX、批次大小固定为 1

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Shagufta、

    此处显示未卸载一个节点。

    要确定这一点、您可以查看 包含已编译模型工件的目录下的 arters/tempDir 目录中的 runtimes_visualization.svg 文件。 这将显示不同子图和不能卸载的节点的可视化效果。

    每个子图在加速器上单独运行、其余节点在 A53 内核上运行。 理想情况下、所有节点都应卸载、子图的数量应为 1。

    此致、
    Jay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jay:

    感谢您向我指出runtimes_visualization.svg。 我将检查该文件以确定导致中断的特定节点。

    为确保我可以获得一个子图并在 NNA 上运行整个模型、您能否提供以下指导:

    1. 不支持的运算符分析:一旦我确定有问题的节点(例如特定整形,切片或非线性激活)、建议的“TIDL 友好型“替代方案是什么? 对于通常会导致回退到 CPU 的属性(如跨步,填充或轴)是否存在特定限制?

    2. 层融合和约束:是否存在阻止融合到单个子图中的特定层序列(例如,全局平均池和特定平坦)?

    3. TIDL 编译选项:中是否有特定的标志compile_options(例如或)advanced_options:calibration_iterationsdenorm_weights可以帮助强制节点进入 NNA、或者是否由运营商支持列表严格决定卸载?

    此致、

    Shagufta NADAF

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Shagufta、

    模型分割成多个子图由两个因素决定:

    1.支持的运算符: https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/supported_ops_rts_versions.md 在这里,我建议您检查与您正在使用的 TIDL Tools 版本相对应的标签。

    2.每个子图形允许的最大节点数。 这在您的情况下不是问题、因为 205 个节点完全正常。

    您建议的参数(如 calibration_iterations)不应影响子图的数量、而应影响后量化模型的准确性。 至于图层序列、这通常不是问题。 作为融合操作的一部分支持操作的两种情况如下: github.com/.../supported_ops_rts_versions.md

    此致、
    Jay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jay:

    感谢您的解释。 由于节点数不是问题、我想知道修复不受支持的运算符并优化模型的具体步骤。

    1. 如何使我的整个模型在 NNA 上运行? 一旦我在 SVG 中确定了不受支持的节点、我应该使用什么确切的步骤或“TIDL 友好型“替换来确保它不会分解为子图?

    2. 如何验证 NNA 上的模型是否 100%? 我是否应该查找特定的日志文件或控制台输出、以确认零 ARM (CPU) 回退?

    3. 如何检查顶部和循环使用情况? 我应该使用哪些命令或工具来测量器件上此模型的实际 TOPS 利用率和计算周期?

    我想确保我获得了加速器的最佳性能。

    此致、

    Shagufta NADAF

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Shagufta、

    此处显示一个节点未卸载。
     [/报价]

    我在第一个答复中所强调的行应指明有多少副图。 NNA 上的每个子图形都在加速。 这些是模型工件中的 bin 文件。 未加速子图形以外的节点。  

    相同的信息也会作为模型编译日志的一部分输出:

    3.您可以查看名为 subgray_0_tidl_net.bin_netLog.txt 的文件。 将为每个子图生成这些文件。 因此、在您的情况下、您应该有两个文件、如:subgrap_0... 和子图形_1。 每行的末尾将显示该层所需的 MAC 数。 最后、它还将包括整个子图形的 Giga MAC 数量。

    此致、
    Jay