mus*_*ser 0 cuda gpu gpgpu nvidia pytorch
这个问题可以与我的另一个问题相关查看。
我尝试并行运行多个机器学习进程(使用 bash)。这些是使用 PyTorch 编写的。在一定数量的并发程序(我的例子中是 10 个)之后,我收到以下错误:
RuntimeError: Unable to find a valid cuDNN algorithm to run convolution
Run Code Online (Sandbox Code Playgroud)
正如这个答案中提到的,
...发生这种情况的原因可能是达到了 VRAM 内存限制(从错误消息来看,这相当不直观)。
对于我的 PyTorch 模型训练案例,减小批量大小有帮助。您可以尝试此操作,或者减小模型大小以消耗更少的 VRAM。
我尝试了此处提到的解决方案,以强制执行每个进程的 GPU 内存使用限制,但此问题仍然存在。
对于单个进程或较少数量的进程,不会出现此问题。由于同一时刻只有一个上下文运行,为什么这会导致内存问题?
使用/不使用 MPS 时都会出现此问题。我认为 MPS 可能会出现这种情况,但其他情况则不然,因为 MPS 可能会并行运行多个进程。
由于同一时刻只有一个上下文运行,为什么这会导致内存问题?
上下文切换不会将 GPU“设备”内存(即 DRAM)的内容转储到其他位置。如果您耗尽了该设备内存,上下文切换并不能缓解这种情况。
如果运行多个进程,每个进程使用的内存将会增加(就像在 CPU 空间中一样),并且 GPU 上下文切换(或 MPS 或时间切片)不会以任何方式缓解这种情况。
完全可以预料的是,如果您使用 GPU 运行足够多的进程,最终您将耗尽资源。GPU 上下文切换、MPS 或时间切片都不会以任何方式影响每个进程的内存利用率。