【发布时间】: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