129云:HPC调度与Slurm集群部署指南
博客 2025-04-26 15:40 75

本文分享自天翼云开发者社区@《HPC调度基础:slurm集群的部署》,作者: 才开始学技术的小白

0.引言

HPC(High Performance Computing,以下简称HPC)是一个领域,试图在任何时间点和技术上对于相关技术、方法和应用等多种方面实现最大的计算能力;换而言之其目的就是求解一类问题的答案,这类问题往往无法通过经验、理论甚至广泛可用的商业计算机/服务器来求解(比如说需要的PB级别数据计算的科研任务、生物科学的DNA解析、难以分析的机器学习模型);HPC的载体是“超级计算机/超级计算系统/平台”,用他们来尽可能快的执行各种计算问题或应用程序,这个执行的过程我们也称之为超级计算;

总而言之,HPC是一个领域,超算平台是他的载体,超级计算是他完成计算任务的过程。而我们常说的HPC产品略有不同,它提供了一种性能卓越、稳定、安全、便捷的(云)计算服务、通过各种互联技术将多个计算机系统连接在一起,利用这些被连接系统的综合计算能力来处理大型计算问题,所以HPC又被称为高性能计算集群

本文将主要介绍一种使用slurm(Simple Linux Utility for Resource Management,以下简称slurm)——一种开源的HPC资源管理与作业调度的基础软件,来进行作业调度并在多虚拟机节点上部署与配置计算集群的方法。

1.slurm的基本含义

1.1 slurm的定义与功能

slurm是一种开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。具体来说,计算集群使用slurm对资源和作业进行管理和调度,减少计算任务间相互干扰,提高集群运行效率。2016年世界十大超算系统,其中就有五个是使用slurm来进行管理的,甚至有众所周知的2016年冠军超算——神威太湖之光。

slurm给超算系统的提供了三个关键功能:

1.为用户分配一定时间的专享或非专享的资源(计算机节点),以执行作业(Job)

2.提供了用于启动、执行、监测在节点上运行的作业的框架

3.为作业队列合理地分配计算资源

1.2 slurm的基本架构

在slurm计算集群系统,众多节点将会分为master节点(主节点/管控节点),compute节点(计算节点)以及部分集群会有client节点(登录节点),它专门用来给用户执行各种作业调度与资源部署的指令,但多数情况是client节点和master节点部署在同一个节点上以简化部署。

slurm包含四种服务(守护进程),在各个节点上有不同的部署分布:

1.slurmctld服务:只运行于master节点,作为中心管理器用于监测资源和作业

2.slurmd服务,主要运行于compute节点,作用是接收调度,承担实际的计算负载;

3.slurmdbd数据库服务,通常运行于master节点,可以将多个slurm管理的集群的记账信息记录在同一个数据库中

4.slurmrestd服务,通常运行于master节点,用来提供REST API与Slurm进行交互

2.虚拟机的安装与配网

可以参考本人专栏文章:https://www.ctyun.cn/developer/article/353763363754053

准备至少两台虚拟机来分别模拟master和compute节点即可

 

3.slurm的安装与部署

3.1 环境与版本

3.2 安装前的准备工作

3.2.1 节点信息一览

3.2.2 修改节点hosts

修改所有节点/etc/hosts文件,添加所有节点ip和主机名映射,即执行:

echo -e "\n192.168.223.66  master\n192.168.223.67  compute" >> /etc/hosts

#可以用cat来检查

cat /etc/hosts

#设置两台虚拟机的hostname

hostnamectl set-hostname master

hostnamectl set-hostname compute

 

3.2.3 关闭防护墙同时禁止防火墙开机启动

在所有节点执行如下指令,若无反应,重启虚拟机即可

systemctl disable firewalld --now

 

3.2.4 用户资源限制

在所有节点执行如下指令,修改默认的用户资源限制

sed -i '$i\* hard nofile 1000000\n* soft nofile 1000000\n* soft core unlimited\n* soft stack 10240\n* soft memlock unlimited\n* hard memlock unlimited' /etc/security/limits.conf

 

3.2.5 修改时区

配置为上海时区,若安装过程中已完成配置,可忽略该步骤(可用date -R查看本地时间来验证)

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

3.2.6 时间同步

munge要求各个节点时间误差在5min内,可以使用ntp或chrony实现时间同步,这里使用ntp

# 首先安装ntp

yum -y install ntp

# 安装完毕之后,启动服务

systemctl start ntpd.service

# 设置开机自启动

systemctl enable ntpd.service

我们拥有两台服务器:192.168.206.138,192.168.206.139

第一台服务器192.168.206.138(master),作为ntpserver,设置为同步外网时间(ntpd服务开启时默认同步)

与此同时,需要设置允许内网网段可以连接,将该服务器作为内网的时间同步服务器,因此进行如下简单配置:

修改/etc/ntp.conf文件,添加如下信息,表示允许223网段来同步此服务器

vi /etc/ntp.conf

restrict 192.168.206.0 mask 255.255.255.0 #添加此行

第二台服务器192.168.206.139,作为ntpclient,设置为同步上面的ntpserver,在节点上做如下配置:

修改/etc/ntp.conf文件,注释掉外网时间服务器,添加本地服务器即可

vi /etc/ntp.conf

server 192.168.206.138     #添加此行

#以下四行为外网时间服务器,注释掉# server 0.centos.pool.ntp.org iburst           # server 1.centos.pool.ntp.org iburst# server 2.centos.pool.ntp.org iburst# server 3.centos.pool.ntp.org iburst

设置后,重启ntpd服务,通过ntpstat检查效果

systemctl restart ntpd

ntpstat

注:重置刚刚完成时,主机是正常的(连接的是ntp外网服务器),但compute显示正在重启中;重置完成几分钟后再观察,发现均正常,说明同步成功

 

3.2.7 设置SSH免密登录

配置master节点以实现ssh免密码登录到其他节点(compute)

在master节点执行

#执行后按三次回车,意味着全部执行默认设置

ssh-keygen -t rsa

#这里的compute可以替换为自己设置的compute节点名称;

#第一次执行的时候需要输入root密码,如果第二次执行显示连接建立成功

ssh-copy-id root@compute

 

3.2.8 创建用户

因为munge安装后会自动创建munge用户,为了避免不同节点munge用户的uid、gid不一致,所以提前创建用户,master和compute都需要执行,ID保持一致

#创建munge用户

export MUNGE_USER_ID=2000

groupadd -g $MUNGE_USER_ID munge

useradd  -m -c "MUNGE User" -d /var/lib/munge -u $MUNGE_USER_ID -g munge  -s /sbin/nologin munge

#创建slurm用户

export SLURM_USER_ID=2001

groupadd -g $SLURM_USER_ID slurm

useradd  -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURM_USER_ID -g slurm  -s /bin/&a

Powered by ©智简魔方