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.

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

Guru**** 2465890 points
Other Parts Discussed in Thread: AM67A, AM68A, SK-AM62A-LP

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

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

器件型号:EDGE-AI-STUDIO
主题中讨论的其他器件:AM68A、AM67A SK-AM62A-LP

工具与软件:

我们经常收到与 SDK 版本和 TI 深度学习(TIDL)相关的疑问。 请在下面查找一系列相关常见问题解答主题。 请注意、这些主题与 AM6xA SoC (如 AM62A 和 AM68A)上的 Linux/边缘 AI SDK (它们将 C7xMMA AI 加速器与 TIDL 结合使用)密切相关。 有些主题对于 TDA4x SoC 也适用。

  • 在某些情况下、SoC 是按 J7x 软件名称引用的、例如 j721e、j721s2、j784s4和 j722s

 

太长;未读(TL;DR):

  • 是的、SDK 版本对于 TIDL 堆栈很重要 .
  • 一个模型被编译到 TIDL 工件(一系列文件)中。 这些工件链接到特定的主要+Minor SDK 版本(例如09.02、10.01和 SoC)并进行了优化。
    • 这些模型工件将在已安装的该版本 SDK 中工作。
    • 模型工件仅可在其编译目标的 SoC 上使用。

 

此处涵盖的问题:

  1. 如何知道与 TIDL 伪影相比、SDK 版本是否错误
  2. SDK 中是否存在 TIDL 版本的向后兼容性?
  3. Edge AI SDK 中的哪些库属于此版本控制?
  4. 为单独工程管理多个 TIDL 版本的建议

 

请注意、您可以使用 EDGEAI_SDK_VERSION 环境变量在 Edge AI SDK (AM6xA SoC、例如 AM62A)中检查 SDK 版本、如下所示:

echo $EDGEAI_SDK_VERSION
10_00_00

在调试 TIDL 和其他视觉相关任务时、通常建议在后台运行 TI OpenVX 记录器:

/opt/vx_app_arm_remote_log.out & 

TIDL 相关工具、文档和其他信息的最新来源是 Github 上的 edgeai-tidl-tools 存储库。 有关 SDK 版本和支持的组合的最完整信息、请参阅 version_compatibility_table.md。 请注意、此库受到严格的版本控制、具有与 SDK 版本和 TIDL 错误修复版本相关的标签。 这些版本还介绍了新功能、修复的错误和已知问题。

例如、对于 SDK 10.0、标签为10_00_08_00 -> 10_00;对于 bugfix 版本8、标签为_08_00

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

    问题1:我编译了模型、但未在目标上运行。

    我看到奇怪的输出、不知道如何解释。 这些打印输出中的任何一个意味着什么?

    在模型初始化期间从 stdout 中执行:

    ```μ A

    TIDL_RT_OVX:错误:配置文件大小(94616字节)与 sTIDL_IOBufDESC_t (37272字节)的大小不匹配

    ```μ A

    以及来自 TI OpenVX 记录器/opt/vx_app_arm_remote_log.out 的打印输出:

    ```μ A

    vx_zone_error:[tivxKernelTIDLCreate:910]网络版本- 0x20240215、预期版本- 0x20240401

    ```μ A

    A1:这意味着您拥有的模型工件文件与所安装的 SDK 不兼容。

    要解决该问题、您可以修改安装到器件的 SDK 版本、或者重新编译模型工件以定位您已安装的 SDK。

    第一份打印输出中的配置文件大小是指模型工件中以"tidl_io_1.bin"结尾的文件。 它会将此文件的大小与预定义的结构 sTIDL_IOBufDESC_t 进行比较 随着软件成熟和添加了更多功能、此结构的大小也增加了。 结构大小的值越高、意味着您安装的 SDK 版本比工件目标版本更高。 如果第二个值较小(如上所示)、则已安装的 SDK 比工件所针对的版本更旧。 上面显示了在9.1 SDK 上使用的10.0 SDK 中的伪影。

    另一种可能是为不同的器件编译了提供的网络工件、例如 AM62A 与 AM67A。 根据您要面向的 SoC 和 SDK 与使用的 SoC 和 SDK、错误可能会显示不同

     

    同样、vx_zone_error 表示提供的网络文件与工具预期的版本不匹配。

    如果网络版本字符串为0x00000000、则模型编译/导入过程未完成。 在目标器件/SDK 上、这不是问题。 请调查编译日志以诊断问题。

     

    请确保您正在为正确的 SDK 版本和 SoC 编译/下载模型工件。

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

    Q2:SDK 中是否存在 TIDL 版本的向后兼容性?

    我遇到一个错误、正在等待修复。 此修复程序在最新的 SDK 中可用、但我是围绕以前的 SDK 版本进行设计的、无法升级整个 SDK。 如何在我的 SDK 版本中获得这些错误修复?

    A2:从10.0 SDK 开始、我们支持与之前 SDK 版本的向后兼容性

    • 对于10.0版本中的 TIDL 修复、这些修复程序可以应用于 SDK 9.2或10.1
    • 对于10.1版本中的 TIDL 修复、这些修复程序可应用于 SDK 10.0或10.1
    • 在 edgeai-tidl-tools 存储库中找到的 bugfix 版本根据 bugfix 编号(版本字符串中的最后一个数字)遵循此约定。 这些程序成对发布:
      • 奇值与以前的 SDK 兼容
      • 偶值与当前的 SDK 兼容
    • 直到 v9.1 SDK 发布之前、由于与 TIDL 相关、因此与另一个 SDK 不存在向后/交叉兼容性。 在这种情况下、唯一的解决方案是移植 TIDL 堆栈(本常见问题解答中未涉及)
    • 请参阅 version_compatibility_table.md 页面中的确切详细信息

    要启用向后兼容性、需要执行UPDATE_TARGET.md 文档中所述的步骤。 这些步骤说明了如何在前一个 SDK 版本上使用最新的错误修复版本(奇数值)。  这些步骤将介绍如何通过支持脚本修改各种软件组件。 要更新的组件包括:

    • 开放源码运行时(OSRT)库–tensorflow-lite、onnxruntime、DLR
      • 包括头文件(.H 文件)、主库(.so 或.a 文件)
      • 通过 pip 方式安装 Python 库(.whl 文件)、这些文件是从 TI 下载的文件
    • TI 库
      • Arm 上用于控制加速器和其他组件的库(Linux 中的.so 文件)
        • /usr/lib/libtivision_apps.so、/usr/lib/libvx_tidl_rt.so、/usr/lib/libtidl_onnxrt_EP.so、/usr/lib/libtidl_tfl_delegate.so
      • C7x 的固件(/lib/firmware 下的二进制文件
        • 根据 SoC 的不同、可能有多个 C7x 实例、因此会有多个固件二进制文件

    请注意、提供的固件和 TI 库与 TI 评估硬件(如 SK-AM62A-LP 入门套件板)兼容。

    固件和库链接到整个 Soc 中使用的存储器映射。 对于使用不同大小的 RAM/DDR 或不同存储器映射分区的定制硬件、用户必须重建这些固件。

    • 在这种情况下、可能需要使用 PSDK RTOS 或固件构建器软件包(请参阅产品页面下 SoC 的软件)以及最新版本的 c7x-MMA-tidl 和 MMALIB 软件包。 在这种情况下、请与您的现场/销售代表联系、或者在超过1个主要版本之间进行移植。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Q3:Edge AI SDK 中的哪些 TI 库对于版本敏感且相关?

    A3:有多个库连接到 SDK 版本、作为边缘 AI 软件栈的一部分。

    从最基本的层面来说、这些问题是:

    • /usr/lib/libtivision_apps.so
    • /usr/lib/libvx_tidl_rt.so

    这些库控制 TIDL 和 TIOVX、后者管理 SoC 上的 IPC 以及用于访问 SoC 上硬件加速器的其他基本 API。 这些库包括在 SDK 中。

    此外、与之相关的还有开源运行时库、它们将对上述两个库有某种程度的依赖:

    • /usr/lib/libtidl_onnxrt_EP.so、
    • /usr/lib/libtidl_tfl_delegate.so

     

    除了 SDK 中包含的这些.so 文件之外、Linux 用户空间中还有几个支持工具和库。 ‘都包含在目标文件系统的/opt 下、并从"edgeai-"开始。

    这些 edgeai-工程也可在TI 的 GitHubti.com/cgit 上找到

    虽然这些并非针对 SDK 进行版本锁定、但它们经过验证并标记到 SDK 中、以帮助跟踪和再现。 这些 repos 都是从edgeai-app-stack 存储库引用的。 此库支持交叉编译、以便可以一起构建用户级 gstreamer、tiovx 和其他支持工具。

     

    同样、模型训练和开发工具的版本从edgeai-tensorlab存储库跟踪。 请注意、与其他 edgeai-tools 相比、这些模型训练工具具有更多的外部依赖项、因此最好从干净的环境(例如 Docker 容器或 python 虚拟环境)开始。

    虽然已训练的模型与版本无关、但 TIDL 编译的模型与版本无关

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

    Q4:我有多个项目,在管理不同的版本和依赖性方面遇到困难。 您有什么建议吗?

    我发现版本控制令人沮丧、我一直在为自己制造依赖性冲突。 管理此问题的好方法是什么?

    答4:有几种方法可以解决这个问题--请参阅下面的建议

    首先、请了解以下上下文要点:

    • 使用一组 tidl_tools 编译模型、其中包括一小部分二进制文件、共享对象库(.so 文件)和一些头文件。
      • tidl_tools 版本特定于 SDK 版本和 SoC
        • 在存储库设置期间、可以从 TI 站点下载这些工具
      • 我们发布了 bugfix tidl_tools 和 edgeai-tidl-tools、其中多个版本都与单个 SDK 版本兼容
        • g. 10_00_06_00和10_00_08_00都可用于 SDK 10.0
      • Tensorflow-lite 和 ONNXRuntime 等开源运行时提供了也支持 TIDL 的 API。 这些特定于 SDK 发布版本、但针对 SoC
        • 这些通常通过 python 版本控制来管理

    因此、虽然 Tidl_tools 和 OSRT 的 python 版本是相关的、但它们并不完全是1:1。 您可以为多个 tidl_tools bugfix 版本和/或 SoC 目标使用一组 python 依赖项。

    建议1. :对每个 SDK 版本 x.y 使用单独的环境(例如9.2、10.1 ),因为某些依赖关系可能会发生变化。 Docker 和虚拟 python 环境在这里都是不错的选择

    • 在此处的 edgeai-tidl-tools 中查找 Docker 信息
    • 对于 python、有多个虚拟环境管理器。 VENV 内置在 Python 中、是完全可以接受的
      • python3 -m venv ./venv-tidl-tools-SDKvX.Y #create venv
      • source ./venv-tidl-tools-SDKvX.Y/bin/activate #activate 虚拟环境

    创建并激活虚拟环境后、运行典型的设置脚本(edgeai-tidl-tools/setup.sh)

    建议2. :如果使用多个 tidl_tool 处理多个 SoC 或版本,请重命名以指定工具的标签/版本及其目标的 SoC

    安装工具后、tidl_tools 是一个通用命名的目录、不明确表示 SoC 或版本字符串。 将其添加到目录名称中会很有帮助

    tools 目录的实际名称不重要。 这些工具的路径应导出为 TIDL_TOOLS_PATH。

    建议3. :创建一个帮助程序脚本,为 TIDL 设置环境。

    ‘s可以执行此操作(如果使用"source"调用)、但也将默认下载和安装其他软件 setup.sh。 需要注意的主要环境变量是

    • TIDL_TOOLS_PATH、
    • SoC 和
    • LD_LIBRARY_PATH (用于 python 查找本地 OSRT 库)

    下面是此类 bash 脚本的一个示例:

    #!/bin/bash
    source ./venv-tidl-tools-SDKvX.Y/bin/activate  #setup python virtual environment
    
    export SOC=am62a #or use argument
    #Setup TIDL_TOOLS_PATH; if there is an argument, assume it’s tidl_tools path. If empty, use default
    if [ -z $1  ]; then
        export TIDL_TOOLS_PATH=`pwd`/tidl_tools
    else
        export TIDL_TOOLS_PATH=`pwd`/$1
    fi
    export LD_LIBRARY_PATH=$TIDL_TOOLS_PATH:$TIDL_TOOLS_PATH/osrt_deps:$LD_LIBRARY_PATH
    

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

    Q5:我使用的是 SDK 9.x、似乎所有模型都无法编译。 我看到一个奇怪的错误消息和伪影被生成、但是它们不能被用在目标 SOC 上。 近况如何?

    对于如下错误:

    ------------------ Network Compiler Traces -----------------------------
    NC running for device: 4
    Running with OTF buffer optimizations
    Segmentation fault (core dumped)
    Could not open /CORRECTED_PATH/edgeai-tidl-tools/model-artifacts/cl-ort-resnet18-v1/tempDir/subgraph_0_tidl_net/perfSimInfo.bin
    WARNING: [TIDL_E_DATAFLOW_INFO_NULL] Network compiler returned with error or didn't executed, this model can only be used on PC/Host emulation mode, it is not expected to work on target/EVM.
    

    这是2024年底附近发现的 SDK 9.0、9.1、9.2的已知问题。 虽然进程/API 调用确实会无误退出、但重要的底层子进程未能完成、从而导致不完整的模型伪影。

    此行为已链接到开发机器上的 Linux 内核版本(使用`uname -r`检查您的内核版本)。

    我们发现6.8内核(例如、我的计算机是6.8.0-51通用)显示了这种行为、而以前的 Linux 内核则没有。 没有发现内核6.5.5有这个问题-完全相同的 tidl-tools、代码、模型等的编译完成 此问题与 Linux 内核版本有关。 对于 SDK 10.0和10.1版本、TIDL 工具不存在此问题。

    尽管我们努力解决该问题、但有一些权变措施:

    • 将 Linux 内核降级到6.5
    • 将您的 SDK 升级到10.x 或更高版本、即10.0或10.1版本