【问题标题】:How to reduce CUDA context size (Multi-Process Service)如何减少 CUDA 上下文大小(多进程服务)
【发布时间】:2020-04-12 03:54:45
【问题描述】:

我关注了 Robert Crovella 的 example,了解如何使用 Nvidia 的 Multi-Process Service。根据docs

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

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

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

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

还有 MPS:

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

【问题讨论】:

  • 从您链接的文档中,在您引用的句子之后:“Volta MPS 支持 MPS 客户端之间增加的隔离,因此资源减少的程度要小得多。”
  • @tera 糟糕,我对这句话的关注太少了……你知道这种孤立的原因吗?安全吗?
  • 您在主机系统上拥有访问权限和单独的地址空间的相同原因 - 您不希望 CUDA 代码返回错误结果或您的 GUI 只是因为碰巧运行了一些其他代码同时写入一个流浪指针。

标签: cuda gpu gpgpu cuda-context multi-process-service


【解决方案1】:

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

MPS 关闭:

MPS 开启:

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-23
      • 2010-12-18
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2014-11-18
      • 2017-01-10
      • 2013-03-20
      相关资源
      最近更新 更多