代码之家  ›  专栏  ›  技术社区  ›  Blue Bird

在使用MxNet训练网络时,是否可以重用GPU的内存?

  •  -1
  • Blue Bird  · 技术社区  · 6 年前

    训练网络时是否可以重用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中。我想这个策略会减慢GPU的速度,但是应该比单独使用CPU快。此外,还可以使用大批量。

    1 回复  |  直到 6 年前
        1
  •  0
  •   dennlinger    6 年前

    所以你要问的基本上是“我们能把激活的一部分移回RAM来计算批中剩余的样本吗?”

    如果是这样,答案是“可能是的,但代价是速度太快”,因为从RAM到GPU的拷贝非常昂贵。

    原因是,您还必须再次复制批处理才能执行反向传播(至少我假设的是gpu上反向传播的内部机制)。 这意味着,只需在CPU上计算批处理可能会更快,因为这可能不会慢得多,因为您节省了昂贵的复制操作。另外,批量较小的SGD可以 actually beneficial to your convergence ,所以我不明白你为什么会提出相反的观点(尽管,与NN,你永远不会完全知道,这可能取决于你的任务……)。