Nvidia MPS 的简单介绍
本文最后更新于 2024年5月4日 凌晨
PPT: https://www.nvidia.cn/content/dam/en-zz/zh_cn/assets/webinars/31oct2019c/20191031_MPS_davidwu.pdf
视频: https://info.nvidia.com/228093-ondemand.html (bilibili转载版本)
背景
对于这样一个 cuda 进程 :
发射一个进程和同时发射四个进程, 四个进程的 每个进程 执行时间都是单个进程的 4 倍, 说明实际上进程是 「串行执行」的
Cuda Context
cuda context 是如何切换的
这里以三个进程切换为例:
实际上 GPU 的进程执行是一种 「轮转调度」 的方式, 每个进程的 context 在不断被切换, 每个时刻只有一个进程在 GPU 上执行, 无法达到「并行」, 并且由于上下文切换的开销, 吞吐率反而下降.
Hyper-Q (queue)
Hyper-Q 是一个需要 硬件支持 的特性, 允许多个 CPU 线程或者进程同时 加载任务 到一个 GPU 上, 实现 CUDA kernels 的 并发执行
Hyper Q 支持的连接类型
- Multi cuda streams
- Multi cpu threads
- Multi cpu processes (MPS)
Hyper Q 的好处和限制
有 Hyper Q 和没有 Hyper Q 的区别
示例代码:
当没有 Hyper Q 时 (只有前一个 stream 的最后一个 kernel 和下一个 stream 的第一个 kernel 存在 overlap):
当存在 Hyper Q 时:
MPS (Multi-Process Service)
MPS 的好处和使用限制
最大用户连接数量即 可并发执行的进程数量
MPS 的使用
MPS 的使用无须修改程序代码, 只需要修改程序运行的「模式」
1 - 设置 GPU 的独占模式
相当于设置 GPU 上只允许有一个 context
1 |
|
2 - 启动 MPS 守护进程
1 |
|
3 - 查看是否正在执行 MPS 守护进程
1 |
|
4 - 使用 MPS 运行应用程序
5 - 停止和监视
6 - 性能分析 (nvprof)
Nvidia MPS 的简单介绍
https://moreality.net/posts/1991/