前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CUDA 多进程服务工具MPS为啥这么有用?

CUDA 多进程服务工具MPS为啥这么有用?

作者头像
GPUS Lady
发布2019-11-01 16:15:52
5K0
发布2019-11-01 16:15:52
举报
文章被收录于专栏:GPUS开发者GPUS开发者

什么是MPS?

多进程服务(MPS)是CUDA应用程序编程接口(API)的另一种二进制兼容实现。MPS运行时架构被设计成透明地启用协作的多进程CUDA应用程序(通常是MPI作业),以利用最新的NVIDIA(基于kepler) gpu上的Hyper-Q功能。Hyper-Q允许CUDA内核在同一GPU上并行处理;这可以在GPU计算能力被单个应用程序进程未充分利用的情况下提高性能。

MPS是一个二进制兼容的客户端-服务器运行时实现的CUDA API,它由几个组件组成。

  • 控制守护进程——控制守护进程负责启动和停止服务器,以及协调客户端和服务器之间的连接。
  • 客户端运行时——MPS客户端运行时被构建到CUDA驱动程序库中,可以被任何CUDA应用程序透明地使用。
  • 服务器进程——服务器是客户端与GPU的共享连接,并在客户端之间提供并发性。

什么是Volta MPS?

Volta架构引入了新的MPS功能。与Volta之前 gpu上的MPS相比,Volta MPS提供了几个关键的改进:

  • Volta MPS客户端无需通过MPS服务器直接向GPU提交工作。
  • 每个Volta MPS客户端拥有自己的GPU地址空间,而不是与所有其他MPS客户端共享GPU地址空间。
  • Volta MPS为服务质量(QoS)支持有限的执行资源供应。

MPS的好处:

1.提高GPU利用率

单个进程可能无法利用GPU上所有可用的计算和内存带宽容量。MPS允许不同进程的内核和memcopy操作在GPU上重叠,从而实现更高的利用率和更短的运行时间。

2.减少了对gpu的上下文存储

在没有MPS的情况下,使用GPU的每个CUDA进程在GPU上分配独立的存储和调度资源。相比之下,MPS服务器分配一个GPU存储副本,并调度所有客户端共享的资源。Volta MPS支持增加MPS客户机之间的隔离,因此资源减少的程度要小得多。

2.减少GPU上下文切换

如果没有MPS,当进程共享GPU时,它们的调度资源必须在GPU上和GPU外进行交换。MPS服务器在所有客户端之间共享一组调度资源,从而消除了GPU在这些客户端之间调度时的交换开销。

什么时候使用MPS?

当每个应用程序进程没有产生足够的工作来饱和GPU时,MPS是有用的。可以使用MPS在每个节点上运行多个进程,以支持更多的并发性。这样的应用程序是通过每个网格中有少量块来识别的。

此外,如果应用程序由于每个网格只有少量线程而导致GPU占用率较低,则可以通过MPS实现性能改进。建议在内核调用中使用更少的每个网格块和更多的每个块线程来增加每个块的占用率。MPS允许从其他进程运行的CUDA内核占用剩余的GPU容量。

这些情况出现在强缩放的情况下,计算能力(节点、CPU核心和/或GPU计数)增加,而问题大小保持不变。虽然总的计算工作量保持不变,但是每个进程的工作量减少了,并且可能在应用程序运行时没有充分利用可用的计算能力。使用MPS, GPU将允许不同进程的内核启动并发运行,并从计算中移除不必要的序列化点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档