使用系统

两个操作系统为 Ubuntu16 的 VirtualBox 虚拟机,记作 Ubuntu1,Ubuntu2。内存大小均为 2 G。CPU 个数各为 1。

网络适配器设置

在 VirtualBox 中配置两 Ubuntu16 的网络适配器(目的使得两个 Ubuntu 在同一个局域网中并且拥有不同的局域网 IP)。操作如下: 增加一个网络 选择 File -> Preference -> Network -> 右边的增加按钮 得到 NatNetwork 后选择 OK 按钮。 之后再设置安装好的 Ubuntu1 使得 Attached to 为 NatNetwork。刷新 MAC Address。再设置 Ubuntu2。 设置 Ubuntu1 这样如果我们启动 Ubuntu1 和 Ubuntu2 并且用 ifconfig 查看局域网 IP 地址,可以看到两台虚拟机的 IP 分别为 10.0.2.6 和 10.0.2.7。(只要不相同即可)

Munge 相关的安装

再安装 Slurm 之前必须得安装 Munge,Munge 是认证服务软件,用于生成和验证证书,主要应用于大规模的HPC集群中。这里 Munge 的安装比较简单使用

sudo apt install munge

记得两个系统都得安装 munge。同时也得安装 libmunge-dev 库文件。

sudo apt install libmunge-dev

原因是在之后的用源代码安装 Slurm 时使用到了 libmunge-dev 。之后在 Ubuntu1 中使用命令

sudo /usr/sbin/create-munge-key

生成 munge.key 文件,默认保存在 /etc/munge/ 目录下。之后可以使用 scp 命令将 munge.key 文件从 Ubuntu1 复制到 Ubuntu2 的相同目录下。注意复制后在 Ubuntu2 中 munge.key 文件所属的用户和群组默认得是 munge,如果不是可以使用 sudo chown munge:munge /etc/munge/munge.key 修改文件的所属的用户和群组。

Slurm 源码安装

  1. https://www.schedmd.com/downloads.php 下载最新版的 Slurm 源代码,我这是 slurm-20.02.1.tar.bz2。之后 cd 到下载目录使用下面命令编译 Slurm 源代码并且安装。
tar --bzip -x -f slurm*tar.bz2
cd slurm*
./configure
make
sudo make install

./configure 如果不设置 --sysconfdir= 参数那么默认 slurm.conf 文件需要保存在 /usr/local/etc/ 目录下。

配置 slurm.conf 文件

在 Ubuntu1 中配置创建 slurm.conf 文件并且放在 /usr/local/etc/ 目录下。之后可以使用 scp 命令复制到 Ubuntu2 相同目录下。slurm.conf 文件的配置方法,可以在 slurm-20.02.1/doc/html/ 目录下找到 contributor.html 文件,用浏览器打开配置,提交后将内容复制到 /usr/local/etc/slurm.conf 文件中即可。我的配置如下所示:

SlurmctldHost=master

MpiDefault=none
ProctrackType=proctrack/linuxproc
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=root
StateSaveLocation=/var/spool
SwitchType=switch/none
TaskPlugin=task/affinity
TaskPluginParam=Sched
InactiveLimit=0
KillWait=30
MinJobAge=300
#OverTimeLimit=0
SlurmctldTimeout=120
SlurmdTimeout=300
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
#
#
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core

# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
#AccountingStorageUser=
AccountingStoreJobComment=YES
ClusterName=cluster

JobCompType=jobcomp/none
#JobCompUser=
#JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
#SlurmctldLogFile=
SlurmdDebug=info

# COMPUTE NODES
NodeName=master NodeAddr=10.0.2.6 CPUs=1 State=UNKNOWN
NodeName=dsy-VirtualBox NodeAddr=10.0.2.7 CPUs=1 State=UNKNOWN
PartitionName=control Nodes=master Default=YES MaxTime=INFINITE State=UP
PartitionName=computer Nodes=dsy-VirtualBox Default=YES MaxTime=INFINITE State=UP

注意我的两台Ubuntu 虚拟机的 hostname 分别为 master 和 dsy-VirtualBox 。这个可以通过修改 /etc/hosts 以及 /etc/hostname 得到。注意官网的这段话 Node names can have up to three name specifications: NodeName is the name used by all Slurm tools when referring to the node, NodeAddr is the name or IP address Slurm uses to communicate with the node, and NodeHostname is the name returned by the command /bin/hostname -s. Only NodeName is required (the others default to the same name), although supporting all three parameters provides complete control over naming and addressing the nodes. See the slurm.conf man page for details on all configuration parameters.

系统的启动

systemctl start munge #启动munge,注意两个系统都得启动 munge
systemctl status munge #可以查看 munge 的状态

#之后在 Ubuntu1 中使用 sudo slurmctld -c 启动控制器
sudo slurmctld -c

#在 Ubuntu2 中使用 sudo slurmd -c 启动节点
sudo slurmd -c

也可以使用 -D 参数非后台启动。

测试

测试

原创文章,转载请注明出处:https://daiyufish.com/article/how-to-install-slurm/