管理多个GPU与多个用户

9

我有一台服务器(Ubuntu 16.04),带有4个GPU。我的团队共用这台服务器,我们目前的做法是使用Docker将所有工作容器化,并使用类似于 $ NV_GPU=0 nvidia-docker run -ti nvidia/cuda nvidia-smi 的方法限制容器对GPU的访问。当我们非常清楚谁正在使用哪个GPU时,这种方法很有效,但我们的团队已经扩大,我希望有一种更强大的方法来监视GPU使用情况并在GPU被占用时禁止对其的访问。nvidia-smi 是 "GPU-Util" 的一个信息通道,但有时候GPU可能在某个时刻有0%的GPU-Util,而实际上它正在被某个容器中的人所占用。

您有任何以下建议吗:

  1. 跟踪用户运行 $ NV_GPU='gpu_id' nvidia-docker run 的时间
  2. 当另一个用户运行 $ NV_GPU='same_gpu_id' nvidia-docker run 时报错
  3. 保持更新的日志,类似 {'gpu0':'user_name或free',…,'gpu3':'user_name或free'},其中对于每个gpu,它要识别正在使用该gpu的活动docker容器的用户,或者声明它是“空闲”的。实际上,声明用户和链接到gpu的容器会更好。
  4. 当用户关闭使用GPU的容器时更新日志

我也可能想得不对,请提供其他想法。谢谢!

1个回答

0

听起来很适合应用CI/CD实践。你需要的是一个工作队列。每个用户可以通过某种方式触发管道(例如在特定分支上推送提交),请求使用资源(=GPUs)。然后,自动系统将有序地分配共享资源,每个人最终都会完成他们的实验。

这可能是最具可扩展性的方法。比预订日历或临时使用要更多得多。唯一更具可扩展性的方法是从云中购买计算资源,但这不在OP的问题范围内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接