Skip to content

集群设备限制隔离设置

有时候需要对集群上的用户隐藏或者限制对部分设备的使用,比如在多显卡集群上,需要限制在该计算节点上只有分配到对应显卡的用户才可以查看并使用对应的显卡设备。因此需要对集群上面的设备进行限制使用。该教程将介绍如果在 SonmiHPC 集群上进行设置。

效果展示

比如在下面的展示集群上,可以看到 compute-0-0 有一块显卡资源:

device-constrain-1

假如用户 sonmi 在通过如下的命令在 compute-0-0 节点上提交一个纯 CPU 4核的任务,该任务没分配显卡资源:

shell
salloc -N 1 -n 4 --nodelist=compute-0-1
salloc -N 1 -n 4 --nodelist=compute-0-1

当用户分配到该资源后,通过 SSH 访问连接 compute-0-1:

device-constrain-2

可以看到,由于 sonmi 用户提交的任务并没有分配到 GPU 资源,因此在该节点是无法查看并使用对应的显卡。

而如果用户通过如下的命令在 compute-0-0 节点上提交一个 4 CPU + GPU 的任务:

shell
salloc -N 1 -n 4 --gres=gpu:2080:1 --nodelist=compute-0-1
salloc -N 1 -n 4 --gres=gpu:2080:1 --nodelist=compute-0-1

当用户分配到该资源后,通过 SSH 访问连接 compute-0-1:

device-constrain-3

可以看到这次 sonmi 用户是可以查看并使用 RTX 2080 Ti 的显卡资源。

该限制对于使用 GROMACS 此类需要分配并隔离GPU资源的程序的用户来说比较实用,因此强烈推荐启用。

设置流程

  1. 在需要隔离资源的节点上启用 PAM 限制,可以查看对应 PAM 设置文档;
  2. 在 /etc/slurm/slurm.conf 添加 GresTypes=gpu 字段,并在节点设置添加 Gres 资源配置;
NodeName=compute-0-1 NodeAddr=10.1.1.3 CoresPerSocket=8 Sockets=1 ThreadsPerCore=1 Gres=gpu:2080:1
NodeName=compute-0-1 NodeAddr=10.1.1.3 CoresPerSocket=8 Sockets=1 ThreadsPerCore=1 Gres=gpu:2080:1
  1. 在 /etc/slurm/cgroup.conf 中添加 ConstrainDevices=yes 字段;

  2. 在 /etc/slurm/gres.conf 中设置对应的通用资源,例如:

AutoDetect=off
NodeName=compute-0-1 Name=gpu Type=2080 File=/dev/nvidia0
AutoDetect=off
NodeName=compute-0-1 Name=gpu Type=2080 File=/dev/nvidia0
  1. 控制节点重启 slurmctld 服务,所有节点重启 slurmd 服务:
shell
pdsh -w sonmi systemctl restart slurmctld slurmd
pdsh -w compute-0-[0-1] systemctl restart slurmd
pdsh -w sonmi systemctl restart slurmctld slurmd
pdsh -w compute-0-[0-1] systemctl restart slurmd

注意事项

用户在提交任务的时候,无论是使用哪种方式提交,如果添加了 #SBATCH --exclusive 参数,用于独占该节点。此时该限制将无法生效,因此用户在提交任务时,请切勿添加该独占节点参数。

本站内容未经授权禁止转载
联系邮箱: [email protected]