Linux搭建Slurm和pbs单机版

Slurm

Slurm 是高性能计算集群的出色工作调度工具。此外,当你需要同时运行多个程序并将它们排成队列,同时确保计算机或服务器不超载时,它也是本地台式机或单台服务器上的重要工具。此外,在与其他用户共享服务器或需要通宵或连续数周运行多个工作时,它也非常有用!在这里,我将向你展示如何在使用 ubuntu单台机器上快速设置 slurm。你将不再需要为运行多个程序而编写杂乱无章的脚本,以避免超出硬件限制或与同事争论谁的程序先运行。

让我们先用 apt 安装,对于基本的单机设置,只需要控制守护程序 slurmctld 和计算节点守护程序 slurmd 这两个软件包:

$ sudo apt update -y
$ sudo apt install slurmd slurmctld -y

接下来,我们需要创建 slurm.conf 文件,配置 slurm 队列的设置方式。这里我们使用一个非常简单的文件:(请根据你的机器规格调整 COMPUTE NODES 部分,例如,如果你有 10 个内核 CPU=10,内存为 32000MB RealMemory=32000 .

# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=localcluster
SlurmctldHost=localhost
MpiDefault=none
ProctrackType=proctrack/linuxproc
ReturnToService=2
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/lib/slurm-llnl/slurmd
SlurmUser=slurm
StateSaveLocation=/var/lib/slurm-llnl/slurmctld
SwitchType=switch/none
TaskPlugin=task/none
#
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#
#AccountingStoragePort=
AccountingStorageType=accounting_storage/none
JobCompType=jobcomp/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
#
# COMPUTE NODES
NodeName=localhost CPUs=1 RealMemory=500 State=UNKNOWN
PartitionName=LocalQ Nodes=ALL Default=YES MaxTime=INFINITE State=UP
# chmod 755 /etc/slurm-llnl/

现在让我们用 systemd 启动 slurm:

$ sudo systemctl start slurmctld
$ sudo systemctl start slurmd

最后,将机器设置为空闲状态,以便开始排队等待作业:

$ sudo scontrol update nodename=localhost state=idle
$ sinfo
partition avail timelimit nodes state nodelist
LocalQ* up infinite 1 idle localhost

如果成功,您就看到了上面的内容,很好,您已经启动并运行了 slurm。您现在有了一个名为 LocalQ 的队列(或 slurm 行话中的 “分区”),可以向其提交工作。如果遇到任何问题,可以查看 /var/log/slurm-llnl/slurmd.log 和 /var/log/slurm-llnl/slurmctld.log 中的日志进行调试。

现在,您已经有了一个正常运行的 slurm 队列,如果需要更改配置,只需编辑 slurm.conf,然后通过 systemd 重启 slurmctld 和 slurmd 即可。关于如何使用 slurm 的更多信息,网上有很多文章。只需谷歌搜索 “如何向 slurm 提交作业”,或访问 slurm 网站。

参考资料

OpenPBS

OpenPBS 是高性能计算集群的工作调度工具。此外,当你需要同时运行多个程序并将它们排成队列,同时确保计算机或服务器不超载时,它也是本地桌面或单台服务器上的重要工具。此外,在与其他用户共享服务器或需要通宵或连续数周运行多个工作时,它也非常有用!在这里,我将向你展示如何在使用 ubuntu 20.04单台机器上快速设置 OpenPBS 。你将不再需要为运行多个程序而编写复杂的脚本,以避免超出硬件限制或与同事争论谁的程序先运行。

  • 安装 postgresql
$ sudo apt install gcc make libtool libhwloc-dev libx11-dev \
      libxt-dev libedit-dev libical-dev ncurses-dev perl \
      postgresql-server-dev-all postgresql-contrib python3-dev tcl-dev tk-dev swig \
      libexpat-dev libssl-dev libxext-dev libxft-dev autoconf \
      automake g++
$ sudo apt install expat libedit2 postgresql python3 postgresql-contrib sendmail-bin \
      sudo tcl tk libical3 postgresql-server-dev-all
  • 下载 OpenPBS:

打开:https://www.openpbs.org/Download.aspx#download

点击:openpbs_23.06.06.ubuntu_20.04.zip

  • 安装OpenPBS
$ unzip openpbs_23.06.06.ubuntu_20.04.zip
$ cd openpbs_23.06.06.ubuntu_20.04
$ sudo apt install ./openpbs-server_23.06.06-1_amd64.deb ./openpbs-devel_23.06.06-1_amd64.deb ./ openpbs-debuginfo_23.06.06-1_amd64.deb
$ sudo /opt/pbs/libexec/pbs_postinstall
# 现在应将 PBS_START_MOM 的值从 0 改为 1
$ sudo vi /etc/pbs.conf 
PBS_EXEC=/opt/pbs
PBS_SERVER=noteboo
PBS_START_SERVER=1
PBS_START_SCHED=1
PBS_START_COMM=1
PBS_START_MOM=1
PBS_HOME=/var/spool/pbs
PBS_CORE_LIMIT=unlimited
PBS_SCP=/usr/bin/scp
$ sudo vi /etc/hosts
172.16.36.204   noteboo localhost
$ sudo chmod 4755 /opt/pbs/sbin/pbs_iff /opt/pbs/sbin/pbs_rcp
$ sudo systemctl start pbs.service
  • 验证
    现在,让我们使用 pbsnode -a 命令确认一切正常,本地计算机已注册到 PBS:
$ . /etc/profile.d/pbs.sh
$ qstat -B
Server             Max   Tot   Que   Run   Hld   Wat   Trn   Ext Status
---------------- ----- ----- ----- ----- ----- ----- ----- ----- -----------
noteboo              0     0     0     0     0     0     0     0 Active
$ pbsnodes -a
noteboo
     Mom = noteboo
     ntype = PBS
     state = free
     pcpus = 16
     resources_available.arch = linux
     resources_available.host = noteboo
     resources_available.mem = 16052476kb
     resources_available.ncpus = 16
     resources_available.vnode = noteboo
     resources_assigned.accelerator_memory = 0kb
     resources_assigned.hbmem = 0kb
     resources_assigned.mem = 0kb
     resources_assigned.naccelerators = 0
     resources_assigned.ncpus = 0
     resources_assigned.vmem = 0kb
     resv_enable = True
     sharing = default_shared
     license = l
     last_state_change_time = Sat Jan 18 14:16:17 2025
     last_used_time = Sat Jan 18 14:21:57 2025

$ echo "sleep 60" | qsub
2.noteboo
$ qstat -a

noteboo:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
2.noteboo       andrew   workq    STDIN      162200   1   1    --    --  R 00:00

现在您的服务器上已经有了一个正常运行的 OpenPBS 队列系统。如果您想通过 PBS 脚本提交作业,只需在谷歌上搜索 PBS 提交脚本示例,就会出现大量指南/示例。可在OpenPBS主页,了解更多信息 https://www.openpbs.org

posted @ 2025-01-18 19:53  磁石空杯  阅读(34)  评论(0编辑  收藏  举报