SLURM简单安装及配置

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
  1. 调度器 (SchedulerType=sched/backfill): 这就像有个聪明的管理员,她会找到空闲时段,让其他短期任务先进行,以免资源浪费,同时确保已经排队的主要任务不会被推迟。

  2. 资源选择类型 (SelectType=select/cons_res): 想象一个精细的预算规划师,他会确保每个项目只拿它所需要的,不多也不少,以避免资源被浪费掉。

  3. 资源选择参数 (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]# 

启动子节点服务

启动munge和slurmd,命令同上但没有slurmctl

相关推荐
虾..6 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙6 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1238 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen9 小时前
Linux字符串处理
linux·string
张童瑶9 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功12310 小时前
什么是SELinux
linux
石小千10 小时前
Linux安装OpenProject
linux·运维
柏木乃一10 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-309010 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯10 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix