MPS 最佳实践&注意事项
更新时间:2024-02-05
GPU Manager 选择性能最优型时,会使用 Nvidia MPS进行算力隔离,MPS 只具备有限的容错能力,请仔细阅读以下内容以确保您对MPS有基本了解。
MPS使用最佳实践
-
适合MPS的使用场景:
- MPS仅推荐用于运行单个应用程序的协作进程,例如相同MPI作业的多个ranks,以便内存保护和容错方案可用。
- 当每个应用程序进程没有产生足够的工作负载使GPU饱和时,MPS是有用的。可以使用MPS在每个节点上运行多个进程,以实现更高的并发性。
- 程序中因为每个grid 的线程较少导致 GPU 利用率较低时,适合使用 MPS技术提升性能。推荐的做法是:在每个grid中申请更少的block,在每次kernel调用中,每个block下启动更多的线程,以提高每个block的利用率。MPS技术允许 CUDA kernel 中其他的进程使用剩余的 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以上的版本 官方说明:https://docs.nvidia.com/deploy/mps/index.html