pytorch 在推理的时候,设置比较高的 batch_size 有用吗?

pytorch 在推理的时候,设置比较高的 batch_size 有用吗?

看了几篇关于 batch_size 的文章:

  • 机器学习中的batch_size是什么?
  • 神经网络术语:Epoch、Batch Size和迭代

这些文章讲到 batch_size 的时候,都是在『训练』场景下

如果我不是『训练』,而是『推理』,应该把 batch_size 设置为 1 还是 >1 呢?

为什么我有这个问题,因为我发现,我的程序在推理的时候,GPU 利用率只有60%-70% 之间,不能把 GPU 吃满


回答:

这个得根据真实的场景试一下。

比如提供线上服务,深度学习服务框架一般会提供两个有关的参数,一个是期望的 batch_size ,一个是为了凑够这个 batch_size ,可以等待多长时间。真实服务里,请求一般都不是按 batch 来的,而是一个一个来的,所以要用 batch 推理,就有些请求要等,等凑够了一起推理。但是线上请求时不能一直等的,所以有一个最大等待时间。等超时了,凑不够也要开始推理。这是推理的实际 batch_size 是动态的。

对这种服务来说,提升 batch_size 一般可以提升吞吐(每分钟处理的请求数),提升 GPU 使用率,但是会增加请求的响应时间(除了上面的等待,推理时间也经常会增加)。

如果是线下准备好了一堆数据来推理,那么就可以凑一个比较大 batch 。一般会比小 batch 快。

另外要注意输入的每条数据数据是不是一样长的。有些模型的输入长度的不定的,组 batch 的话就要 pad 的同样的长度,也会带来额外的消耗。


回答:

推理,不需要像训练时那样进行梯度反向传播和参数更新,因此推理的速度通常比训练快得多,但是内存使用率通常也更高。

设置较高的batch_size可以提高并行度,从而利用更多的计算资源,提高计算效率。具体而言,当GPU拥有足够的显存时,增加batch_size可以使GPU并行处理更多的数据,从而更好地利用GPU的并行计算能力,提高模型的吞吐量。但是,如果设置过高的batch_size,可能会导致显存不足,从而导致程序错误或性能下降。

因此,在推理中,通常需要根据系统配置和模型结构来选择合适的batch_size。如果系统拥有较大的显存和较强的计算能力,可以尝试增大batch_size,以提高计算效率。如果系统显存较小或模型结构复杂,可能需要减小batch_size,以避免显存不足和性能下降的问题。一般而言,需要进行一定的试验和调整,来找到最适合自己的batch_size。

如果您的模型已经在训练过程中被训练过并且不需要进行梯度更新,那么在推理时,将 batch_size 设置为1 可以降低推理所需的显存和计算量,从而减少推理时间。

当 batch_size 为 1 时,推理过程中只需要将单个样本输入到模型中,并计算输出。这样可以减少 GPU 加载数据的时间,降低显存占用率,从而提高推理效率。此外,当 batch_size 为 1 时,可以避免batch_size过大而导致的显存不足的问题,从而提高系统的稳定性。

如果您的 GPU 利用率不能被充分利用,可以考虑调整模型或者输入数据的格式,来尽可能利用 GPU 资源。此外,也可以考虑采用多个进程同时处理多个 batch,从而增加 GPU 的使用率。

以上是 pytorch 在推理的时候,设置比较高的 batch_size 有用吗? 的全部内容, 来源链接: utcz.com/p/938748.html

回到顶部