MPS 最佳实践&注意事项
概述
本文档介绍 GPU Manager 选择“性能最优型”时的 NVIDIA MPS 使用建议。该模式会使用 NVIDIA MPS 进行算力隔离,而 MPS 仅具备有限的容错能力,请在使用前仔细阅读以下内容。
MPS使用最佳实践
-
适合 MPS 的使用场景
MPS 仅推荐用于运行单个应用程序的协作进程,例如相同 MPI 作业的多个
ranks,以便内存保护和容错方案可用。当每个应用程序进程没有产生足够的工作负载使 GPU 饱和时,可以使用 MPS 在每个节点上运行多个进程,以实现更高的并发性。
程序中因为每个
grid的线程较少导致 GPU 利用率较低时,适合使用 MPS 技术提升性能。推荐的做法是:在每个grid中申请更少的block,在每次kernel调用中,让每个block启动更多的线程,以提高每个block的利用率。MPS 技术允许 CUDAkernel中其他进程使用剩余的 GPU 容量。 - MPS客户端优雅退出:使用性能最优型的容器进程退出前先执行发送SIGUSR1信号给MPS进程再等待2秒后最终退出,(此过程中MPS进程收到信号后会使mps客户端挂起,不再发送kernel)。
- MPS尽可能不要使用多GPU:通过MPS使用多卡时,容易引发故障传导,导致多卡上的任务都引发异常。
- 平台&业务层高可用:上层平台尽可能实现业务层高可用,并支持容错及迁移。
注意事项
-
MPS 容错能力
由 MPS 客户端进程生成致命异常(
fatal exception)时,与此客户端共享 GPU 的所有客户端都会收到该异常。MPS 发生
fatal exception后,并不会指示是哪个客户端生成了错误,受影响的客户端进程应自行捕捉fatal exception并退出。MPS 使用单卡时,运行在其他 GPU 上的客户端进程不受影响。
一旦观察到致命异常,MPS 服务器会等待与受影响 GPU 关联的所有客户端退出,并禁止新的客户端连接这些 GPU。当与受影响 GPU 关联的所有现有客户端都退出后,MPS 服务器会在受影响的 GPU 上重新创建 GPU 上下文,并继续处理客户端对这些 GPU 的请求。
MPS 服务端发生异常会导致所有客户端进程异常。
-
MPS 不支持多用户
mps server是用户级别的。不同用户(Linux user)使用 MPS 时,可能会出现一个用户等待另一个用户的mps server退出,从而导致进程假死的情况。 -
版本建议
推荐使用 CUDA 11.7 以上的版本。
-
官方说明
评价此篇文章
