使用MxNet训练网络时可以重用GPU的内存吗?

时间:2018-08-07 03:32:34

标签: machine-learning mxnet

训练网络时可以重用GPU的内存吗? 我正在按照官方说明构建SSD(https://gluon-cv.mxnet.io/build/examples_detection/train_ssd_voc.html#sphx-glr-build-examples-detection-train-ssd-voc-py) 当我尝试在GPU上训练时。我发现批处理大小受视频内存限制。有关如何使用许多GPU(http://zh.gluon.ai.s3-website-us-west-2.amazonaws.com/chapter_computational-performance/multiple-gpus.html)的准则。显然,如果我有足够的钱,那么我当然会有很多GPU。但是,如果我有一个带有少量内存的廉价GPU,我将永远不会使用大批量。与小批量生产相关的问题是培训过程可能永远不会收敛。请注意,神经网络中的参数没有同时使用。我们可以将使用中的参数移至GPU并将其他参数移出。这个想法很常见,因为我们在玩游戏时会重用内存。没有游戏可以将所有图形同时放入GPU。我想这种策略会降低GPU的速度,但它应该比单独使用CPU更快。此外,可以使用大批量。

1 个答案:

答案 0 :(得分:0)

所以您要问的基本上是“我们可以将部分激活移回RAM以便计算批次中的剩余样本吗?”

如果是这样,答案是“可能是,但是要付出很多速度”,因为从RAM到GPU的复制非常昂贵。

原因是您还必须再次将批处理复制回去以进行反向传播(至少我对GPU反向传播的内部假设是这样)。 那将意味着仅在CPU上计算批处理可能会更快,因为无论如何这都不会慢很多,因为您节省了昂贵的复制操作。此外,较小批量的SGD可以为actually beneficial to your convergence,因此我不明白为什么您会提出相反的意见(尽管对于NN,您永远都不知道,它可能仅取决于您的任务...)