自动调度和分派不同用户的计算作业

自动调度和分派不同用户的计算作业

我打算在计算机科学系安装一台 Linux 服务器(可能是 CentOS)。该服务器将供从事 GPU 计算、生物信息学或 AI 研究的人员用作计算服务器。

假设我可以为每个用户提供一个 shell 并让他们启动他们的工作,这可能就是我开始时所做的。

然而,我面临一个潜在的问题:有时这台机器会被用作计算设备,目的只是为了得到计算结果,而有时它会被用作基准测试平台,以衡量新技术/算法/其他东西的效率。

这意味着,当服务器用于第二类任务时,其他用户不应启动其他繁重任务,从而干扰基准测试结果。

因此,我想设置并可能自动化如下系统:

  1. 通常情况下,用户没有资源限制,不同的作业被安排并正常共享系统资源。
  2. 如果用户启动“优先级”作业,其他用户将受到限制cgroup,只能使用一两个可用的 CPU,并且内存使用量也受到限制。
  3. 优先级作业在单独的计算机上启动cgroup,可以访问所有其他 CPU,并且对内存使用没有限制

是否有一些软件包可以帮助实现这种架构的自动化?我在网上找到的所有内容都与容器编排有关,但这里的不同之处在于,我想限制其他的当我的工作正在运行时,将工作放在容器中午餐是没有帮助的。

我也研究过类似的东西dockersh,以实现相反的功能:每个人都直接登录容器内,这样我就可以轻松地按需分配资源。但是,dockersh似乎无人维护,而且我找不到任何其他可以实现相同概念的东西。

答案1

带有 systemd 的 Linux 可以设置cgroups 资源控制按单位。您可以为 machine.slice 设置较大的比例,例如 CPUShares=100000。然后将重要的作业作为该切片中的容器运行。

仅在作业运行时施加配额可能会比较棘手。配额是静态的,可能需要调整。可能像这样编写脚本(谢谢Chris 的维基

systemctl --runtime set-property user-1001.slice CPUQuota=200% 

如果您需要一些附加功能(如批处理作业控制),则需要找到或编写一个可以执行该操作的系统。

相关内容