如何限制对 GPU 的访问?

如何限制对 GPU 的访问?

我正在 Ubuntu 18.04 下配置一个小型 GPU 服务器。它应该支持交互式作业和批处理作业。

它由一个小团队专门用于运行机器学习任务。我们还有一些仅在 CPU 上进行大规模并行数据处理的任务。

我的目标是避免单个人无限期地占用 GPU,例如,这个人可以启动 IPython 控制台,import tensorflow在其中发出问题然后离开办公室,因为他的工作时间已经结束。

从另一个方面来说,希望允许用户以交互方式(在 CPU 上)进行一些原型设计。

考虑到以上所有因素,我安装了 SLURM 工作负载管理器来支持作业队列和调度。

现在我想限制交互式会话对 GPU 的访问,并将它们完全置于 SLURM 的控制之下。

限制访问/dev/nvidia[0-3],如建议的那样这里,不起作用,因为 SLURM 将流程用户从 root 更改为实际任务所有者。

经过一番 Google 搜索,我找到了两个变体:cgroups 和 udev。

阅读这个话题在 systemd-devel 邮件列表中建议可以绕过 systemd 来限制使用 cgroups 的访问,只需发出如下命令即可 echo "c 195:*" > /sys/fs/cgroup/devices/ blah-blah-blah /device.deny

尽管如此,我还是读到了手动的systemd 支持 3 个切片。

我还发现,SLURM 守护进程启动的进程在 中运行system.slice,而使用 ssh 或远程桌面连接连接到服务器的用户启动的进程在 中运行user.slice

原则上,我可以手动编辑文件并按说明/lib/systemd/system/user.slice添加DeviceAllow="char-nvidia-frontend"这里,但该文件可能会在下次更新软件包后发生变化。

device.deny那么,在 Ubuntu 18.04 中设置属性的正确方法是什么?

Lennart Pottering,systemd 开发人员说限制访问的另一个选项是 udev

我已经开始阅读手册,但似乎 udev 主要用于硬盘或 USB 设备,而不是视频卡。

有人可以分享一个配置设置权限的示例吗?

答案1

我认为,我已经用环境变量解决了我的任务CUDA_VISIBLE_DEVICES

我已经输入了/etc/environment一行CUDA_VISIBLE_DEVICES=-1,因此“恳请”交互式会话不要使用 GPU。

相关内容