如何在NVIDIA-MPS中指定运行GPU及控制各客户端资源分配
NVIDIA MPS 常见问题解答
问题1:多GPU服务器中指定MPS Server运行的GPU
MPS Server启动时会读取环境变量绑定目标GPU,多卡场景下操作方法如下:
- 单MPS实例场景:启动服务前先通过
CUDA_VISIBLE_DEVICES绑定指定GPU即可# 绑定0号GPU作为MPS服务的运行载体 export CUDA_VISIBLE_DEVICES=0 sudo nvidia-cuda-mps-control -d - 多MPS实例场景(每块GPU对应独立MPS服务):需要额外为每个实例配置独立的管道、日志目录避免冲突,示例如下:
客户端接入时设置和目标实例相同的# 启动0号GPU对应的MPS实例 export CUDA_VISIBLE_DEVICES=0 export CUDA_MPS_PIPE_DIRECTORY=/tmp/nvidia-mps-gpu0 export CUDA_MPS_LOG_DIRECTORY=/var/log/nvidia-mps-gpu0 sudo nvidia-cuda-mps-control -d # 启动1号GPU对应的MPS实例 export CUDA_VISIBLE_DEVICES=1 export CUDA_MPS_PIPE_DIRECTORY=/tmp/nvidia-mps-gpu1 export CUDA_MPS_LOG_DIRECTORY=/var/log/nvidia-mps-gpu1 sudo nvidia-cuda-mps-control -dCUDA_MPS_PIPE_DIRECTORY环境变量,即可接入对应GPU的MPS服务。
问题2:控制MPS客户端的计算、显存资源分配
MPS提供原生配额机制,可针对全局默认值或单个客户端分别设置资源上限:
计算资源配额控制
按GPU活跃线程占比分配算力,最小粒度为1%:
- 全局默认配额:所有新启动的客户端默认生效
# 所有新客户端默认最多占用30%算力 echo "set_default_active_thread_percentage 30" | nvidia-cuda-mps-control - 单个客户端配额:针对已运行的客户端设置,需要提前获取客户端的PID
# 给PID为1234的客户端分配40%算力 echo "set_active_thread_percentage 1234 40" | nvidia-cuda-mps-control
显存资源配额控制
CUDA 11及以上版本支持显存配额限制,支持按比例或绝对值设置:
- 全局默认显存配额
# 所有新客户端默认最多占用40%的GPU显存 echo "set_default_device_memory_limit 40%" | nvidia-cuda-mps-control # 也可设置绝对值,例如最多分配8GB显存 echo "set_default_device_memory_limit 8589934592" | nvidia-cuda-mps-control - 单个客户端显存配额
# 给PID为1234的客户端分配20%显存 echo "set_device_memory_limit 1234 20%" | nvidia-cuda-mps-control
注意:所有客户端的显存配额总和不能超过对应GPU的总显存,超出部分的客户端申请显存时会直接触发OOM错误。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

