有没有一种工具可以让我们的科学计算机的用户独家预订它?

有没有一种工具可以让我们的科学计算机的用户独家预订它?

我们的研究部门拥有一台强大的 ubuntu 设备,可以利用其 CPU 和 GPU 完成繁重的工作。我们所有的研究人员都通过 SSH 连接到机器并在系统上运行(机器学习)工作负载。

问题是我们与同时使用该系统的人发生冲突,而人们调用 dibs 的简单聊天框还不够。本质上,如果研究人员 A 想要使用 GPU 进行时间敏感的基准测试,我们不希望其他人接触 GPU 以保持有效性。

我想知道是否有一个可用的工具可以安排并授予用户对某些命令或设备的独占访问权限。所有任务都通过集中式 Conda (python) 安装运行,该安装可通过自定义组访问。每个人都通过 SSH 进入系统。也许可以阻止 SSH 访问/使 GPU 独占/阻止 python 访问?

编辑:我应该早些时候指出,虽然我们的研究小组中确实有活跃的用户群,但我们不希望使用排队系统使设置复杂化。对我们的设置进行较少侵入性(更幼稚)的更改将是我们的首选。我很抱歉没有早点提到这一点。

答案1

处理这些事情的正常方法是使用排队系统,并且只允许用户通过队列提交作业。我在工作过的研究所见过的一个常用的是扭矩

TORQUE 是一个资源管理器,提供对批处理作业和分布式计算节点的控制。基本上,人们可以使用该软件设置家庭或小型办公室 Linux 集群并排队作业。一个集群由一个头节点和许多计算节点组成。头节点运行扭矩服务器守护进程,计算节点运行扭矩客户端守护进程。头节点还运行调度程序守护程序。

还有其他几个。与您的系统管理员讨论如何设置适当的排队系统,以便大家都可以有效地使用机器。这是访问共享集群的标准设置。

https://help.ubuntu.com/community/TorquePbsHowto

答案2

我对此的想法:

  • 禁用同时 SSH 访问似乎并不正确:根据我的经验,人们喜欢打开 SSH 连接并让它们运行而不运行任何应用程序。一次又一次的登录可能会让很多人感到不安。
  • 禁用同时 python 访问似乎并不正确:人们可能会在访问 CPU/GPU 资源之外运行任务。

我的处理方法如下:

  • 必须有一种方法来监控您的 CPU/GPU 负载。
  • 您创建一个任务(在 root 下运行),每秒检查这些值,如果它们足够高,您基本上可以chmod 600/700 files_required_to_access_CPU_GPU。一旦负载较低或为零,您chmod 644/755 the_same_files.

我可以为你编写这个程序,但我需要访问系统。我看不出有什么特别复杂的事情。

答案3

您可以通过创建 /etc/nologin 文件来阻止新登录(root 除外)。这需要 root 权限。但我们要小心,当用户使用完系统后始终删除此文件。这意味着我们应该有一些特权进程,它创建文件,等待某些信号或关闭,然后删除文件。使用 sudo 有点复杂,因为该进程在单独的特权上下文中运行,并且我们无法向它发送没有特权的信号。然而,我们可以通过管道从用户到特权进程进行通信。

考虑一个 bash shell 脚本:_mkexclude

#!/bin/bash
MSG="$1 has exclusive access"
XFILE="/etc/nologin"

[ -e "$XFILE" ] &&  echo "Exclusivity already established, FAIL" >&2  && exit 3
# make exclusive
echo ${MSG} > $XFILE

trap '/bin/rm -rf $XFILE; exit' USR1 QUIT HUP EXIT TERM
# wait to read any line before continuing from stdin cleanup
read f

# make non-exclusive
/bin/rm -rf $XFILE

该脚本必须在 /etc/sudoers.d 中配置为适当用户的 NOPASSWD 命令。 (或团体)。该脚本检查是否已经存在 nologin 文件。如果没有,它会创建一个新的。然后它等待读取或信号。如果原始 (bash) shell 退出,排他性也将退出。

调用此脚本的一个不错的方法是通过 bash shell 函数......

exclude() { coproc EXCLUDE (sudo _mkexclusive $(id -un) ); }
disexclude() { echo FOO >&${EXCLUDE[1]} ; }

[将其提供给 ~/.bashrc 中的用户]

任何允许对脚本进行 sudo 操作的用户都可以通过执行 $ except 函数来阻止进一步登录。这样的用户只能在非常相同的外壳执行的上下文中**disexclude**重新允许其他人登录。

如果用户关闭创建排除的 shell,或者注销,那么 coproc 应该删除阻止其他人登录的 $XFILE。

相关内容