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-TDA4VM:OptiFlow — 自定义型号输出缓冲区分配问题,导致分段故障

Guru**** 2805425 points

Other Parts Discussed in Thread: SK-TDA4VM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1616791/sk-tda4vm-optiflow---custom-model-output-buffer-allocation-problems-leading-to-segmentation-fault

器件型号: SK-TDA4VM

您好、

我在具有 TIDL 工具标签 11.01.05.00 的 SDK 版本 11.00.08 上移植了适用于 SK-TDA4VM 的 YOLOPX。

该模型确实会运行、但由于代码位于 python 中、因此速度非常慢。

我尝试使用 Optiflow 框架运行该模型、方法是向/opt/edgeai-dl-inferer 添加代码、并执行此 E2E 链接中提到的步骤。  

这种添加代码的过程本身是成功的,这意味着我可以看到我的模型正在运行(或至少正在初始化),并可以看到我的后处理构造函数被调用。 然而,我经常得到一个分段错误,有时甚至在调用构造函数之前。

我将使用终端输出附加文件、其中包含所述的分段故障、并在 gdb 中运行反向跟踪。

此外、当代码运行时没有任何分段故障、我还有一个带有输出的文件。

我需要以下方面的帮助:

  1. 如何激活日志记录级别、而不是 DL_SUMMEM_LOG_ERROR? 如何获取调试信息? /opt/edgeai-gst-apps/configs/yolopx.yaml 中对以下内容进行了更改
    1. 我尝试将调试设置为掩码 7、但没有生成调试打印件或目录。
    2. 更改 LOG_LEVEL 似乎也没有任何区别  
  2. 您可以在附加的文件中看到、通过模型进行的首次迭代(在 GStreamer 流水线打印部分的上方)对不同的模型输出使用不同的地址。 但在这 4 个输出之后使用相同的地址、另外 2 个输出使用不同的地址。  
    1. 这是否意味着前 4 个输出一个接一个地被覆盖? 即检测正在被 stride8 覆盖、以此类推?
    2. 分段和通道之间的地址差远小于这些输出的大小、这意味着即使这些输出被覆盖。
    3. 我需要弄清楚缓冲区分配实际上在哪里被调用、但似乎在某种程度上没有正确分配单个存储器的输出数量。  
  3. 如何查看调用 DL 函数的代码被调用的位置? SDK 的其他部分是否可以在与 OptiFlow 一起运行时看到实际创建的馈送者和后处理器实例?
    1. 我在/opt/edgeai-dl-inferer/tests 下找到了一些代码、说明了如何调用一切、但位于 bin/Release 下的 app_dl_inferer_test 不起作用、因为它会引发一些存储器分配错误。 我甚至使用 edgeai-tidl-tools 示例中提供的 Sematic 分段模型来尝试此操作、以确保错误不是因为我的模型导致的。 还会附加一个具有反向跟踪的文件。

segfault.txt 

running_fine.txt 

app_dl_inferer_test.txt 

e2e.ti.com/.../post_5F00_process_5F00_yolopx.cpp

e2e.ti.com/.../post_5F00_process_5F00_yolopx.h

由于尺寸限制、我无法上传模型工件和相关 YAML 文件。 请告诉我如何与您分享这些信息,如果您需要任何其他信息。此致,

Charanjit Singh

编辑:添加的文件。 /opt/edgeai-dl-inferer/post_process/include 和 src 下

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

    你好,你能尝试压缩文件,并在这里分享吗?

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

    尊敬的 Vaibhav:

    我尝试用 zip 压缩模型工件、但尺寸仍然太大、无法上传。

    在下面的上传中、我删除了优化模型并压缩了目录的其余部分。 您可以通过 同事在上传模型时提供的链接下载优化模型。

    e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/yolopx_5F00_optimized.onnx 

    e2e.ti.com /cfs-file/__key/communityserver-discussions-components-files/791/yolopx_5F00_optimized.onnx  

    e2e.ti.com/.../yolopx_5F00_no_5F00_model.zip

    此致、

    Charanjit

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

    尊敬的 Charanjit:

    关于日志记录、您可以查看“edgeai-dl-infererer/dl_infererer/ti_dl_inferer_logger.cpp"<xmt-block0>“ src、静态 uint32_t gLogLevel = LogLevel::::error;它应该在同一个文件中使用 logSetLevel 函数进行更改、但我没有看到该函数在任何地方被调用、您可以探索此函数。 我们正在查看您的其他问题、并将在此处更新。
    其中一方面的信息是这样的

    该模型确实运行了、但由于代码在 python 中、速度非常慢。

    您可能还会看到 meta_arch 用于加快 https://github.com/TexasInstruments/edgeai-tidl-tools/blob/11_02_05_00/docs/od_meta_arch.md 的后处理速度