专栏算法工具链J6M output_tensors输出均为0

J6M output_tensors输出均为0

爱学习的班马2026-03-27
23
7
OE包版本v3.0.31
芯片J6M

我在采用下面这段代码打印output_tensors中的数值时,为什么输出都是0呢?其中通过对quant.bc进行推理是结果是正确的,但是.hbm在板端输出就没有值,可以用python调用hbm进行推理看结果吗?

for (int i = 0; i < output_count; i++) {
hbUCPMemFlush(&output_tensors[i].sysMem, HB_SYS_MEM_CACHE_INVALIDATE);

}

hbDNNTensor &tensor = output_tensors[3];
int32_t data = reinterpret_cast<int32_t >(tensor.sysMem.virAddr);

// 打印前 20 个数值

printf("===== output_tensors[0] (int32_t) 前20个数值 =====\n");
for (int i = 0; i < 20; ++i) {
printf("%d ", data[i]);

}

printf("\n");
算法工具链
技术深度解析征程6
评论1
0/1000
  • Huanghui
    Lv.5
    你要,您这边有几个问题需要注意和确认:
    1. J6M工具链的版本:目前工具链已经迭代到了3.7.x了,v3.0.31是一个很老的一个版本了,建议升级,新版本下载地址:地平线算法工具链 Horizon OpenExplorer
    2. output_tensors[3]的数据类确定是int32_t吗,如果类型确定没有问题的,且i 20都是valid数据,且结果正确情况下就不应该为0,那这里确实有问题。
    3. 更多的尝试:
    3.1 使用hb_verifier对比quant.bc和.hbm的一致性,如果验证结果为false,考虑板端推理库版本问题,建议升级到工具链配套版本。
    3.2. server端也可以通过hrt_model_exec infer模式推理 hbm模型进行验证。
    2026-03-27
    0
    6
    • 爱学习的班马回复Huanghui:

      我查论坛好像OE包与SDK版本不对齐也会有这个问题,我再进行排查一下

      2026-03-27
      0
    • 爱学习的班马回复Huanghui:
      哦哦,说错了,我现在的QAT流程以及hbm的编译都是在OE包3.7.0版本进行的,其中我打印出output_tensors[3]的数据类型与字节数是HB_DNN_TENSOR_TYPE_S32, 4字节
      2026-03-27
      0
    • 爱学习的班马回复Huanghui:

      还有一点就是我在采用hrt_modeo_exec infer进行推理的时候,我看模型的输入有cached_ancher以及cached_feature这些,这种我们怎么给输入呢?

      2026-03-27
      0
    • 爱学习的班马回复Huanghui:
      2026-03-27
      0
    • 爱学习的班马回复爱学习的班马:

      hrt_model_exec执行出来的输出数据类型与我们打印的数据类型是对得上的

      2026-03-27
      0
    • Huanghui回复爱学习的班马:
      不是呀,从你的输出看,output_tensors[3];这个的输出不是S8的嘛,你的代码中是reinterpret_castint32_t >(tensor.sysMem.virAddr);这个没对呀
      2026-03-27
      0