在之前的文章中也介绍过Slurm的部署问题《精通集群作业调度系统Slurm》,今天参考华为云手册一步步来学习如何部署HPC的调度系统。

假设我们在基于Centos的系统上部署安装

CentOS7.6https://www.centos.org/download/

集群信息如下:

节点名IP作用
master192.168.40.11管理节点,运行slurmctld
testnode1192.168.40.111计算节点,运行slurmd
testnode2192.168.40.112计算节点,运行slurmd

1)软件下载

Slurm18.08.7https://www.schedmd.com/downloads.php
munge0.5.13https://github.com/dun/munge/releases/tag/munge-0.5.13

安装依赖库

yum install -y rpm-build rpmdevtools bzip2-devel openssl-devel zlib-devel readline-devel pam-devel perl-DBI perl-ExtUtils-MakeMakermariadb*

2)编译软件

  • 编译Munge
  1. 执行以下命令构建munge的rpm包。cd /path/to/MUNGE
  2. rpmbuild -tb –clean munge-0.5.13.tar.xz
  3. 执行以下命令检查是否成功生成rpm包。ls /root/rpmbuild/RPMS/aarch64/ | grep munge
  4. “/path/to/MUNGE”目录下创建一个“mungerpm”目录,并将“/root/rpmbuild/RPMS/aarch64/”目录下munge的rpm包拷贝到“/path/to/MUNGE/mungerpm”目录。mkdir -p /path/to/MUNGE/mungerpm
  5. cp /root/rpmbuild/RPMS/aarch64/munge* /path/to/MUNGE/mungerpm –f
  • 编译Slurm
  1. 执行以下命令进入Munge目录。cd /home/mungerpm
  2. 执行以下命令安装Munge。yum install -y munge-*
  3. 执行以下命令进入Slurm目录。cd /path/to/SLURM
  4. 执行以下命令构建Slurm的rpm包。rpmbuild -ta –clean slurm-18.08.7.tar.bz2
  5. 执行以下命令检查是否成功生成rpm包。ls /root/rpmbuild/RPMS/aarch64/ | grep slurm
  6. “/path/to/SLURM”目录下创建一个“slurmrpm”目录,并将“/root/rpmbuild/RPMS/aarch64/”目录下slurm的rpm包拷贝到“/path/to/SLURM/slurmrpm”目录。mkdir -p /path/to/SLURM/slurmrpm
  7. cp /root/rpmbuild/RPMS/aarch64/slurm* /path/to/SLURM/slurmrpm -f

3)安装软件

  • 安装Munge
  1. 执行以下命令在testnode1和testnode2节点上挂载master节点的“/home”目录。mount master:/home /home
  2. 执行以下命令在testnode1和testnode2节点上安装munge相关包。
    cd /home/mungerpm
    yum install -y munge*
  3. 执行以下命令修改master、testnode1和testnode2节点相应munge目录的权限。
    chmod -Rf 700 /etc/munge
    chmod -Rf 711 /var/lib/munge
    chmod -Rf 700 /var/log/munge
    chmod -Rf 0755 /var/run/munge
  4. 执行以下命令在master节点启动ntpd服务。
    yum install -y ntp
    systemctl start ntpd
  5. 执行以下命令在testnode1和tesnode2节点上,将系统时间同步到master节点。
    ntpdate master
  6. 在master节点上,将master节点的“/etc/munge/munge.key”拷贝到testnode1和testnode2节点。
    scp /etc/munge/munge.key testnode1:/etc/munge/
    scp /etc/munge/munge.key testnode2:/etc/munge/
  7. 在testnode1和testnode2节点上,更改“/etc/munge/munge.key”文件的权限。
    chown munge.munge /etc/munge/munge.key
  8. 在master、testnode1和testnode2节点上启动munge。
    systemctl start munge
    systemctl enable munge
  • 安装Slurm
  1. 执行以下命令在master、testnode1和testnode2节点上安装slurm相关包。cd /home/slurmrpmyum install -y slurm*
  2. 检查所有节点系统中是否已经创建slurm用户。
    • 如果已经创建,则执行以下命令进行查看:grep “slurm” /etc/group
    • 如果没有创建,则执行以下命令在master、testnode1和testnode2节点上创建slurm用户。groupadd -g 202 slurmuseradd -u 202 -g 202 slurm
  3. 执行以下命令在master、testnode1和testnode2节点下创建“/var/spool/slurm/ssl”目录、“/var/spool/slurm/d”目录和“/var/log/slurm”目录。
    mkdir -p /var/spool/slurm/ssl
    mkdir -p /var/spool/slurm/d
    mkdir -p /var/log/slurm
  4. 执行以下命令在master、testnode1和testnode2节点上设置相应目录权限。chown -R slurm.slurm /var/spool/slurm
  5. 执行以下命令修改matser节点上的“/etc/slurm/slurm.conf”文件。
    1. vi /etc/slurm/slurm.conf
    2. 按“i”进入编辑模式,添加如下内容。
      ControlMachine=master
      ControlAddr=192.168.40.11
      MpiDefault=none
      ProctrackType=proctrack/pgid
      ReturnToService=1
      SlurmctldPidFile=/var/run/slurmctld.pid
      SlurmdPidFile=/var/run/slurmd.pid
      SlurmdSpoolDir=/var/spool/slurm/d
      SlurmUser=slurm #SlurmdUser=root
      StateSaveLocation=/var/spool/slurm/ssl
      SwitchType=switch/none
      TaskPlugin=task/none
      FastSchedule=1
      SchedulerType=sched/backfill
      SelectType=select/linear
      AccountingStorageType=accounting_storage/none
      ClusterName=cluster
      JobAcctGatherType=jobacct_gather/none
      SlurmctldDebug=3
      SlurmctldLogFile=/var/log/slurm/slurmctld.log
      SlurmdDebug=3
      SlurmdLogFile=/var/log/slurm/slurmd.log
      NodeName=testnode1 CPUs=96 Sockets=4 CoresPerSocket=24 State=UNKNOWN
      NodeName=testnode2 CPUs=40 Sockets=4 CoresPerSocket=10 State=UNKNOWN
      PartitionName=ARM Nodes=testnode1 Default=YES MaxTime=INFINITE State=UP
      PartitionName=X86 Nodes=testnode1 Default=YES MaxTime=INFINITE State=UP
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  6. 执行以下命令在master节点上,将master节点的“/etc/slurm/slurm.conf”拷贝到testnode1和testnode2节点。
    scp /etc/slurm/slurm.conf testnode1:/etc/slurm
    scp /etc/slurm/slurm.conf testnode2:/etc/slurm
  7. 执行以下命令在master节点启动“slurmctld”服务。
    systemctl start slurmctld
    systemctl enable slurmctld
  8. 执行以下命令在testnode1和testnode2节点启动“slurmd”服务。
    systemctl start slurmd
    systemctl enable slurmd

以上操作完成后,集群就算部署好了。

命令说明
sinfo查看节点与分区状态
squeue查看任务队列状态
scontrol show nodes详细显示节点信息
scontrol show jobs详细显示任务信息
srun执行作业
salloc分配资源
sbatch提交批处理作业
scancel取消作业

节点状态说明:

参数含义
unk未知
idle空闲
alloc已分配
down故障

参考资料:

1.https://support.huaweicloud.com/instg-kunpenghpcs/kunpengslurm_03_0011.html