0

我按照 Robert Crovella 的示例介绍了如何使用 Nvidia 的Multi-Process Service。根据文档

2.1.2. 减少 GPU 上的上下文存储

如果没有 MPS,每个使用 GPU 的 CUDA 进程都会在 GPU 上分配单独的存储和调度资源。相比之下,MPS 服务器分配一份由所有客户端共享的 GPU 存储和调度资源。

我理解为减少每个进程的上下文大小,这是可能的,因为它们是共享的。这将增加可用的 GPU 内存,从而能够并行运行更多进程。

现在,回到示例。没有 MPS:

MPS 禁用

使用 MPS:

启用 MPS

不幸的是,每个进程仍然占用几乎相同 (~300MB) 的内存量。这与文档不矛盾吗?有没有办法减少每个进程的内存消耗?

4

2 回答 2

2

糟糕,在检查另一张(Volta 之前)卡上的内存使用情况之前,我急切地问过,是的,实际上存在差异。如果其他人也偶然发现了这个问题,让我在这里发布以供将来参考:

MPS 关闭:

MPS 禁用

MPS 开启:

启用 MPS

于 2019-12-19T16:39:25.773 回答
0

确实,如此处所示在 Volta 架构中,您可以看到进程直接与 GPU 通信,中间没有 MPS 服务器:

Volta MPS 客户端直接向 GPU 提交工作,无需通过 MPS 服务器。

这可以从您的第一个屏幕截图中轻松看出,其中t1034进程被列为使用 GPU。

相反,在 Volta 之前的架构中,客户端进程通过 MPS 服务器与 GPU 通信。这导致在后一个屏幕截图中只看到 MPS 服务器进程直接与 GPU 通信。

于 2020-02-27T16:08:21.923 回答