【问题标题】:Memory issue in running multiple processes on GPU在 GPU 上运行多个进程的内存问题
【发布时间】:2022-12-01 02:04:33
【问题描述】:

这个问题可以查看my other question相关。

我尝试并行运行多个机器学习进程(使用 bash)。这些是使用 PyTorch 编写的。在一定数量的并发程序(在我的例子中是 10 个)之后,我得到以下错误:

RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

in this answer所述,

...这可能是因为达到了 VRAM 内存限制(从错误消息来看是相当不直观的)。

对于我使用 PyTorch 模型训练的案例,减少批量大小有帮助。您可以尝试这样做,或者减小模型大小以消耗更少的 VRAM。

我尝试了here 中提到的解决方案来强制执行每个进程的 GPU 内存使用限制,但这个问题仍然存在。

单个进程或较少数量的进程不会出现此问题。由于在一个时刻只有一个上下文运行,为什么这会导致内存问题?

使用/不使用 MPS 时都会出现此问题。我认为 MPS 可能会发生这种情况,但不会发生,因为 MPS 可能会并行运行多个进程。

【问题讨论】:

  • 是的,如果你要求太多的内存,计算机可能会崩溃。这不是特定于 GPU 的,您也可以尝试在您的 CPU 中分配一个 10000000GB 的数组并让您的代码崩溃。你的问题是什么?
  • @AnderBiguri 如前所述,问题不会发生在具有相同性质的单个进程中,而是会同时运行 10 个进程。为什么会发生这种情况,因为 GPU 一次只运行 1 个进程?
  • GPU 是专门为并行处理而设计和构建的设备。为什么你认为它同时只做一件事?它会计算一次做一件事,只有当计算量大于其处理能力时,仅此而已。许多进程可以同时在 GPU 上运行,这是完全可以预期的(例如,您可能随时都在运行显示和计算)。检查nvidia-smi 以查看在 GPU 中同时运行的所有不同进程。
  • @AnderBiguri 同时,您的意思是并行吗?我明白为什么显示和计算出现并行发生,但它们是顺序发生的。
  • 当 GPU 正在执行多个进程时(一个接一个,例如通过抢占),内存是否同时(完全)被多个进程使用?即使是那些 GPU 目前没有执行的?

标签: pytorch cuda gpu nvidia gpgpu


【解决方案1】:

由于在一个时刻只有一个上下文运行,为什么这会导致内存问题?

上下文切换不会将 GPU“设备”内存(即 DRAM)的内容转储到其他位置。如果您用完此设备内存,上下文切换不会缓解这种情况。

如果您运行多个进程,则每个进程使用的内存将加起来(就像在 CPU 空间中一样)并且 GPU 上下文切换(或 MPS 或时间切片)不会以任何方式缓解这种情况。

完全可以预料,如果您使用 GPU 运行足够多的进程,最终您将耗尽资源。 GPU 上下文切换、MPS 或时间分片都不会以任何方式影响每个进程的内存利用率。

【讨论】:

  • 像往常一样,罗伯特能够用更好的语言表达我在 cmets 中的意思;)。谢谢。
  • 谢谢你。这回答了这个问题。您是否知道任何限制这种使用的解决方案(PyTorch 或 TF 特定的)?我在问题中提到的那些似乎不起作用。
  • @abs 使用更少的内存?购买更大的 GPU?确保您阅读了可用的 GPU 规格,并相应地安排?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多