基于Volta MPS执行资源配置下的多容器共享GPU性能测试
终于有机会再V100上做实验啦,接上篇博客《你真得了解多个docker容器如何共享GPU么?》,继续在GPU共享的道路上徘徊摸索。。。
一、实验背景
一般而言,多容器共享GPU会引发资源竞争和浪费的问题,不仅GPU利用率不高,也无法保证QoS。当使用NVIDIA MPS时,MPS Sever会通过一个CUDA Context管理GPU硬件资源,多个MPS Clients会将它们的任务通过MPS Server传入GPU,从而越过了硬件时间分片调度的限制,使得它们的CUDA kernels实现真正意义上的并行。特别地,Volta MPS可以兼容docker容器,并且支持执行资源配置(即每个Client context只能获取一定比例的threads),提高了多容器共享GPU的QoS。
二、实验目的
通过实验主要回答以下三方面问题:
- 开启/关闭MPS对多容器共享GPU的性能影响如何?
- Volta MPS的执行资源配置效果如何?
- 多容器共享GPU的公平性如何?
三、实验环境
系统:Ubuntu 18.04.1 LTS
内核:4.15.0-43-generic
显卡:Tesla V100-PCIE-16GB
软件:CUDA 10.0, NVIDIA-DOCKER 2.0, DOCKER 1.39, NVIDIA Drivers 410.48, gcc 7.3.0
四、实验步骤
- 开启与关闭MPS
第一部分,我们主要研究开启和关闭MPS对GPU性能的影响。默认情况下,GPU是没有开启MPS的,每个CUDA程序会创建自己的CUDA Context来管理GPU资源,并以时间分片的方式共享GPU。开启MPS后,在需要的时候,MPS control daemon会启动一个MPS Server,监听任务请求。
开启MPS的方式如下