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:AM62A7:使用 export_op.py -c -m seg 在 TiAm62A7 平台上进行模型编译时、这个过程会卡住

Guru**** 2434370 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1540542/am62a7-am62a7-when-using-export_op-py--c--m-seg-for-model-compilation-on-the-tiam62a7-platform-the-process-gets-stuck

器件型号:AM62A7


工具/软件:

你好 Reese、 我修改了模型以避免多个子图、因为运算符不受支持。 但是、出现了一个新的问题。 为什么在优化摘要表中 TIDL_BatchNormalLayer 的节点数会增加? 它以红色标记。 遗憾的是、运行 export_op.py 时、程序卡在 TIDL_runtimesPostProcessNet 中。 原因是什么? 我应该如何修改该模型、使其能够顺利编译到_io_1.bin 和 net.bin 中? 最后、为了方便起见、我提供了编译日志。 我希望得到您的帮助。非常感谢 ye2e.ti.com/.../0167.log250715.txtou

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

    尊敬的庄:

    感谢您使用高 debug_level 进行日志 — 这有助于我们更快地解决问题。  

    有时添加 BatchNorm 图层以包含独立的点非线性、例如 Relu 或 Sigmoid。 注意你有 46 个 Relu 现在都消失了。 其中许多将融合到前面的卷积层中,但单独保存的任何一个都可以用 BatchNorm 表示。  

    • 如果您打开 SVG(如[0]中所示)、您可能会看到一个“actParams",“,其中、其中“actType"=“= TIDL_Relu。 我希望这是你的一些撒切尔规范的情况。
    • 我还会注意到一些 Elementwise 层(例如 Mul、ADD)在激活后也可能会在 BatchNorm 中进行优化、带 actParams

    至于为什么这是红色:有一个简单的条件,即“优化后的节点“的减少显示为绿色,增加显示为红色。 我不会认为这是一个问题、特别是因为其他层的数量减少了。 差异的原因。

    不幸的是、当运行 export_op.py 时、程序卡在 TIDL_runtimesPostProcessNet

    这个 export_op.py 从何而来? 这是从 TI 存储库中获取的、还是您创建了此脚本? 它可能类似于 edgeai-tidl-tools/examples/osrt_python/ort/onnxrt_ep.py

    在校准开始之前、这个问题好像卡住了。  

    在“优化“阶段之后、通过对输入图像进行校准来完成训练后量化。 您对 advanced_options: calibration_frames(我看到 2)的设置是否与提供给会议会话的输入图像数量相匹配? 我看到了一些情况、如果 advanced_options:calibration_frames 大于向运行时提供输入帧的次数(使用 TIDLCompilationProvider)、则它将挂起、直到提供所有输入映像。 不过、我认为这个问题已经通过 10_00_06_00 tidl-tools 版本解决。  

    还请确认您安装的工具已完成从我们的动物园导入其他模型的模型 — 这是为了确认工具在已知参考上是否按预期工作。  

    您还可以尝试`export TIDL_RT_DEBUG=1`以获得稍多的详细信息。 但是、我没有看到这种做法为什么会挂起的明确迹象。

    如果可以、请共享您的模型工件或至少共享目录树结构。 SVG 文件将是最有帮助的。  

     [0] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/tidl_osr_debug.md#example-visualization-1 

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

    嗨 Reese ,感谢您的答复,我会 打包日志和 tempDir 为您,你能帮助我弄清楚是什么导致程序阻止?e2e.ti.com/.../6433.tempDir.zip

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

    您好:

    tempDir 文件中是否存在 subgray_0 的第二个 SVG 文件? 很明显,导入过程没有完成,但我不确定是删除了这个文件,还是只是从未创建。  

    令人遗憾的是、原因仍然不清楚。  我们还可以 使用 GDB 和 bt/backtrace 功能来检查这种挂起的位置。 您是否可以尝试在 gdb 中运行导入脚本、一旦它挂起、请尝试 Ctrl-c 中断并检查反向跟踪? 这也可能会给出一些提示。 请共享此日志。

    您是否愿意为我提供您的模型的版本(随机权重可以)和模型导入脚本(或 model_configs.py 的条目)、以便我可以尝试重新生成和分析自己? 我的目标是为您提供一个解决方法、以便您可以继续开发、还可以隔离此问题、以便我们可以在将来解决并修复此问题。  

    或者、我建议将您的 edgeai-tidl-tools 升级到 10.1 或 11.0 版本、并查看此行为是否仍然存在。  

    BR、
    Reese

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

    尊敬的 Resse,感谢您的答复。  

    正如您所说的,我尝试使用 GDB 来执行 onnxrt_ep.py 脚本来编译模型,但似乎没有出现有价值的信息,所以我保存了所有的日志,希望你可以看看。 我发送给你的文件夹包含两个我现在试图编译的模型,一个是 deeplabv3,另一个是 yolov8n-secg。 我已尝试修改两种型号以避免操作员不兼容。 在日志中,可以发现这两个模型的运算符不受支持,尤其是 deeplabv3 模型。 我尝试将其修复为与 git.ti.com/.../deeplabv3lite_mobilenetv2_512x512_ade20k32_20210308.onnx 相同的结构。 但是、当执行 python onnxrt_ep.py -c -m Seg 时、它仍然卡在 TIDL_runtimesPostProcessNet 中的步骤。 除了 GDB 日志和 onnx 文件外、我还提供 model-artifact 的所有输出文件。 我不知道它是否对您有帮助。 我发现第二个 SVG 文件没有生成,这应该意味着编译不完整。 我希望得到你的答复。 非常感谢 much.e2e.ti.com/.../TIAM62A7_5F00_tidl_5F00_model_5F00_compilation.zip

    另外,我的 model_config.py 是:

    “第 4 页“:{
    'model_path':os.path.join ('../../../yolov5model '、'250716_Carrie_V1_yolov8n-seg-TI-Relu_tidl.onnx')、
    #'source':{model_url':'git.ti.com/.../deeplabv3lite_mobilenetv2_512x512_ade20k32_20210308.onnx'','opt': true,'define_shape ': true},
    'Mean':[123.675,116116.28,103.53]、
    “scale":“:[0.017125, 0.017507, 0.017429]、
    'num_images':numImages,
    'num_classs':19、
    'session_name':'onnxrt',
    'model_type':'seg'
    }、

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

    您好:

    谢谢你们提供了这个——我将分析这个问题、并在几天内回复你们。

    有一件事我会注意到(忘记提到)相对 GDB 是 onnxrt_ep.py 脚本将使用多处理库创建多个线程。 这是为了并行化工作、以便一次可以编译多个模型。 这意味着默认线程将等待其他线程完成。 在 GDB 中、您需要查看切换到其他一些线程的情况、并打印其背面迹线。 在分析问题时、我可以对此进行研究。

    您提到过您有两种模型。 您是否看到两者的行为相同、其中它挂起在“TIDL_runtimesPostProcessNet"?“? 如果是这种情况、您是否还可以尝试从 model_configs.py(对于.ONNX 模型)运行任何其他模型、例如 cl-ort-resnet18-v1 [0]? 如果这仍然挂起、那么问题可能是安装问题、与特定型号相比可能是安装问题。  

     [0] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/c0a6fe9c97edb74a3ba44cb68ff45bd6ea92a266/examples/osrt_python/model_configs.py#L14 

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

    尊敬的庄:

    有时间比预期的更快地花费在这方面,因此更新速度更快:)  

    我已经  在我的机器上有效地复制了您的错误。 但是,我没有挂起,而是得到了一个浮点异常(并且可以比你更容易地看到它在堆栈中发生的位置,因为它会产生一个实际的异常)。

    我在 TIDL 工具的 10_00_06_00 版(您使用了该版本)和 10_00_08_00 版(包括额外的 bug 修复/功能)中看到同样的错误。

    但是、在 10.1 工具版本中、在 10_01_04_00 和 10_01_03_00 中、此问题似乎已经解决--后者 (_03) 与 10.0 SDK 兼容。 对于 10_01_03_00 之间的模型工件、它确实需要在目标上运行脚本[0]以适用于 10.0 SDK

    • 如果您有更多 TIDL 版本控制问题、请参阅我的常见问题解答[1]-这包括向后兼容的工具版本、例如上面提到的_03
    • 如果可能、我的建议是迁移到 SDK 10.1、并使用 10_01_04_00 中的工具。 如果您无法迁移整个 SDK、请使用 10_01_03_00 的向后兼容版本、并遵循更新目标[0]的说明。

     [0] https://github.com/TexasInstruments/edgeai-tidl-tools/blob/10_01_03_00/docs/update_target.md  

    [1]   【常见问题解答】 EDGE-AI-STUDIO:对于在 AM6xA SoC 上使用 C7x 的边缘 AI 和 TI 深度学习 (TIDL)、SDK 版本是否很重要[AM62A、AM67A、AM68A、AM68PA、AM69A ]?  

    不清楚模型的哪个部分导致了这种情况。 您应该将 TIDL 工具迁移到 10.1 兼容版本。  

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

    尊敬的 Reese、感谢您的建议、现在我将 tidl 版本更新为 10_01_03_00、并成功将上述两个模型编译到 net.bin 和 IO_1.bin、然后我克隆了 TiAM62A 板上的 edgeai_tidl_tool (10_01_03_00) 并执行 update_target.sh 脚本。 但是、当我使用 tiovx 加载模型时、报告了以下错误。

    应用程序:初始化...!!
    66429.317744 s:内存:初始化...!!
    66429.317811 s:MEM:初始化的 DMA 堆 (FD=5)!!!
    66429.317997 s:内存:初始化...完成!!!
    66429.318015 s:ipc: init ...!!
    66429.335794 s : ipc: init ...完成!!
    remote_service:初始化...!!</s>!
    remote_service:初始化...完成!!!
    66429.339875s:GTC 频率= 200MHz
    应用程序:初始化...完成!!
    66429.340011 s:vx_zone_init:Enabled
    66429.340028s:vx_zone_error:Enabled
    66429.340037 s:vx_zone_warning:Enabled
    66429.340921 s:vx_zone_init:[tivxPlatformCreateTargetId:124]添加了目标 MPU-0
    66429.341149 s:vx_zone_init:[tivxPlatformCreateTargetId:124]添加了目标 MPU-1
    66429.341451 s:vx_zone_init:[tivxPlatformCreateTargetId:124]添加了目标 MPU-2
    66429.341704 s:vx_zone_init:[tivxPlatformCreateTargetId:124]添加了目标 MPU-3
    66429.341744 s:vx_zone_init:[tivxInitLocal:136]初始化完成!!!
    66429.342660 s:vx_zone_init:[tivxHostInitLocal:106]主机初始化完成!!!
    66429.368525 s:vx_zone_error:[ownContextSendCmd:885]返回命令 ack 消息失败 cmd_status:–1
    66429.368569 s:vx_zone_error:[ownNodeKernelInit:592]节点 tidl_node 的目标内核、TIVx_CMD_node_create 失败
    66429.368580 s:vx_zone_error:[ownNodeKernelInit:593]请确保已为此内核注册目标回调
    66429.368591 s:vx_zone_error:[ownNodeKernelInit:594]如果目标回调已注册、请确保在此内核的创建回调中没有发生错误
    66429.368606 s:vx_zone_error:[ownGraphNodeKernelInit:620]节点 1 的内核初始化、kernel com.ti.tidl:1:3 ...失败!!!
    66429.368629 s:vx_zone_error:[vxVerifyGraph:2254]节点内核初始化失败
    66429.368640 s:vx_zone_error:[vxVerifyGraph:2311]图形验证失败

    发生什么事了? 期待您的答复,非常感谢您。

    祝你一切顺利

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

    尊敬的庄:

    运行这个 update_target.sh 脚本后、是否重新启动 EVM? 当我们更新/lib/firmware/vision_apps_eaik 下的固件文件时、C7x 内核仍在运行原始固件。 重新启动之前、它不会开始运行新固件。  

    如果这不是解决方案、那么让我们以更高的调试级别运行此网络、并在后台运行/opt/vx_app_arm_remote_log.out、请共享日志。  

    BR、
    Reese

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

    感谢您发送编修、。 我重新启动了电路板并运行了模型。 模型图的节点已成功创建、但程序在 outbuf[i]= tiovx_modules_dequeuf_buf (out_buf_pool[i]) 行阻止。 然后、我设置 debug level=2、并通过/opt/vx_app_arm_remote_log.out.在 c7x_1 中发现错误 我向您发送了模型信息和日志。 您能帮助我看看问题出在哪里吗? 我使用的 tidl 版本是 10_01_03_00。 谢谢你。

    祝你一切顺利

    Zhuange2e.ti.com/.../error_5F00_info.zip

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

    您好、庄

    嗯、这是一个奇数输出、特别是因为这条线:  

    [ 685.672762] tps6594 0-0048:错误 IRQ 陷阱达到 ILIM、BUCK2 过流  

    在 C7x 内核转储之前启动。 我很好奇为什么会发生这种情况。 您使用的是 TI EVM 还是定制 PCB? 您是否修改了任何相关的内核时钟(如 C7x、您可以使用`k3conf dump processors`或`k3conf dump clock`查看这些时钟? 链接到潜在相关主题[0]

    您是否在 tiovx-apps 流水线(例如通过/opt/tidl-test、edgeai-dl-inferer 或 edgeai-tidl-tools)中隔离运行此模型? 我很好奇此错误是否恰好发生在 tiovx-apps 流水线中或运行 您的任何模型。

    • 如果您需要我重现此问题、请提供完整的工件目录

     [0] e2e.ti.com/.../am62a7-the-system-throws-errors-when-running-under-high-load-conditions-tps6594-0-0048-error-irq-trap-reach-ilim-overcurrent-for-buck2

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

    尊敬的:我仅使用 TIOVXDLPreProcNode 和 TIOVXTIDLNode 来形成链接、模型输入大小为 512*512、因此我将 512*512 分辨率的 NV12 格式映像传递给 TIOVXDLPreProcNode。 值得注意的是、在相同的测试演示下、yolov5 模型是正常的。 只有昨天在附件中提供给您的 deeplabv3 模型(目标分割)会导致进程卡滞(C7 核心转储)、因此我怀疑此模型有问题。 我将为您提供整个模型工件文件、希望您能在这里重现此问题。 我使用的 tidl 版本是 10_01_03_00 e2e.ti.com/.../seg4.zip

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

    您好:

    明白了——你的应用是非常简单的、所以我在这里没有任何顾虑。  

    我可以重现此问题。 我看到加速器在第 66 层(卷积层)发生故障、即网络中的 Conv_101 和 Relu_102。

    图层如下所示:  

    内核具有相当大的扩张,我注意到故障是一个“数据提取异常“,这通常意味着它试图访问不正确的内存位置。  

    这个层不应该引起问题,因为我们有自己的 deeplabv3 [1]与类似但不相同的层作为这个 ASPP 模块的一部分,如下所示:  

    它的不同之处在于它是一个不可分割的卷积,而不是完整的 2D Conv 我相信我们已经在模型的“lite"变“变体中做出了这一改变  

    让我跟进这个问题,如果有一些基本的关于这个层序列是不可分离的,而不是典型的 2D Conv  

    在此期间,我可以建议你:

    • 运行模型导入、使该层 Conv_101 位于 deny_list 中、并查看在目标上的 edgeai-tidl-tools 下运行该问题是否仍然存在。 由于这个 deny_list 将意味着网络分成 2 个子图、因此需要努力在 TIOVX 中运行、因此在这种情况下、我建议使用 OSRT 进行测试
    • 修改模型架构以使用 ASPP 块内的分立可分离卷积。  

    [1] https://github.com/TexasInstruments/edgeai-tensorlab/blob/main/edgeai-modelzoo/models/vision/segmentation/ade20k32/edgeai-tv/deeplabv3plus_mobilenetv2_edgeailite_512x512_20210308_outby4.onnx.link

    BR、
    Reese