2368080_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2368080_zh-CN

2368080_zh-CN

TFLM 推理问题:在 同步动态随机存取存储器(SDRAM) 中使用大型 ASR 模型时出现意外输出 (i.MX RT1170 EVK)

恩智浦支持团队,您好、

在 i MX 上使用微控制器 TensorFlow Lite(TFLM)运行大型声学语音识别(ASR)模型时,我们遇到了推理准确性/行为问题。 i.MXRT1170。

由于模型和所需的张量范围超过了内部 SRAM,因此两者都明确放置在外部 同步动态随机存取存储器(SDRAM)。应用程序运行流畅,没有任何内存故障或崩溃,但是模型的数学输出不正确。

环境:
MCU:MIMXRT1170(Cortex-M7)

操作系统:FreeRTOS

框架: eIQ/TFLM

内存:模型和 Tensor Arena 完全位于外部 SDRAM 中

问题描述:
我们将模型数据加载 到外部 SDRAM 中并配置 MP U。

TFLM 微型解释器已初始化,AllocateTensors() 成功完成 (kTfLiteOk)。

我们将预先计算的浮点特征输入输入张量。为确保 DMA/内存一致性,我们会在推理之前手动使输入缓冲区的 DCache 失效。

interpreter.Invoke() 执行并成功完成,没有出现崩溃或 HardFaults。

问题:与在台式电脑上运行完全相同的模型和输入数据相比,解释器返回的输出日志完全不正确(或空白)。 已

采取的故障排除步骤:
输入验证:已验证输入到 MCU 张量的逐字节输入数据是否与我们成功的 PC Python 基准中使用的输入完全匹配 。

缓存管理:为 同步动态随机存取存储器(SDRAM) 区域配置 MPU,并确保 dCache 在推理之前失效,这样 Cortex-M7 就不会读取过时的内存。

OpResolver:验证模型所需的每个 TFLite 操作都已注册并得到支持。

团队要问的问题:
当大量矩阵操作完全 由外部同步动态随机存取存储器(SDRAM)执行时,恩智浦的TFLM实现中是否存在已知的精度损失问题或数学差异 ?

Cortex-M7 是否需要为外部 同步动态随机存取存储器(SDRAM) 配置特定的 MPU 属性配置(例如,强排序内存与普通内存),以确保 TFLM 准确计算权重/激活次数?

如果我们强制 TFLM 在紧密耦合内存 (DTC/ITC) 之外运行操作,是否应该禁用特定 eIQ 硬件加速器标志?

如能就调试 MCU 输出与 PC 基线之间的差异提供指导,将不胜感激。

谢谢、
普里耶什-沙希

Re: TFLM Inference Issue: Unexpected Outputs with Large ASR Model in SDRAM (i.MX RT1170 EVK)

嗨 、

从您分享的描述来看,该问题可能与缓存一致性问题有关,而不是数字精度限制。我建议对共享/DMA 更新的缓冲区使用不可缓存区域,而不是在推理之前使输入缓冲区的 DCache 失效。以下应用笔记更详细地描述了如何设置和使用不可缓存的内存区域:在 i.MXRT 上使用非缓存内存。请尝试使用这种方法,并告诉我是否有帮助。

解决您的具体问题:

1。我们没有任何记录在案的数据可以描述完全在外部同步动态随机存取存储器(SDRAM)上实现大量矩阵运算时的精度损失问题。

2。对于用作普通数据的外部 同步动态随机存取存储器(SDRAM),建议将其配置为普通内存,以确保可以将其配置为不可缓存。

3.没有任何特定的加速器标志作为正确路径记录下来,以确保在内部 RAM 外部正确执行 TFLM 操作。这也是为什么问题更可能与高速缓冲存储器处理而不是模型的实际运行有关的另一个原因。

BR,
Edwin.

Re: TFLM Inference Issue: Unexpected Outputs with Large ASR Model in SDRAM (i.MX RT1170 EVK)

嗨,埃德温、

我们已成功隔离了这个问题,并确认这是 CMSIS-NN 优化内核中的一个数学损坏错误(特别影响扩张卷积,而我们的 ASR 模型严重依赖扩张卷积)。

我们的证明:
1.我们使用纯标准的 C++ 参考内核(在编译期间省略了 " cmsis_nn " 目录)重新编译 " libtflm.a ",同时保持我们的 SDRAM 缓存处于活动状态,并使用安全的 DTCM 缓冲区进行 DMA 传输。
2.绕过 CMSIS-NN 后,模型立即开始成功解码正确的语音标记。例如,Chunk 7 正确输出"[ easy]" ,Chunk 10 正确输出"[ ch]" 。
3.当我们恢复到预编译的 CMSIS-NN 库时,执行速度下降到 537 毫秒,但输出完全损坏,所有数据块都恢复为空括号。

这证明我们的内存设置、高速缓存配置和 DMA 缓冲区完全正确,而 CMSIS-NN 优化的卷积/深度卷积路径在处理非统一扩张(扩张率大于 1)时出现了数学错误。

我们的问题:
-哪个版本的 eIQ SDK /CMSIS-NN 中间件包含 arm_convolve_s8 和 arm_depthwise_conv_s8 中扩张卷积(膨胀率大于 1)的官方错误修复?
-你能否向我们提供一个补丁或更新的 libtflm.a,它已经修正了 CMSIS-NN 内核,这样我们就可以实现完全的精度和优化的 537 毫秒推理速度?

敬上,
Priyesh shahi

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎06-09-2026 02:31 AM
更新者: