NVIDIA-MPS中如何控制每个客户端的资源

Posted

技术标签:

【中文标题】NVIDIA-MPS中如何控制每个客户端的资源【英文标题】:How to control the resource of each client in NVIDIA-MPS 【发布时间】:2021-11-30 13:06:22 【问题描述】:

在 nvidia-mps 中,我们通过运行 sudo nvidia-cuda-mps-control -d 来启动 mps-server,我有两个问题。

当我在同一服务器上有多个 GPU 时,如何指定运行 mps-server 的 GPU。 当我有多个并发进程时,如何控制分配给每个 mps 客户端的资源(例如计算和内存)?

【问题讨论】:

【参考方案1】:

CUDA MPS 文档会回答很多这样的问题。

当我在同一台服务器上有多个 GPU 时,如何指定运行 mps-server 的 GPU。

根据CUDA MPS doc 的第 2.3.4 节,当 MPS 服务器启动时,visible(通过 CUDA_VISIBLE_DEVICES)的 GPU 将确定它将使用哪些 GPU:

2.3.4. MPS on Multi-GPU Systems
The MPS server supports using multiple GPUs. On systems with more than one GPU,
you can use CUDA_VISIBLE_DEVICES to enumerate the GPUs you would like to use.
See section 4.2 for more details.

当我有多个并发进程时,如何控制分配给每个 mps 客户端的资源(例如计算和内存)?

在同一个文档的第 2.3.5.2 节中,为每个进程分配计算的主要方法是通过设置环境变量 CUDA_MPS_ACTIVE_THREAD_PERCENTAGE。当进程开始并初始化 CUDA 运行时或驱动程序 API 时,此环境变量的设置将确定其可用计算资源 (SM),以百分比表示。如果您有多个 GPU,它将是您的应用程序使用cudaSetDevice() 或类似名称选择的 GPU 上 SM 资源的百分比。

MPS 目前不提供按进程分配/分区的机制。

编辑:更新 - 2021 年 10 月 20 日公开发布的 CUDA 11.5 添加了 new feature,允许 MPS 中的每个客户端内存限制。

【讨论】:

以上是关于NVIDIA-MPS中如何控制每个客户端的资源的主要内容,如果未能解决你的问题,请参考以下文章

如何配置DNS客户端的

java socket如何实现客户端与客户端的交互?

多客户端的 HSQLDB 性能如何

如何在 CodeIgniter 3.x 中为来自客户端的每个请求验证 JWT 令牌

如何控制对等端的套接字[TCP打孔]

如何找到连接到服务器的客户端的 IP 地址?