【问题标题】:Is it possible to reuse GPU's memory when training a network with MxNet?使用 MxNet 训练网络时是否可以重用 GPU 的内存?
【发布时间】:2018-08-07 03:32:34
【问题描述】:

在训练网络时是否可以重用 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 更快。此外,可以使用大批量大小。

【问题讨论】:

    标签: machine-learning mxnet


    【解决方案1】:

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

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

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

    【讨论】:

    • 如您所料,有一种名为“memonger”的技术可以节省内存。另一位教授在discuss.mxnet.io/t/… 中提出了建议。不幸的是,它对我的​​电脑没有影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多