PyTorch中的GPU如何处理小批量生产?

时间:2020-07-05 00:27:35

标签: pytorch

我试图了解PyTorch实际上是如何在小批量生产中执行正向传递的。当小型批处理由网络处理时,微型批处理中的每个示例(例如,每个图像)是否都一个接一个地转发?还是迷你批处理中的所有示例都同时转发?

通过网络转发示例时,额外的内存需求是每一层的激活。而且只要网络不占用整个GPU,那么似乎可以同时存储这些激活的多个实例。然后,每个实例都可以用于在微型批处理中存储一个示例的激活。因此,可以同时通过网络发送多个示例。但是,我不确定这是否真的在实践中完成。

我做了一些简单的实验,向前通过的时间大约与小批量的大小成正比。这表明示例是一个接一个地发送的。如果是这样,那么为什么人们说小批量生产时训练速度更快?似乎整个时期的处理时间都不会取决于小批量的大小。

1 个答案:

答案 0 :(得分:1)

我试图了解PyTorch实际上是如何在小批量生产中执行正向传递的。当小型批处理由网络处理时,微型批处理中的每个示例(例如,每个图像)是否都一个接一个地转发?还是迷你批处理中的所有示例都同时转发?

同时全部。为此,它依赖于批处理,广播,用于非线性运算的元素逐矢量化(基本上是高度优化的for循环,有时甚至是并行运算)和矩阵线性代数。后者比for循环更有效,因为它可以利用为并行线性代数设计的专用硬件组件(对于cpu和gpu都是如此,但是gpu特别适合于此)。

然后,每个实例都可以用于在微型批处理中存储一个示例的激活。因此,可以同时通过网络发送多个示例。但是,我不确定这是否真的在实践中完成。

这不是它的工作方式,火炬跟踪“操作”,每个操作都有一个backward,用于计算输入到输出的梯度。它旨在支持批处理和矢量化,以便一次处理backward就可以一次处理一堆样本。

我做了一些简单的实验,向前通过的时间大约与小批量的大小成正比。

这不是事实。可能是因为您已经耗尽了100%的可用资源(cpu或gpu),或者是因为您没有正确地进行性能分析(这并不容易做到)。如果您举了一个例子,那么您会在这一点上帮助您。