You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NCS AsyncInferQueue推理返回旧结果而非正确结果问题求助

AsyncInferQueue推理结果重复问题的原因与解决方法

问题原因

你遇到的重复结果问题,核心原因是AsyncInferQueue中的InferRequest对象是循环复用的,而你在回调函数中直接保存了输出张量的引用,没有复制数据:

  • 当设置jobs=1时,所有推理任务复用同一个InferRequest实例,后续推理完成后会覆盖该实例的输出内存,最终所有结果都指向最后一次推理的输出
  • 当设置jobs=2时,队列维护两个InferRequest实例,奇偶索引的任务分别复用这两个实例,因此结果会按索引奇偶重复

你打印的tensor.sum()已经证明输入是唯一的,但输出引用被复用覆盖,导致结果重复。

解决方案

在回调函数中复制输出张量的数据,而不是保存引用。修改回调内的result赋值逻辑,使用numpy的复制方法:

def _cb(
    infer_request: InferRequest, userdata: Any
) -> None:
    res.append(
        AsyncInferenceResult(
            id=userdata, result=np.copy(infer_request.output_tensors[0].data[:])
        )
    )

或者也可以使用张量的原生复制方法:

result=infer_request.output_tensors[0].data[:].copy()

关键注意点

  • 不要直接保存infer_request.output_tensors或其data属性的引用,这些资源属于复用的InferRequest实例,会被后续推理任务覆盖
  • 异步推理场景下,必须确保每个请求的结果被独立存储,避免内存共享导致的数据覆盖问题

内容的提问来源于stack exchange,提问作者Axel Jacobsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:49:59