深度学习入门学习小记录5——【Pytorch】,模型推理间隔较大时,推理耗时增加且存在波动

目录

前言

ChatGPT的回答:

实际测试

解决方法:

来自chatGPT的解答:


前言

最近在进行模型部署的工作,比较关注模型的推理耗时,发现相同的模型在推理时存在耗时波动。所以做了一些小测试,并做一下经验记录。

ChatGPT的回答:

【会话模式】这是因为在模型加载后进行推理时,PyTorch会将模型和数据加载到GPU或CPU中,并进行一系列的预处理和计算。在推理过程中,如果间隔时间很短,那么模型和数据都已经在内存中,可以直接进行计算,因此推理耗时较短且稳定。但是,如果间隔时间增大,可能会出现内存泄漏或者其他不可预测的因素,导致推理耗时偶尔会波动到较大的数值。因此,为了保证推理的稳定性和准确性,建议在模型加载后进行推理时,尽可能缩短间隔时间,避免长时间的空闲。

实际测试

 以如下推理过程为例:

    for i in range (0,  len( input_file_list) ):
        start = time.time()

        input = Image.open(input_file_list[i]).convert('RGB')
        input = to_tensor(input).to(device)[None]
        N, C, H, W = input.shape
        # input = F.interpolate(input, (768, 1536), mode='bilinear', align_corners=True)
        input = F.interpolate(input, (512, 1024), mode='bilinear', align_corners=True)


        result = model(input)
        # end = time.time()
        # print("inference takes about ", end - start, "secs.")

        result = F.interpolate(result, [H, W], mode='bilinear', align_corners=True)
        # start = time.time()
        result = torch.softmax(result, dim=1)
        result = torch.argmax(result, dim=1).cpu().numpy()
        result = result.transpose(1, 2, 0)
        result = render_semantic(result, color_maps)

        cv2.imshow("result", result)
        cv2.waitKey(1)


        end = time.time()
        print("postprocess takes about ", end - start, "secs.")
        #增加时间间隔
        time.sleep(0.05)

对比每次推理结束后,增加50ms的时间间隔与直接进行推理的耗时:

增加时间间隔 前:

深度学习入门学习小记录5——【Pytorch】,模型推理间隔较大时,推理耗时增加且存在波动_第1张图片

增加时间间隔后,明显看到推理时间出现波动,最大推理耗时甚至是原来的4倍左右:

深度学习入门学习小记录5——【Pytorch】,模型推理间隔较大时,推理耗时增加且存在波动_第2张图片

解决方法:

来自chatGPT的解答:

这个问题可能是由于PyTorch的动态图机制导致的。在PyTorch中,每次计算都会重新构建计算图,这可能会导致计算图的构建时间影响推理时间。因此,当推理间隔时间较短时,计算图的构建时间占比较小,推理耗时就会更短且稳定。而当推理间隔时间较长时,计算图的构建时间占比较大,可能会导致推理耗时波动较大。

为了解决这个问题,可以考虑以下几个方面:

1. 将模型加载到GPU上,以加速计算。

2. 预先构建计算图,以减少计算图构建时间。可以使用torch.jit.trace()或torch.jit.script()等函数将模型转换为静态图模式,并将其保存为.pt文件。在推理时,直接加载保存的.pt文件,就可以避免重复构建计算图的时间。

3. 对于多次推理的情况,可以使用批处理的方式进行推理,以减少计算图的构建时间和推理时间。

4. 对于推理耗时波动较大的情况,可以考虑使用更高效的推理算法或优化模型结构,以减少计算量和内存占用。

你可能感兴趣的:(深度学习入门,深度学习,学习,pytorch)