我打算在计算机科学系安装一台 Linux 服务器(可能是 CentOS)。该服务器将供从事 GPU 计算、生物信息学或 AI 研究的人员用作计算服务器。
假设我可以为每个用户提供一个 shell 并让他们启动他们的工作,这可能就是我开始时所做的。
然而,我面临一个潜在的问题:有时这台机器会被用作计算设备,目的只是为了得到计算结果,而有时它会被用作基准测试平台,以衡量新技术/算法/其他东西的效率。
这意味着,当服务器用于第二类任务时,其他用户不应启动其他繁重任务,从而干扰基准测试结果。
因此,我想设置并可能自动化如下系统:
- 通常情况下,用户没有资源限制,不同的作业被安排并正常共享系统资源。
- 如果用户启动“优先级”作业,其他用户将受到限制
cgroup
,只能使用一两个可用的 CPU,并且内存使用量也受到限制。 - 优先级作业在单独的计算机上启动
cgroup
,可以访问所有其他 CPU,并且对内存使用没有限制
是否有一些软件包可以帮助实现这种架构的自动化?我在网上找到的所有内容都与容器编排有关,但这里的不同之处在于,我想限制其他的当我的工作正在运行时,将工作放在容器中午餐是没有帮助的。
我也研究过类似的东西dockersh
,以实现相反的功能:每个人都直接登录容器内,这样我就可以轻松地按需分配资源。但是,dockersh
似乎无人维护,而且我找不到任何其他可以实现相同概念的东西。
答案1
带有 systemd 的 Linux 可以设置cgroups 资源控制按单位。您可以为 machine.slice 设置较大的比例,例如 CPUShares=100000
。然后将重要的作业作为该切片中的容器运行。
仅在作业运行时施加配额可能会比较棘手。配额是静态的,可能需要调整。可能像这样编写脚本(谢谢Chris 的维基)
systemctl --runtime set-property user-1001.slice CPUQuota=200%
如果您需要一些附加功能(如批处理作业控制),则需要找到或编写一个可以执行该操作的系统。