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.
工具与软件:
我正在尝试在 SDK10中启动示例 edgeai gstreamer 应用、但我遇到了一个问题。 使用 https://www.ti.com/tool/PROCESSOR-SDK-AM68A 中的默认预编译映像时、 可以通过访问/opt/edgeai-gst-apps/apps_python 并使用 python3 app_edgeai.py ./configs/启动系统并尝试演示应用 .yaml、一切都按预期运行。
但是、当我构建准备好的 Docker (通过 docker_build.sh 在/opt/edgeai-get-apps/docker 中调用./Docker)、然后运行该 Docker 时、并非所有模型都能正常工作。 例如、我可以运行 TFL-CL-0000-mobileNetV1-mlperf、但不能运行 ONR-CL-6360-regNetx-200mf。 似乎问题在于所有使用 onnxruntime 启动的模型,与所有这些模型一样,我得到以下输出:
[docker] root@am68-sk:/opt/edgeai-gst-apps/apps_python python3 app_edgeai.py ../configs/image_classification.yaml
libtidl_onnxrt_EP 已加载0x154c95a0
分段故障(已转储内核)
对于 SDK 版本10.00和10.01、使用 apps_cpp 而不是 apps_python 时、我也观察到相同的行为。 是否有某种解决方法允许我从 Docker 启动 ONR 模型?
您好!
感谢您提供信息。 您能否告诉我是否某些模型在 Docker 环境中失败或全部失败? 我问这个问题是因为如果 所有型号都出现故障、则说明设置有问题。 如果只有几个失败、则可能存在不受支持的图层。 我不确定为什么同一版本的主机和 Docker 之间会有增量、但安装脚本可能存在问题。
您能否在 edgeai-tidl-tools 中设置 Git 状态、并将输出发送给我以复制您的确切环境?
此致、
Chris
通过我尝试过的方法、这些模型可以正常工作
- TVM-CL-3090-mobileNetV2-tv
- TFL-CL-0000-mobileNetV1-mlperf
- TFL-OD-2020-ssdLite-mobDet-DSP-coco-320x320
- TVM-OD-5120-ssdLite-mobDet-DSP-coco-320x320
它们不能:
- ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640
- ONR-CL-6360-regNetx-200mf
- ONR-KD-7060-人体姿势-yolox-s-640x640
- ONR-OD-8200-yolox-nano-lite-mmdet-coco-416x416
对于 ONR、每次都是相同的内核转储。 我还包括使用 ONR-CL-6360-regNetx-200mf 从 apps_cpp 运行 app_edgeai 后 gdb 的反向跟踪:
e2e.ti.com/.../2437.ort_5F00_core_5F00_dump_5F00_backtrace.txt
尊敬的 Denys:
"git status"的输出是什么?
Chris
Chris、您好!
您需要从哪个存储库获取信息? 我使用预编译映像(www.ti.com/tool/PROCESSOR-SDK-AM68A)、因此/opt/edgeai-gst-apps 中的任何位置都没有.git 目录
您是在器件还是主机上运行它?
Chris
好的、我的下一个问题是、为什么要在设备上运行 Docker? 它用于在主机上形成隔离的环境。 设备上的环境是固定的(即您在 SD 卡上安装的任何环境)。 其中会出现一个问题、那就是 ONNX 模型是否已经在器件上编译过。 您能否向我发送指向您正在运行的图像(.wic.zx 文件)的链接? 我将查看一下。
Chris
我使用的是 Docker、因为文档中的建议是: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-am68a/10_01_00/exports/edgeai-docs/common/docker_environment.html
这是一个方便的开发环境、我可以在其中使用 apt 安装其他软件包、因此我不会受 Yocto 提供的软件包的限制。 我也有 Docker 正常工作与版本08.06.01和09.02.00相同的 SDK。
我使用此处的.wic.xz 映像: https://www.ti.com/tool/download/docker-AM68A/10.00.00.00.08、 而要构建、我按照文档中的说明使用 docker_build.sh 进行构建、使用 docker_run.sh 运行并在 PROCESSOR-SDK-LINUX 内运行 setup_script.sh。
好的、公平的、但为什么在目标上这样做呢? 它很慢而且容易出错。 这是他的指示的节选。
注释
使用提供的 Dockerfile 在目标上构建 Docker 映像需要大约15-20分钟才能完成、并具有良好的互联网连接。 在目标上构建 Docker 容器可能会很慢且资源受限。 提供的 Dockerfile 将在目标上构建而不会出现任何问题、但如果您添加更多软件包或从源构建组件、内存不足可能是一个常见问题。 作为替代方案、我们强烈建议尝试 QEMU 构建以在 PC 上交叉编译 ARM64架构的映像、然后将编译后的映像加载到目标上。
其背景是它可以工作、但在主机上构建隔离的 Docker 环境是更好/更快的想法。 我认为如果您没有 Linux 22.04系统的访问权限、而想使用 Docker 容器。 但在这种情况下、在大多数情况下、TIDL 不允许在目标上编译、因此您仍需要在主机上执行该操作。
Chris
感谢您的澄清。 我知道、在设备上构建 Docker 可能非常耗时或需要大量内存、但在本例中、它可以作为起点、因此无需执行任何其他设置。 我还假设在设备上构建的 Docker 映像或在其他系统上使用 QEMU 之间没有区别。
通常、编译(导入/量化任何当前流行语)和测试模型的最佳位置是在主机上。 正常流程为:
1.找到一个模型(最好从模型动物园)
2.在主机上训练(在 TIDL 之外或使用预先训练的模型)
3.在主机上编译它 ( python3 ./ onnxrt_ep.py -c -m 模型)
4.在主机上测试模型。 cd 到 edgeai-tidl-tools/examples/osrt_python/ort 并在器件上运行推理( python3 ./onnxrt_ep.py -m 模型)
5.将模型工件/和模型/复制到设备
6、 在器件上运行推理( 使用.out 文件或 OSRT python 运行)
您通常会在主机上得到比器件上更好的错误消息。 主机上的仿真效果不错、但临界情况可能取决于硬件的配置方式(人们可以想到已配置的存储器大小)。
Chris
感谢您的回答。 但我现在的主要目标是不编译模型、而是在器件上运行模型。 我在使用自定义模型的 Docker 中遇到同样的问题、在该模型中、我在"libtidl_onnxrt_ep loaded"后获得了 Segmentation Fault、但模型在 Docker 环境之外运行良好。 正如我在问题描述中提到的、我设法重现了 model_zoo 中所有 ONR 模型的问题。
所以基本上问题是 model_zoo 中的任何 ONR 模型都可以在设备上的 Docker 外部运行、但不能在设备上准备好的 Docker 容器内运行。 这会使我在需要时的开发变得非常复杂、例如 ROS、它仅在 Docker 内部提供、而在 Yocto 中不提供。
我想设备主机文件系统上的库和设备上的 Docker 容器内的库之间存在一些差异、但不幸的是、我无法确定问题的确切原因。
尊敬的 Denys:
我已经向开发团队发布了一个问题。 除非开发团队提前回答、否则我应该在1/27之前在 CCB 中给出答案。
此致、
Chris
Chris、您好!
我找到了可帮助您确定问题的其他信息。 似乎当我从主机文件系统(/usr/lib/libonnxruntime.so.1.14.0 +10000005)中将 in-docker /usr/lib/libonnxruntime.so (和 libonnxruntime.SO.1.14.0+10000000)替换为库、并在 Docker 内部重新编译 apps_cpp 时:
$ CD /opt/edgeai-gst-apps/apps_cpp/build
$ rm -r *
$ cmake .
$制造
、所有的 ONR 模型在启动/opt/edgeai-gst-apps/apps_cpp/bin/Release/app_edgeai.时开始工作 但是、该库替换仍然不会影响 apps_python