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.

[参考译文] SK-AM62A-LP:在启用加速的情况下运行时、板载 CPP DL 推理会引发异常

Guru**** 2535750 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1553115/sk-am62a-lp-cpp-dl-inference-on-board-throws-exception-when-running-with-acceleration-enabled

器件型号:SK-AM62A-LP


工具/软件:

我尝试使用通过修改 https://github.com/TexasInstruments/edgeai-tidl-tools/tree/master/examples/osrt_cpp/ort 上的示例而构建的程序运行自定义 ONNX 模型。

这种情况下可以正常运行且没有加速(“-a 0“)、但当使用“-a 1“运行时、会引发以下异常:

抛出“ORT::exception“实例后调用的终止
 what(): /root/onnxruntime/onnxruntime/core/providers/tidl/tidl_execution_provider.cc:94 onnxruntime::TidlExecutionProvider::TidlExecutionProvider (const onnxruntime::TidlExecutionProviderInfo&) status == true 为 false。

已中止(核心已转储)


这也是我在 x86 中运行此选项时遇到的相同行为(我想我没有提供标志,它只是默认为 1)。
我还尝试在运行应用程序之前导出此变量:
export TIDL_RT_ONNX_VARDIM=1

我还能够使用具有加速功能的 Python API 运行该模型。

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

    您好、Jose、

    请提供以下附加上下文:

    • 您的应用程序是在目标上运行还是在具有仿真功能的 x86 主机上运行? 这是针对一种环境发生的、而不是针对另一种环境发生的?  
      • 有时、由于未在 x86 仿真环境中建模的内存分配、目标将失败
    • 您使用的是哪个 SDK? 您本地克隆中 edgeai-tidl-tools 存储库的当前标签是什么?
    • 您能否提供完整日志(省略任何敏感细节)? 请将 DEBUG_LEVEL [1]设置为 1 或 2?

    [1] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/95ba2c7ec62bbedeb637d7a5c0273fcede21cac9/examples/osrt_cpp/ort/onnx_main.cpp#L346 

    BR、
    Reese

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

    您好 Reese

    -这在 x86 主机上和在目标上运行时都发生。

    -我使用 的是 SDK“11_00_07_00"。“。 使用这种方法对目标进行了更新: https://github.com/TexasInstruments/edgeai-tidl-tools/blob/11_00_07_00/docs/update_target.md

    -将 debug_level 更改为“1"或“或“2"没有“没有任何影响,但我将 ORT :: Env 中的日志级别更改为详细,将 ORT :: SessionOptions 严重性级别更改为 0 ,这提供了一些更多的信息。 两个输出看起来都与我非常相似、但我还是把它们都贴出来了。 我只编辑了几个路径,但任何没有显示的值没有在配置中有一个。 标签路径是默认的、但我没有使用它、因此它不存在。 我还尝试了在 device_type 设置为 GPU 的情况下运行该演示、但输出是相同的。

    x86 主机输出
    *** 显示运行配置:启动*****
    详细级别设置为:1.
    加速模式设置为:1.
    器件存储器设置为:1.
    循环计数设置为:1.
    模型路径设置为:
    模型工件路径设置为:model_atters_path
    映像路径设置为:image_path
    DEVICE_TYPE 设置为:CPU
    labels path 设置为:test_data/labels.txt
    线程数设置为:4
    结果数量设置为:5
    预热照射行程数量设置为:2.

    *** 显示运行配置:结束*****
    [09:39:38.000.000000]:INFO:[runInference:0279]加速模式
    [09:39:38.000.000092]:INFO:[runInference:0282] artifacts:model_artifactes_path
    2025年08月14日 09:39:38.618467384 [i:onnxruntime:、推理会话.cc:284 运算符 ()]清空到零和非常规数作为零关闭
    2025年08月14日 09:39:38.618517598 [I:onnxruntime:、推理会话.cc:292 结构 Common]创建和使用每个会话线程池、因为 use_PER_Session_threads_为 true
    2025年08月14日 09:39:38.618545015 [I:onnxruntime:、推理会话.cc:310 ConstructorCommon]动态块基址设置为 0
    2025年08月14日 09:39:38.648160234 [I:onnxruntime:test、bfc_arena.cc:27 bfcarena]使用以下配置为 Tidl 创建 BFCArena:initial_chunk_size_bytes:1048576 max_dead_bytes_per_chunk:134217728 initial_growth_chunk_size_bytes:18209714701640152 memory strana_extend
    2025年08月14日 09:39:38.648212805 [V:onnxruntime:test、bfc_arena.cc:63 BFCArena]创建最大块大小为 256 至 268435456 的 21 个容器
    2025年08月14日 09:39:38.648242160 [I:onnxruntime:test、bfc_arena.cc:27 bfcarena]使用以下配置为 TidlCpu 创建 BFCArena:initial_chunk_size_bytes:1048576 max_dead_bytes_per_chunt_block:134217728 initialgrowse_chunk_size_bytes:209714701640152_extend
    2025年08月14日 09:39:38.648259048 [V:onnxruntime:test、bfc_arena.cc:63 bfcarena]创建最大块大小为 256 至 268435456 的 21 个箱
    已加载 libtidl_onnxrt_EP 0x5635c4ed1370
    抛出“ORT::exception“实例后调用的终止
     what(): /root/onnxruntime/onnxruntime/core/providers/tidl/tidl_execution_provider.cc:94 onnxruntime::TidlExecutionProvider::TidlExecutionProvider (const onnxruntime::TidlExecutionProviderInfo&) status == true 为 false。

    已中止(核心已转储)

    am62a 目标输出
    *** 显示运行配置:启动*****
    详细级别设置为:1.
    加速模式设置为:1.
    器件存储器设置为:1.
    循环计数设置为:1.
    模型路径设置为:
    模型工件路径设置为:model_atters_path
    映像路径设置为:image_path
    DEVICE_TYPE 设置为:CPU
    labels path 设置为:test_data/labels.txt
    线程数设置为:4
    结果数量设置为:5
    预热照射行程数量设置为:2.

    *** 显示运行配置:结束*****
    [23:48:31.000.000000]:INFO:[runInference:0279]加速模式
    [23:48:31.000.000115]:INFO:[runInference:0282] artifacts:model_artifacts_path
    1970年01月03日 23:48:31.941629815 [I:onnxruntime:、推理会话.cc:284 operator ()]清空到零和非常规数作为零关闭
    1970年01月03日 23:48:31.941756785 [I:onnxruntime:,推理会话.cc:292 结构 Common]创建和使用每个会话线程池、因为 use_per_session_threads_为 true
    1970年01月03日 23:48:31.941814355 [I:onnxruntime:、推理会话.cc:310 ConstructorCommon]动态块基址设置为 0
    1970年01月03日 23:48:32.053108260 [I:onnxruntime:test、bfc_arena.cc:27 bfcarena]创建用于 Tidl 的 BFCArena、配置如下:initial_chunk_size_bytes:1048576 max_dead_bytes_per_junk块:134217728 initial_growse_chunk_size_bytes:18209714701640152 memory strana_extend:182097147067440152_内存扩展策略
    1970年01月03日 23:48:32.053204835 [V:onnxruntime:test、bfc_arena.cc:63 BFCArena]创建最大块大小为 256 至 268435456 的 21 个容器
    1970年01月03日 23:48:32.053266650 [I:onnxruntime:test、bfc_arena.cc:27 bfcarena]使用以下配置为 TidlCpu 创建 BFCArena:initial_chunk_size_bytes:1048576 max_dead_bytes
    1970年01月03日 23:48:32.053298135 [V:onnxruntime:test、bfc_arena.cc:63 BFCArena]创建最大块大小为 256 至 268435456 的 21 个容器
    已加载 libtidl_onnxrt_EP 0x403cd100
    抛出“ORT::exception“实例后调用的终止
     what(): /root/onnxruntime/onnxruntime/core/providers/tidl/tidl_execution_provider.cc:94 onnxruntime::TidlExecutionProvider::TidlExecutionProvider (const onnxruntime::TidlExecutionProviderInfo&) status == true 为 false。

    已中止(核心已转储)

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

    在对 TIDL 示例进行 CPP 推理实验后、我发现这些示例存在相同的问题。 带有 edgeai-tidl-tools 的这两个标签:10_01_04_00、11_00_07_00。

    同样、Python 推理在这两种情况下都运行良好。 我认为某个地方的设置肯定有问题、但它没有完全损坏。
     

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

    您好、Jose、

    我敢打赌 ONNXRuntime API 中 TIDL 特定元素的配置有误。 由于 debug_level 没有区别、它可能是基本的、例如指向模型本身的有效路径或 model-artifacts 目录。 在 edgeai-tidl-tools 中、这些工件的标称位置是 edgeai-tidl-tools/model-artifacts/$model_name/artifacts、将包含如下所示的文件。  


    cl-ort-resnet18-v1$ tree -L 2
    
    ├── artifacts
    │  ├── allowedNode.txt
    │  ├── onnxrtMetaData.txt
    │   ├── subgraph_0_tidl_io_1.bin
    │   ├── subgraph_0_tidl_net.bin
    │   └── tempDir
    ├── dataset.yaml
    ├── model
    │   └── resnet18_opset9.onnx
    └── param.yaml

    TIDL 需要位于 artifacts 目录中。 这些二进制文件对实际的网络和 IO 配置进行编码、另外两个 TXT 文件有助于 ONNX 了解如何处理.ONNX 文件中与在 C7xMMA 加速器上运行这些文件有关的层。   

    [23:48:31.000.000115]:info:[runInference:0282] artifacts:model_artifactes_path
    [/报价]

    您是编辑日志以混淆敏感信息、还是在运行应用程序时将其设置为? 如果后者是正确的,那么这很可能是你的错误的原因。  

    否则、我可能需要查看几段代码来了解如何配置运行时(假设它们与 ort_main.cpp 示例的代码不同)。  

    BR、
    Reese

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

    您好 Reese

    我在那里设置了一个有效的路径。 具有无效路径将导致不同的错误。

    就像我在后续消息中提到的、我也遇到了使用示例中提供的命令(用于设置这些路径)运行 TIDL 示例的相同问题。  这是在一个干净的 edgeai-tidl-tools 中、在 Python 示例模型编译后、标签为 10_01_04_00。
    下面是一个完整的非混淆示例、同时包含命令和输出:


    /bin/Release/ort_main -f model-artifacts/cl-ort-resnet18-v1/artifacts -I test_data/airshow.jpg

    *** 显示运行配置:启动*****
    详细级别设置为:3.
    加速模式设置为:1.
    器件存储器设置为:1.
    循环计数设置为:1.
    模型路径设置为:
    模型工件路径设置为:model-artifacts/cl-ort-resnet18-v1/artifacts
    映像路径设置为:test_data/airshow.jpg
    DEVICE_TYPE 设置为:CPU
    labels path 设置为:test_data/labels.txt
    线程数设置为:4
    结果数量设置为:5
    预热照射行程数量设置为:2.

    *** 显示运行配置:结束*****
    已加载 libtidl_onnxrt_EP 0x55b6a0cd8df0
    抛出“ORT::exception“实例后调用的终止
     what(): /root/onnxruntime/onnxruntime/core/providers/tidl/tidl_execution_provider.cc:94 onnxruntime::TidlExecutionProvider::TidlExecutionProvider (const onnxruntime::TidlExecutionProviderInfo&) status == true 为 false。

    已中止(核心已转储)

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

    我现在尝试了使用 Docker 设置运行示例、但仍然无法在 TI 示例的 CPP 中运行加速仿真模式。

    edgeai-tidl-tools 标签 10_01_04_00
    导出 SOC=am62a
    来源 setup.sh
    Source ./ setup_env.sh ${SOC}
    mkdir build && cd build
    cmake ../examples && make -J2 && CD ..
    源/scripts/run_python_examples.sh

    Root@e41c1556dbe8:/home/root ./bin/Release/ort_main -f model-artifacts/cl-ort-resnet18-v1/artifacts -I test_data/airshow.jpg

    *** 显示运行配置:启动*****
    详细级别设置为:3.
    加速模式设置为:1.
    器件存储器设置为:1.
    循环计数设置为:1.
    模型路径设置为:
    模型工件路径设置为:model-artifacts/cl-ort-resnet18-v1/artifacts
    映像路径设置为:test_data/airshow.jpg
    DEVICE_TYPE 设置为:CPU
    labels path 设置为:test_data/labels.txt
    线程数设置为:4
    结果数量设置为:5
    预热照射行程数量设置为:2.

    *** 显示运行配置:结束*****
    已加载 libtidl_onnxrt_EP 0x556a01a68df0
    抛出“ORT::exception“实例后调用的终止
     what(): /root/onnxruntime/onnxruntime/core/providers/tidl/tidl_execution_provider.cc:94 onnxruntime::TidlExecutionProvider::TidlExecutionProvider (const onnxruntime::TidlExecutionProviderInfo&) status == true 为 false。


    这些步骤是否正确? 我正在使用 Docker 设置、因此我认为设置本身是正确的。 您能否成功运行 CPP 示例? 我应该尝试 Ubuntu 24.04 吗?

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

    您好、Jose、

    当运行同一个命令时、我在目标上看到这个错误、但在 Ubuntu 22.04(本机)中运行时没有看到 — 主机环境不会出现这个问题。  

    因此、当通过“-a 1“ CLI-arg 以 TIDLExecutionProvider 为目标在目标和主机上运行时、您看到相同的 ONNX 错误。 我只看到目标上的行为

    您的步骤和您的命令一样正确。 我不确定这一问题的根源。 它是在 ONNX 到 TIDLExecutionProvider 的调用中发生的 — 由于某种原因返回 FALSE。 让我在内部寻求答案。

    BR、

    Reese

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

    您好 Reese

    感谢您的反馈。

    我遇到基于 Ubuntu 22.04 的虚拟机分发的错误。 使用 edgeai-tidl-tools 中提供的 Docker 文件进行 Docker 设置时也会发生这种情况。 当然、在这两种情况下、源代码都很可能与 VirtualBox 仿真相关联。

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

    我已经向开发团队 (TIDL-8013) 提出了这个问题。 错误的来源在我们的 ONNXRuntime fork 中 。 如果它属于  通过 TIDL-RT 和 TIOVX 将 Onnxruntime 连接到加速器的 arm-tidl 部分、那么我会有更多直接建议。  

    奇怪的是、我们对 x86 主机端的观察结果不同。 由于在本例中目标和主机上存在相同的错误、因此我认为这可能是同一个问题。  

    BR、
    Reese

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

    谢谢 Reese。

    显然、 至少对于 SDK 10.01.00.05、可以使用使用使用低级 API (/opt/tidl_test/TI_DEVICE_armv8_test_dl_algo_host_rt.out) 的预构建应用执行推理。

    TIDL–8013 是一个内部工单、对吗? 还是我可以跟踪?

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

    您好、Jose、

    是的、该二进制文件是运行网络的有效方法。

    这使用 TIDLRT 接口[1]、也是一个较低级别的接口、仅使用 tidl_net.bin 和 tidl_io_1.bin 文件运行网络。 此接口不需要.ONNX 模型文件或工件的其他部分。 每个 SDK 都有该接口、ONNXRuntime 在底层使用该接口。  

    如果您有需要在 CPU 上运行的不受支持的层、则 TIDLRT 不适用。 否则、完全加速的网络可以通过 ONNXRuntime 或 TIDLRT 接口运行。

    正确、TIDL-8013 是一个内部票证

    [1] https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j721s2/08_05_00_11/exports/docs/tidl_j721s2_08_05_00_16/ti_dl/docs/user_guide_html/md_tidl_model_import.html

    • PSDK-RTOS 文档(适用于 TDA4x 器件,但仍然适用)和 ti-firmware-builder(适用于 AM62A)提供了最新的用户指南、但此接口上的文档通常更受限制。  

    BR、
    Reese

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

    您好、Jose、  

    我们的团队已重现并解决了该问题。 此修复程序计划用于 11.1 SDK、其中 edgeai-tidl-tools 作为 bugfix 版本 11_01_06_00。 我正在等待此软件工具的候选人发布日期。 它将与适用于 AM62A 的 11.1 SDK 兼容

    编辑:   11_01_06_00 的 edgeai-tidl-tools 版本今天上线! 此问题应立即解决

    BR、
    Reese