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

相关推荐
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock4 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面6 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq6 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮7 小时前
Linux 使用中的问题
linux·运维
dsywws8 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零9 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程10 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬11 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节