SLURM简介(GPT-4生成):
高性能计算 (HPC) 环境:
- 想象有一个非常巨大的计算器,它由成百上千台计算机(称为"节点")组成。这就是一个计算机集群。这些集群通常用于需要极大计算力的任务,例如气候模拟、生命科学中的基因测序或物理学中的复杂模拟。
作业:
- 在这样的环境中,研究人员或工程师会提交一个个"工作任务",在HPC术语中这些通常被称为"作业"。一个作业可以是一条命令,比如说"计算这个非常复杂的数学方程",或"分析这组巨大的科学数据"。
作业调度系统:
- 想象有很多人都在尝试使用那个巨大的计算器。为了管理谁的任务先计算,谁的后计算,我们需要一个"作业调度系统",就像是一个分发号码牌的窗口,它接收作业,然后根据规则(如优先顺序)决定作业的执行顺序。
SLURM的角色:
- SLURM就是这样一种作业调度系统。它负责接收用户提交的作业,排队,然后根据作业的重要性、预计的计算时间,以及可用计算资源等因素决定如何分配集群中的资源。
客户和管理员命令:
- SLURM提供了一系列命令,让用户和管理员可以与这个系统交互。比如,一个用户可能会用
sbatch
命令提交一个作业。一旦作业执行完成,用户会接到通知。而管理员可能会用scontrol
来查看系统状态或进行调整。
简要来说,SLURM是科学家和工程师用来高效利用巨大计算资源的系统。通过节省时间和避免混乱,SLURM让复杂的计算任务变得有序且高效。
SLURM 的主要组成部分。
SLURM的"大脑" ------ slurmctld
这是SLURM中最关键的部分,就像是一个指挥中心,负责处理所有作业调度的决策。你可以把它看作是一个空中交通管制员,他告诉每个作业(飞机)何时可以启动(起飞)和在哪里运行(降落)。
SLURM的"手脚" ------ slurmd
在每个计算节点上运行的是slurmd守护进程。这些节点就像工厂里的工人,slurmd负责接收来自slurmctld(即"大脑")的命令,然后控制节点开始或停止作业。简言之,slurmctld告诉slurmd该做什么,slurmd就去做。
SLURM的"记账员" ------ slurmdbd
这个可选的组件就像会计,负责记录和追踪所有作业的历史数据,比如谁运行了什么作业,用了多少资源,耗费了多少时间等。这些信息对于报告、分析和优化集群性能非常有用。
处理用户请求 ------ srun、sbatch
当用户想要在集群上运行某个程序,他们需要通过这些命令来提交请求。srun
是用来直接执行程序的,而 sbatch
是用来提交一个批处理脚本的,这个脚本可以包含一个或者多个要执行的命令。
监控和调整 ------ scontrol、sacct
这些工具是管理员用来查看集群状态和进行管理调整的。scontrol
提供了实时控制的能力,可以用来更改集群或作业的配置。sacct
用来查看作业的会计数据,了解资源的使用情况。
用户查看集群信息 ------ squeue、sinfo
用户通过 squeue
查看哪些作业正在排队等待资源,哪些正在运行。sinfo
则提供了集群节点的状态信息,比如哪些节点可用或者繁忙。
把SLURM比喻为一个大型公司的不同部门和角色,可以帮助我们更好地理解它如何工作。每一部分都有分工合作,共同确保集群资源得到最有效的管理和利用。
安装
环境:
VMware® Workstation 16 Pro 16.2.5
xCAT mgt(管理节点)
cn1(计算节点)
centos7.9
mgt节点配置
安装离线安装包
vbscript
fail2ban-0.11.2-3.el7.noarch.rpm slurm-doc-20.11.8-2.el7.x86_64.rpm
fail2ban-firewalld-0.11.2-3.el7.noarch.rpm slurm-gui-20.11.8-2.el7.x86_64.rpm
fail2ban-sendmail-0.11.2-3.el7.noarch.rpm slurm-libs-20.11.8-2.el7.x86_64.rpm
fail2ban-server-0.11.2-3.el7.noarch.rpm slurm-nss_slurm-20.11.8-2.el7.x86_64.rpm
freeipmi-1.5.7-3.el7.x86_64.rpm slurm-pam_slurm-20.11.8-2.el7.x86_64.rpm
hdf5-1.8.12-13.el7.x86_64.rpm slurm-perlapi-20.11.8-2.el7.x86_64.rpm
libaec-1.0.4-1.el7.x86_64.rpm slurm-pmi-20.11.8-2.el7.x86_64.rpm
libjwt-1.12.1-7.el7.x86_64.rpm slurm-pmi-devel-20.11.8-2.el7.x86_64.rpm
munge-0.5.11-3.el7.x86_64.rpm slurm-rrdtool-20.11.8-2.el7.x86_64.rpm
munge-libs-0.5.11-3.el7.x86_64.rpm slurm-slurmctld-20.11.8-2.el7.x86_64.rpm
pmix-1.1.3-1.el7.x86_64.rpm slurm-slurmd-20.11.8-2.el7.x86_64.rpm
slurm-20.11.8-2.el7.x86_64.rpm slurm-slurmdbd-20.11.8-2.el7.x86_64.rpm
slurm-contribs-20.11.8-2.el7.x86_64.rpm slurm-slurmrestd-20.11.8-2.el7.x86_64.rpm
slurm-devel-20.11.8-2.el7.x86_64.rpm
配置slurm.conf
csharp
[root@mgt slurm]# hostname
######## hostname #######
mgt
######## hostname #######
[root@mgt slurm]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e2:04:a7 brd ff:ff:ff:ff:ff:ff
############### IP Address #############
inet 192.168.13.100/24 brd 192.168.13.255 scope global noprefixroute ens33
############### IP Address #############
valid_lft forever preferred_lft forever
inet6 fe80::8b73:2e49:496d:f59/64 scope link noprefixroute
valid_lft forever preferred_lft forever
ini
vi /etc/slurm/slurm.conf
ControlMachine=localhost
ControlAddr=127.0.0.1
### 修改 ###
ControlMachine=mgt
ControlAddr=192.168.13.100
.........
......
SlurmUser=slurm
#不建议使用默认的root用户进行管理,单独使用一个slurm用户进行管理
.........
......
SlurmctldLogFile=/var/log/slurm/slurmctld.log
...
SlurmdLogFile=/var/log/slurm/slurmd.log
保存退出,输入"slurmd -C",查看节点信息
ini
[root@mgt slurm]# slurmd -C
NodeName=mgt CPUs=4 Boards=1 SocketsPerBoard=2 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=3770
UpTime=0-07:56:04
回vi /etc/slurm/slurm.conf修改
ini
# COMPUTE NODES
NodeName=mgt CPUs=4 Boards=1 SocketsPerBoard=2 CoresPerSocket=2 ThreadsPerCore=1
PartitionName=normal Nodes=mgt Default=YES MaxTime=INFINITE State=UP
可选:
非独占:
ini
SchedulerType=sched/backfill
#SelectType=select/linear
SelectType=select/cons_res
SelectTypeParameters=CR_Pack_Nodes,CR_Core
-
调度器 (
SchedulerType=sched/backfill
): 这就像有个聪明的管理员,她会找到空闲时段,让其他短期任务先进行,以免资源浪费,同时确保已经排队的主要任务不会被推迟。 -
资源选择类型 (
SelectType=select/cons_res
): 想象一个精细的预算规划师,他会确保每个项目只拿它所需要的,不多也不少,以避免资源被浪费掉。 -
资源选择参数 (
SelectTypeParameters=CR_Pack_Nodes,CR_Core
): 这是规划师使用的一些规则,帮助决定怎么最好地分配资源。-
CR_Pack_Nodes
: 她会尽量把工作安排到最少数量的地方,比如尽量使用同一个房间而不是分散到许多房间。 -
CR_Core
: 并且,她是按核心来管理的,这意味着她非常具体地控制每一项任务用多少"心力",而不是一刀切的对待所有任务。
-
用这些规则,这个管理员就能确保每一个任务都能合理使用资源,并且整个办公室(集群)的运行都是井然有序、效率最大化的。
创建slurm用户
useradd slurm
创建munge密匙
create-munge-key
或
创建touch /etc/munge/munge.key文件
vi /etc/munge/munge.key
注意:这个文件默认不存在,需要自己创建,并添加内容。
dd if=/dev/sda of=/etc/munge/munge.key bs=10k count=1
修改权限
将munge和slurm的ID进行更改,分别让其各自用户ID和组ID设置为一致,为了简化权限管理和配置
ruby
[root@mgt slurm]# vim /etc/passwd
[root@mgt slurm]# cat /etc/passwd | grep 1003
munge:x:1003:1003:Runs Uid 'N' Gid Emporium:/var/run/munge:/sbin/nologin
[root@mgt slurm]# vim /etc/group
[root@mgt slurm]# cat /etc/group | grep 1003
munge:x:1003:
修改文件属性
设置正确的文件权限和所有权:
sh
chown -R slurm:slurm /var/log/slurm
chown -R slurm:slurm /var/spool/slurm/ctld
chown -R slurm:slurm /var/spool/slurm/d
chown -R slurm:slurm /var/run/slurm
chown -R munge:munge /var/log/munge/
chown -R munge:munge /var/lib/munge
chown -R munge:munge /var/run/munge/
chown -R munge:munge /etc/munge/
chmod 400 /etc/munge/munge.key
节点信息配置
安装离线安装包,同上
修改mgt的slrum.conf
在cn1查询节点信息
ini
[root@cn1 slurm20]# slurmd -C
NodeName=cn1 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1819
UpTime=0-12:54:04
修改mgt的slrum.conf
sh
# COMPUTE NODES
NodeName=mgt CPUs=4 Boards=1 SocketsPerBoard=2 CoresPerSocket=2 ThreadsPerCore=1
NodeName=cn1 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1
PartitionName=normal Nodes=mgt,cn1 Default=YES MaxTime=INFINITE State=UP
如果配置相同可以用如下的形式
ini
NodeName=mgt,cn1 CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1
PartitionName=normal Nodes=mgt,cn1 Default=YES MaxTime=INFINITE State=UP
同步 slurm.conf配置文件 munge.key文件
同步mgt slurm.conf配置文件、munge.key文件信息到c1。在mgt下操作的命令如下:
bash
scp -r /etc/slurm/slurm.conf cn1:/etc/slurm/
scp -r /etc/munge/munge.key cn1:/etc/munge/
在cn1下修改文件相关属性
创建 slurm用户 useradd slurm, 同上修改ID
csharp
[root@cn1 slurm20]# vi /etc/passwd
[root@cn1 slurm20]# vi /etc/group
同上修改权限
bash
chown -R slurm:slurm /var/log/slurm
chown -R slurm:slurm /var/spool/slurm/ctld
chown -R slurm:slurm /var/spool/slurm/d
chown -R slurm:slurm /var/run/slurm
chown -R munge:munge /var/log/munge/
chown -R munge:munge /var/lib/munge
chown -R munge:munge /var/run/munge/
chown -R munge:munge /etc/munge/
chmod 400 /etc/munge/munge.key
启动服务
启动mgt服务
启动munge
bash
service munge status # 查看服务状态
service munge start # 启动服务
service munge stop # 停止服务
service munge restart # 重新启动服务
运行情况
yaml
[root@mgt slurm20]# service munge status
Redirecting to /bin/systemctl status munge.service
● munge.service - MUNGE authentication service
Loaded: loaded (/usr/lib/systemd/system/munge.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:munged(8)
[root@mgt slurm20]# service munge start
Redirecting to /bin/systemctl start munge.service
[root@mgt slurm20]# service munge status
Redirecting to /bin/systemctl status munge.service
● munge.service - MUNGE authentication service
Loaded: loaded (/usr/lib/systemd/system/munge.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:02:01 CST; 19s ago
Docs: man:munged(8)
Process: 45315 ExecStart=/usr/sbin/munged (code=exited, status=0/SUCCESS)
Main PID: 45317 (munged)
CGroup: /system.slice/munge.service
└─45317 /usr/sbin/munged
Apr 15 15:02:01 mgt systemd[1]: Starting MUNGE authentication service...
Apr 15 15:02:01 mgt systemd[1]: Started MUNGE authentication service.
[root@mgt slurm20]# service munge stop
Redirecting to /bin/systemctl stop munge.service
[root@mgt slurm20]# service munge restart
Redirecting to /bin/systemctl restart munge.service
[root@mgt slurm20]# service munge status
Redirecting to /bin/systemctl status munge.service
● munge.service - MUNGE authentication service
Loaded: loaded (/usr/lib/systemd/system/munge.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:02:45 CST; 3s ago
Docs: man:munged(8)
Process: 45402 ExecStart=/usr/sbin/munged (code=exited, status=0/SUCCESS)
Main PID: 45404 (munged)
CGroup: /system.slice/munge.service
└─45404 /usr/sbin/munged
Apr 15 15:02:45 mgt systemd[1]: Starting MUNGE authentication service...
Apr 15 15:02:45 mgt systemd[1]: Started MUNGE authentication service.
启动slurmctld
bash
service slurmctld status # 查看服务状态
service slurmctld start # 启动服务
service slurmctld stop # 停止服务
service slurmctld restart # 重新启动服务
运行情况
ini
[root@mgt slurm]# service slurmctld start
Redirecting to /bin/systemctl start slurmctld.service
[root@mgt slurm]# service slurmctld status
Redirecting to /bin/systemctl status slurmctld.service
● slurmctld.service - Slurm controller daemon
Loaded: loaded (/usr/lib/systemd/system/slurmctld.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:18:21 CST; 3min 14s ago
Main PID: 46296 (slurmctld)
CGroup: /system.slice/slurmctld.service
└─46296 /usr/sbin/slurmctld -D
Apr 15 15:18:21 mgt systemd[1]: Started Slurm controller daemon.
[root@mgt slurm]# service slurmctld stop
Redirecting to /bin/systemctl stop slurmctld.service
[root@mgt slurm]# service slurmctld status
Redirecting to /bin/systemctl status slurmctld.service
● slurmctld.service - Slurm controller daemon
Loaded: loaded (/usr/lib/systemd/system/slurmctld.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Apr 15 15:05:50 mgt systemd[1]: slurmctld.service: main process exited, code=exited, s...URE
Apr 15 15:05:50 mgt systemd[1]: Unit slurmctld.service entered failed state.
Apr 15 15:05:50 mgt systemd[1]: slurmctld.service failed.
Apr 15 15:06:23 mgt systemd[1]: Started Slurm controller daemon.
Apr 15 15:06:23 mgt systemd[1]: slurmctld.service: main process exited, code=exited, s...URE
Apr 15 15:06:23 mgt systemd[1]: Unit slurmctld.service entered failed state.
Apr 15 15:06:23 mgt systemd[1]: slurmctld.service failed.
Apr 15 15:18:21 mgt systemd[1]: Started Slurm controller daemon.
Apr 15 15:21:42 mgt systemd[1]: Stopping Slurm controller daemon...
Apr 15 15:21:42 mgt systemd[1]: Stopped Slurm controller daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@mgt slurm]# service slurmctld restart
Redirecting to /bin/systemctl restart slurmctld.service
[root@mgt slurm]# service slurmctld status
Redirecting to /bin/systemctl status slurmctld.service
● slurmctld.service - Slurm controller daemon
Loaded: loaded (/usr/lib/systemd/system/slurmctld.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:22:01 CST; 2s ago
Main PID: 46584 (slurmctld)
CGroup: /system.slice/slurmctld.service
└─46584 /usr/sbin/slurmctld -D
Apr 15 15:22:01 mgt systemd[1]: Started Slurm controller daemon.
启动slurmd
bash
service slurmd status # 查看服务状态
service slurmd start # 启动服务
service slurmd stop # 停止服务
service slurmd restart # 重新启动服务
yaml
[root@mgt slurm]# service slurmd status
Redirecting to /bin/systemctl status slurmd.service
● slurmd.service - Slurm node daemon
Loaded: loaded (/usr/lib/systemd/system/slurmd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@mgt slurm]# service slurmd start
Redirecting to /bin/systemctl start slurmd.service
[root@mgt slurm]# service slurmd status
Redirecting to /bin/systemctl status slurmd.service
● slurmd.service - Slurm node daemon
Loaded: loaded (/usr/lib/systemd/system/slurmd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:23:46 CST; 8s ago
Main PID: 46725 (slurmd)
Tasks: 1
Memory: 800.0K
CGroup: /system.slice/slurmd.service
└─46725 /usr/sbin/slurmd -D
Apr 15 15:23:46 mgt systemd[1]: Started Slurm node daemon.
[root@mgt slurm]# service slurmd stop
Redirecting to /bin/systemctl stop slurmd.service
[root@mgt slurm]# service slurmd status
Redirecting to /bin/systemctl status slurmd.service
● slurmd.service - Slurm node daemon
Loaded: loaded (/usr/lib/systemd/system/slurmd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Apr 15 15:23:46 mgt systemd[1]: Started Slurm node daemon.
Apr 15 15:24:02 mgt systemd[1]: Stopping Slurm node daemon...
Apr 15 15:24:02 mgt systemd[1]: Stopped Slurm node daemon.
[root@mgt slurm]# service slurmd restart
Redirecting to /bin/systemctl restart slurmd.service
[root@mgt slurm]# service slurmd status
Redirecting to /bin/systemctl status slurmd.service
● slurmd.service - Slurm node daemon
Loaded: loaded (/usr/lib/systemd/system/slurmd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2024-04-15 15:24:16 CST; 9s ago
Main PID: 46809 (slurmd)
Tasks: 1
Memory: 820.0K
CGroup: /system.slice/slurmd.service
└─46809 /usr/sbin/slurmd -D
Apr 15 15:24:16 mgt systemd[1]: Started Slurm node daemon.
[root@mgt slurm]#