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.

[参考译文] AM69A:在推理期间查询 TDA4VH TIDL 堆内存限制

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1656201/am69a-query-on-tda4vh-tidl-heap-memory-limitation-during-inference

Thread 中讨论的其他器件: TDA4VH

尊敬的团队:

我们在 TDA4VH 平台上运行推理时遇到了问题、因为似乎是 TIDL 堆存储器限制、模型执行会失败。

我们在目标上观察到以下错误日志:

[C7x_1 ]   159.493769 s:vx_zone_error:[tivxspiVisionAllocMem:194]无法分配内存记录 5 @空间= 17、大小= 403751216!!!  
[C7x_1 ]   159.493799 s:vx_zone_error:[tivxspiVisionCreate:358] tivxspiVisionAllocMem 失败
[C7x_1 ]   159.493824 s:vx_zone_error:[tivxKernelTIDLCreate:1235] tivxihgiVisionCreate 返回 NULL

以下是该模型的详细信息:

  • 型号名称: ufldv2_culane_res34_320x1600.onnx
  • 型号大小: ~856 MB


----------------------------------------------------------------------------------------
|      TIDL 工具版本         |      11_02_04_00        
----------------------------------------------------------------------------------------
|     C7x 固件版本     |      11_02_04_00        
----------------------------------------------------------------------------------------
|       运行时版本         |       1.15.0          
----------------------------------------------------------------------------------------
|      模型操作集版本     |        11.           
----------------------------------------------------------------------------------------

该模型 使用 TIDL 工具成功编译、但当部署在目标板 (TDA4VH) 上时、推理失败、表明可用的 TIDL 堆内存不足。

我们希望澄清以下问题:

  1. TDA4VH 推理期间可用的最大 TIDL 堆存储器是多少?
  2. 是否可以增加目标上的 TIDL 堆存储器分配?
    • 如果是、需要修改哪些配置或参数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Poojary、

    我已将您的问题发送给有关 TDA4VH 协助的合适专家。  

    通常、您可以在 vision_apps/platform/j784s4/RTOS [1]下查看存储器映射信息(包括这些堆大小)并 PSDK-RTOS 的一部分。 有一个 system_memory_map.html 可对区域进行可视化(由于多 C7 用例中的交叉内核分配,会显示一些重复的区域)。  

    可以使用 gen_linker_mem_map.py 来修改 C7 堆大小。

    这是一个非常大的网络、因此您至少需要增加堆大小。 如果在 debug_level=2(适用于 OSRT)或 debugTraceLevel=2(适用于 TIDL_RT)运行 TIDL 网络、则应打印更多存储器要求详细信息。 您可能需要首先运行`ssource /opt/vision_apps/vision_apps_init.sh`才能查看正确的日志

    [1] https://git.ti.com/cgit/processor-sdk/vision_apps/tree/platform/j784s4/rtos?h=11.2.x_sdk 

    BR、
    Reese

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

    您好、

     感谢您的指导。

     首先启用 DEBUG_LEVEL=2 以捕获详细的存储器要求。 观察到的总数如下:

     可缓存持久:607,811.33 KB
    可缓存刮擦:8192.25 KB
    不可缓存持续:19.84 KB
    不可缓存的刮擦:182,461.39 KB


    基于此、我使用 gen_linker_mem_map.py 更新了堆大小(下面随附了更改):

     C7x 1 持久 DDR
    c7x_1_ddr_local_heap_non_cacheable_addr = ddr_mem_addr_hi;
    c7x_1_ddr_local_heap_non_cacheable_addr_phys = ddr_mem_addr_hi_phys;
    c7x_1_ddr_local_heap_non_cacheable_size = 1*MB;#changed
    c7x_1_ddr_local_heap_addr = c7x_1_ddr_local_heap_non_cacheable_addr + c7x_1_ddr_local_heap_non_cacheable_size;
    c7x_1_ddr_local_heap_addr_phys = c7x_1_ddr_local_heap_non_cacheable_addr_phys + c7x_1_ddr_local_heap_non_cacheable_size;
    C7x_1_DDR_LOCAL_HEAP_SIZE = 608*MB;#Changed
    total_c7x_1_local_DDR = c7x_1_DDR_local_heap_non_cacheable_size + c7x_1_DDR_local_heap_size;

     

    C7x 1 暂存 DDR
    c7x_1_ddr_scratch_non_cacheable_addr = c7x_1_ddr_local_heap_addr + c7x_1_ddr_local_heap_size;
    c7x_1_ddr_scratch_non_cacheable_addr_phys = c7x_1_ddr_local_heap_addr_phys + c7x_1_ddr_local_heap_size;
    c7x_1_ddr_scratch_non_cacheable_size = 183*MB;#changed
    c7x_1_DDR_scratch_addr = c7x_1_DDR_scratch_non_cacheable_addr + c7x_1_DDR_scratch_non_cacheable_size;
    c7x_1_DDR_scratch_addr_phys = c7x_1_DDR_scratch_non_cacheable_addr_phys + c7x_1_DDR_scratch_non_cacheable_size;
    C7x_1_DDR_Scratch_size = 9*MB;已更改
    total_c7x_1_scratch_DDR = c7x_1_DDR_scratch_non_cacheable_size + c7x_1_DDR_scratch_size

     

    修改内存配置后、我使用以下命令重建 SDK:  

    cd sdk_builder
    make_sdk.sh

    然后、我使用以下方法刷新了 SD 卡:

     umount /dev/sdb2
    umount /dev/sdb1

     cd ${PSDKR_PATH}
    sudo sdk_builder/scripts/mk-linux-card.sh /dev/sdb

     cd ${PSDKR_PATH}
    sdk_builder/scripts/德州 仪器 install_to_sd_card.sh

     cd ${PSDKR_PATH}/sdk_builder
    创建 linux_fs_install_sd

    此后、我重新安装了 Edge AI TIDL 工具并再次运行推理。 但是、我仍然遇到同样的问题。

     

    vx_zone_error:[tivxiangVisionAllocMem:194]无法分配内存记录 5 @ space = 17 且 size = 403751216!!
    vx_zone_error:[tivxiangVisionCreate:358] tivxiangVisionAllocMem 失败
    vx_zone_error:[tivxKernelTIDLCreate:1235] tivxspiVisionCreate 返回 NULL

     

    您能否建议是否需要在 gen_linker_mem_map.py 之外调整其他地区或配置以适应此大型模型?

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

    您好、

    您可以参考此 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j784s4/11_02_00_06/exports/docs/psdk_rtos/docs/user_guide/developer_notes_memory_map.html