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:[edgeai-modelmaker]奇怪的编译 run.log 打印输出

Guru**** 2353820 points
Other Parts Discussed in Thread: SK-AM62A-LP
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1506961/sk-am62a-lp-edgeai-modelmaker-strange-compilation-run-log-printout

器件型号:SK-AM62A-LP

工具/软件:

背景: 我逐步按照 edgeai-modelmaker 说明操作、可以训练模型并将其转换为 onnx 文件 、然后 成功生成模型工件。 一切都很好,但当我签出编译 run.log 时,一些打印输出看起来对我来说并不正确。

另外、我将同一图像上传到 SK-AM62A-LP 并进行了推理、发现它们的性能不同。 在主机上仿真的已编译模型的推理结果明显优于 SK-AM62A-LP 产生的推理结果。 我怀疑这是由于这个潜在的编译问题。  

e2e.ti.com/.../0726.run.log

您好:  

我想问什么编译 run.log 行47和48 "无法找到初始化程序在索引- 1节点93
无法在索引-1中找到节点109"的初始化值? 我在编译 run.log 中也看到了相同的内容。

另一个问题是、如您所提到的、在"===================之后 [子图形0的优化已开始]=====================   重复打印"、"无效图层名称"。 我不明白这是什么意思。  

我提出这两个问题的原因是、我发现在主机上仿真的已编译模型工件的推理结果明显优于 使用相同模型工件的 SK-AM62A-LP 产生的推理结果。 (  有关更多详细信息、请参阅 e2e.ti.com/.../sk-am62a-lp-edgeai-modelmaker-which-shell-python-script-produces-outputs-folder 我怀疑 run.log 中的奇怪输出与此问题有关。 可能有些层在子图优化中无效、因此会影响 SK-AM62A-LP 上的模型工件的性能。

我期待着听到你们任何人的声音。 谢谢。

此致、

马特

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

    尊敬的 Matt:

     我知道您在使用 edgeai-modelmaker 时遇到了一些挑战、似乎您在这里使用了 SDK 10.0。  

    让我确保我了解您的问题的具体细节:

    [引用 userid="649736" url="~/support/processors-group/processors/f/processors-forum/1506961/sk-am62a-lp-edgeai-modelmaker-strange-compilation-run-log-printout ]我发现他们的表现是不同的。 在主机上仿真的已编译模型的推理结果明显优于 SK-AM62A-LP 产生的推理结果。 [/报价]

    主机端仿真和目标端精度不同、那么?  请确认

    47和48 "无法在节点93的索引-1处找到初始化程序
    无法在索引-1中找到节点109"的初始化值? 我在编译 run.log 中也看到了相同的内容。

    我预计这意味着某些层未能找到权重等常量值、

    然后可能相关:

    Unknown 说:
    "Invalid Layer Name"被重复打印

    告诉我、由于某种原因、此网络的层未被正确解析。 我看到一个重复的9层列表

    Invalid Layer Name  /multi_level_conv_obj.2/Conv_output_0
    Invalid Layer Name  /multi_level_conv_reg.2/Conv_output_0
    Invalid Layer Name  /multi_level_conv_cls.2/Conv_output_0
    Invalid Layer Name  /multi_level_conv_obj.1/Conv_output_0
    Invalid Layer Name  /multi_level_conv_reg.1/Conv_output_0
    Invalid Layer Name  /multi_level_conv_cls.1/Conv_output_0
    Invalid Layer Name  /multi_level_conv_obj.0/Conv_output_0
    Invalid Layer Name  /multi_level_conv_reg.0/Conv_output_0
    Invalid Layer Name  /multi_level_conv_cls.0/Conv_output_0

    对于经过 TI 验证的流程、我预计不会出现这种情况--看起来您在使用 YOLO-X-S。

    现在要努力达成一项解决方案:

    如果您愿意传递导出的 ONNX 模型+编译的工件、这会很有帮助。 或者,请显示上面匹配的完整图层名称--我很好奇,如果名字的一部分被丢弃,或者有一个奇怪的,无效的字符。  

    但是,我怀疑这与 Pytorch-->ONNX 导出更密切相关。 python 中与火炬相关的库和与 onnx 相关的库的版本是什么(参见`pip3冻结` 输出)。

    • 您是如何设置 modelmaker 的?
    • 您是否使用虚拟环境的形式将这些环境与计算机的其他软件包隔离? 是否已安装其他版本的库(如 Pytorch 或 onnx)?

    我想发生的情况是、模型中的一些权重/常数值未正确读取、并且保存的方式使得 PC 在从工件加载时与目标不同。 我们需要了解为什么会发生这种情况

    BR、
    Reese

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

    您好 Reese、

    感谢您的答复。


    1.为了处理 x86主机 PC 和 SK-AM62A-LP 的模型工件性能差异,我开始研究 您今天提到的相关文档,

    https://github.com/TexasInstruments/edgeai-tidl-tools/blob/10_00_08_00/docs/tidl_osr_debug.md#steps-to-debug-error-scenarios-for-targetevmdevice-execution。

    顺便说一下、我将使用 edgeai-tidl-tools 来生成工件、而不是 edgeai-benchmark (仅根据同事的建议讨论模型编译/推理)

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1498572/sk-am62a-lp-edgeai-modelmaker-which-shell-python-script-produces-outputs-folder/5790817#5790817 )。

    如果 我 很难理解它,我会询问你。


    2.是的,我使用的是 YOLOX-Small-lite 模型。

    3.这是 edgeai-modelmaker 下运行./run_modelmaker AM62A config_detection.yaml 后的输出文件夹。  

    https://github.com/MattMak0402/od-8220-20250423.git 

    我已将其上传到我的 GitHub 存储库、请看一下。 该文件夹名为"od-8220-20250423"、其中包括输出(我的 x86主机 PC 上生成的工件的推理结果)、编译 run.log 和其他必需组件。 此文件夹最初是生成的   、位于/local_data/home/mattmak/mattmak_20250314/edgeai-tensorlab/edgeai-modelmaker/data/projects/htt_cam.v8i.coco_raw/run/20250422-125939/yox_s_s/layox/AM62A/work/20250od Fan_Matt_编译中。

    4.以下是我的 edgeai-modelmaker 设置的 requirements.txt:
    e2e.ti.com/.../requirements_5F00_20250423.txt

    您问过

    • 您是如何设置 modelmaker 的?
    • 您是否使用虚拟环境的形式将这些环境与计算机的其他软件包隔离? 是否已安装其他版本的库、如 Pytorch 或 onnx  

    我的答案:  


    我只是 演示 说明在 https://github.com/TexasInstruments/edgeai-tensorlab/tree/main/edgeai-modelmaker . 此外、我使用 pyenv 来分离每个工程的依赖项。 我很有信心虚拟环境的设置是好的。


    5.由于您 怀疑这与 Pytorch-->ONNX 导出更密切相关、下面是培训日志 file.e2e.ti.com/.../1325.run.log

    感谢你的帮助。 请告诉我是否 需要任何其他信息。

    此致、
    马特


    P.S.我正在使用 edgeai-tidl-tools 尝试调试此问题、将通知您是否有任何消息。 谢谢 Reese。

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

    尊敬的 Matt:

    感谢您的详细回答、这对您有所帮助。

    我的同事告诉您 edgeai-tidl-tools 的方向是正确的。 这非常适合使用 TI 深度学习进行独立测试。 Edgeai-Benchmark 的学习曲线比您的场景更陡峭。  

    我能够下载您的模型并查看日志。

    如日志所示、没有任何名为"Invalid Layer Name /multi_level_conv_obj.2/Conv_output_0"的层或输出、但它类似于馈送到对象检测 head / NMS 的某些层(例如、.ONNX 模型中名为193的层)。 这仍然表明存在解析错误。  

    我在您的模型中注意到的另一件事是 ONNX opset 版本。 在您的模型中、这是"17"。 TIDL 支持多达18个、我知道、从过去的版本中、我们已经过8、11和18的验证(最新的10.1 SDK 版本支持运算集19)。

    同样、我注意到您的一组 python 版本使用 ONNX 1.12.0 (支持高达 opset 17)、而 modelmaker 是针对 ONNX = 1.13.0 (opset 18)进行验证的

    当您使用 edgeai-tidl-tools 进行测试时、我建议您尝试将模型的可翻转版本从17转换为18。  

    • https://onnx.ai/onnx/api/version_converter.html 
    • 我希望这种转变是足够的。 如果问题仍然存在、可能值得 将 PYENV 中的 ONNX 软件包版本从1.12.0升级到1.13.0、并尝试重新运行模型制作器(少量 epoch)以查看这是否是 Pytorch 导出的伪影


    请告诉我您的进展如何!

    BR、
    Reese

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

    您好 Reese、

    现在正是香港午夜、所以我会按照你的建议、在明天加以落实。  

    我只是想告诉你,似乎我已经解决了这个问题

    47和48"无法在节点93的索引-1处找到初始化程序
    无法在索引-1中找到节点109"的初始化值? 我在编译 run.log 中也看到了相同的内容。

    通过将 edgeai-tidl-tools 更新为版本10_01_04_00。

    这是编译日志
    e2e.ti.com/.../compilation_5F00_log_5F00_10_5F00_01_5F00_04_5F00_00_5F00_debug_5F00_level_5F00_1.txt
    但是、我尚未将其部署到 SK-AM62A-LP 进行测试。 明天将告诉您这种新生成的伪影性能。 希望它能解决我提到的问题  

    我发现他们的表演是不同的。 在主机上仿真的已编译模型的推理结果明显优于 SK-AM62A-LP 产生的推理结果。

    马上回来。 非常感谢。

    此致、
    马特


    P.S.小侧道:为什么它们在层循环中都是0 ? 这是奇怪的。 (请参阅随附的编译运行日志)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Reese、

    我在 edgeai-tidl-tools 中将视图版本从17更改为18。 但是、当我将 edgeai-tidl-tools 从10_00_08_00更新为10_01_04_00时、无法在 SK-AM62A_LP 上推断生成的工件(TIDL 执行提供程序似乎存在错误、可能是版本不兼容)。 要处理它,我将尝试最新版本的  Processor SDK Linux for AM62x 11.00.09.04 。

    为了让事情更清楚,让我向你展示我做了些什么。

    开始时、我使用 edgeai-modelmaker 训练和编译模型。

    然后、我只使用 edgeai-tidl-tools (版本10_00_08_00)进行模型编译。 在本论坛中问和提到的问题之前、我提到的是基于  edgeai-tidl-tools (版本10_00_08_00)。

    收到该消息后、我将尝试使用 edgeai-tidl-tools (版本10_01_04_00)与 opset18和 onnx>=1.13.0、而适用于 AM62x 的 Processor SDK Linux 在我的 SK-AM62A-LP 中版本为11.00.09.04。 我将根据此场景按照您的说明进行操作。

    希望这条消息可以向您清晰地展示我迄今为止所做的工作。

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

    您好 Reese、

    我已经解决了这个问题、现在、模型工件 在我的定制 SK-AM62A-LP 上运行良好。 以下是编译日志:
    e2e.ti.com/.../good_5F00_model_5F00_V8.txt

    *请注意,虽然日志显示的模型的 opset 版本17,我实际上设置的模型的 opset 版本从17到18根据您的建议,它真的提高了性能谢谢.

    但我仍然想问: 为什么它们在层周期中都是0 ? 这是奇怪的。 我期望得到非零数字。  (请参阅随附的编译运行日志)

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

    您好 Reese、

    我已经解决了大部分问题。 现在我正努力将原始类名称放在边界框上。 当我将模型部署到 SK-AM62A-LP 上时、所示的类名称始终为"detection/category_X"、其中 X 指的是 class_ID、因为我有7个输出类、因此0<X<=7。 但是、我希望标签是原始输出类名称、例如"person"、"coat"等 我该怎么做?

    此致、
    马特

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

    您好 Matt、

    我对过去几天没有回应表示歉意。 我很高兴你能在这段时间内继续下去。  

    我很高兴的是,对版本的改变改善了你的情况.  

    收到此消息后、我将尝试将 edgeai-tidl-tools (版本10_01_04_00)与 opset18和 onnx>=1.13.0配合使用、而适用于 AM62x 的 Processor SDK Linux 版本为11.00.09.04 (在我的 SK-AM62A-LP 中)。 我将根据此场景遵循您的说明。

    我将简单地提及以下几点:

    1. 您可能发现、目标器件(AM62A)上的 SDK 和主机 PC TIDL 工具必须具有相同的版本(例如10.1 Linux SDK 和 tidl 工具10_01_04_00)
      1. 有关更多详细信息、请参阅我有关 SDK 版本的常见问题解答: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1455079/faq-edge-ai-studio-is-sdk-version-important-for-edge-ai-and-ti-deep-learning-tidl-with-c7x-on-am6xa-socs-am62a-am67a-am68a-am68pa-am69a 
    2. 您提到的 AM62x SDK 为11.0。 这与 AM62A SDK 不同(器件名称非常相似、我知道这可能会让人困惑)。  
      1. 您似乎也想到了这一点:)提及的 TIDL 工具应使用具有10.1 SDK 的 AM62A
    但我仍然想问: 为什么在图层周期中它们都是0? 这是奇怪的。 我期望得到非零数字。  (请参阅随附的编译运行日志)

    PC 端工具能够以位精度仿真 C7xMMA AI 加速器。 这样可以进行精度测试。 它不是周期精确的、因此这里没有性能测试。 因此、层周期显示为0。 如果要使用相同的 DEBUG_LEVEL 在目标上运行模型、您将看到非零周期数。

    最后一个问题(目前)

    但是、我希望标签是原始输出类名、例如"person"、"coat"等 我该怎么做?

    类名通常从工件中存在的"dataset.yaml"文件中读取。 对于 edgeai-tidl-tools 编译、它没有数据集信息、因此将为第 N 类索引创建类名的基本列表、如"category_N"。  

    对于通过 edgeai-modelmaker / edgeai-Benchmark 编译的模型、它应该会生成更相关的 dataset.yaml。 这些工具包含有关训练中的数据集的详细信息。 您也可以手动编辑 dataset.yaml。  

    BR、

    Reese

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

    您好 Reese、  

    谢谢你的答复,我已经解决了

    我 希望标签是原始输出类名称、例如"person"、"coat"等 我该怎么做?

    但是,我不知道该怎么做  

    PC 端工具能够以位精度仿真 C7xMMA AI 加速器。 这样可以进行精度测试。 它不是周期精确的、因此这里没有性能测试。 因此、层周期显示为0。 如果要使用相同的 DEBUG_LEVEL 在目标上运行模型、您将看到非零周期数。

    如何在 SK-AM62A-LP 上设置相同的 DEBUG_LEVEL? 我已经在.yaml 文件中添加了调试启用掩码、但没有输出出图层周期数的输出文件。  

    此致、
    马特


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

    尊敬的 Matt:

    您正在使用 edgeai-gst-apps 示例、对吗? 我认为、应用程序 CONFIG.YAML 无法设置 TIDL 特定选项。

    或者、您也可以直接编辑 /usr/lib/python3.12/site-packages 下的 edgeai_dl_inferer.py 文件

    • 这适用于 SDK 10.1、python3.X 版本将因 SDK 而异、仅供参考
    • 在这个 edgeai_dl_inferer.py 脚本的 onnxrt 类中,有一个词典"runtime_options"。
      • 在此范围内、添加"debug_level":1.

        if enable_tidl:
            runtime_options = {
                "tidl_tools_path": "null",
                "artifacts_folder": artifacts,
                "core_number": core_number, 
                "debug_level": 1, #Add this line
            }
            sess_options = _onnxruntime.SessionOptions()
    

    对于 CPP 版本的脚本、需要在其他位置更改此设置、并且需要重新构建并重新安装 GST-plugins。 有一些简单的脚本可以执行此操作。 如果您还需要 CPP 侧的指导、请告诉我。  

    BR、
    Reese