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

PyTorch中的GPU如何处理小批量?,pytorch,Pytorch,我试图了解PyTorch如何在一个小批量上执行向前传球。当网络处理小批量时,小批量中的每个示例(例如每个图像)是否逐个转发?或者小批量中的所有示例是否同时发送 当通过网络转发示例时,额外的内存需求是每层的激活。只要网络不占用整个GPU,那么似乎可以同时存储这些激活的多个实例。然后,可以使用每个实例化将一个示例的激活存储在minibatch中。因此,可以通过网络同时发送多个示例。然而,我不确定这在实践中是否真的做到了 我做了一些简单的实验,向前传递的时间大致与小批量大小成正比。这表明示例是一个接一

我试图了解PyTorch如何在一个小批量上执行向前传球。当网络处理小批量时,小批量中的每个示例(例如每个图像)是否逐个转发?或者小批量中的所有示例是否同时发送

当通过网络转发示例时,额外的内存需求是每层的激活。只要网络不占用整个GPU,那么似乎可以同时存储这些激活的多个实例。然后,可以使用每个实例化将一个示例的激活存储在minibatch中。因此,可以通过网络同时发送多个示例。然而,我不确定这在实践中是否真的做到了

我做了一些简单的实验,向前传递的时间大致与小批量大小成正比。这表明示例是一个接一个地发送的。如果是这样的话,那么为什么人们会说当小批量生产规模更大时,培训速度更快呢?似乎整个纪元的处理时间不取决于小批量大小

我试图了解PyTorch如何在一个小批量上执行向前传球。当网络处理小批量时,小批量中的每个示例(例如每个图像)是否逐个转发?或者小批量中的所有示例是否同时发送

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

然后,可以使用每个实例化将一个示例的激活存储在minibatch中。因此,可以通过网络同时发送多个示例。然而,我不确定这在实践中是否真的做到了

这不是它的工作原理,torch跟踪“操作”,每个操作都有一个
向后
用于计算输入wrt到输出的梯度。它被设计为支持批处理和矢量化,这样就可以像单次
向后
传递一样一次性处理一组样本

我做了一些简单的实验,向前传递的时间大致与小批量大小成正比


事实并非如此。这可能是因为您已经消耗了100%的可用资源(cpu或gpu),或者是因为您没有正确地进行分析(这不是很容易做到)。如果您发布了一个示例,那么您将尝试在这一点上提供帮助。

请在问题中发布您的简单实验代码和结果。