从零构建你的高性能计算堡垒:CentOS 7上SLURM与GPU集群的深度部署与调优实战
如果你手头有几台甚至几十台搭载了GPU的服务器,却还在用最原始的方式手动提交任务,或者为资源分配不均而头疼,那么是时候考虑一个专业的“任务调度管家”了。在高性能计算、机器学习模型训练、大规模数据分析等领域,一个稳定、高效的集群调度系统不是奢侈品,而是生产力工具的核心。SLURM正是这个领域的佼佼者,它像一个经验丰富的交通指挥官,能让你手头的计算资源(尤其是昂贵的GPU)井然有序地运转起来,最大化每一块显卡的利用率。
这篇文章不是一份简单的操作清单,而是一次从底层原理到上层实践的深度旅程。我们将一起在CentOS 7系统上,从裸机状态开始,构建一个包含管理节点和计算节点的SLURM集群,并特别聚焦于GPU资源的整合与管理。我会分享那些官方文档里不会写的“踩坑”经验,以及如何根据你的实际工作流进行关键配置调优,确保搭建出来的不是一个“能跑就行”的玩具,而是一个真正可靠的生产力平台。
1. 集群蓝图规划与基础环境奠基
在动手敲下第一条命令之前,清晰的规划能避免后续无数的麻烦。一个典型的SLURM集群至少包含一个管理节点和一个或多个计算节点。管理节点运行slurmctld(中央管理守护进程)和slurmdbd(数据库守护进程,用于记账),它负责接收用户提交的作业、调度决策以及监控整个集群状态。计算节点则运行slurmd守护进程,负责执行具体的计算任务。
对于GPU集群,我们还需要额外关注NVIDIA驱动、CUDA工具包以及SLURM对GPU的识别能力。理想情况下,所有计算节点应安装相同版本的操作系统、驱动和CUDA,以减少环境不一致带来的问题。
1.1 系统初始化与网络配置
首先,确保所有节点(管理节点和计算节点)都安装了CentOS 7的最小化安装版本,并已配置好静态IP地址。动态IP在集群环境中是灾难性的。
步骤一:设置主机名并配置hosts文件 清晰的主机名有助于管理和排查问题。在每个节点上执行:
# 在管理节点上
hostnamectl set-hostname master
# 在计算节点1上
hostnamectl set-hostname node-gpu01
# 在计算节点2上
hostnamectl set-hostname node-gpu02
注意:主机名最好简洁、有意义,避免使用下划线,可以使用短横线。
接下来,我们需要在所有节点上编辑/etc/hosts文件,建立IP地址与主机名的映射关系。这一步至关重要,能确保集群内部通过主机名互相通信,而不是依赖可能不可靠的DNS。
vi /etc/hosts
添加类似以下内容(请替换为你的实际IP和主机名):
192.168.1.100 master
192.168.1.101 node-gpu01
192.168.1.102 node-gpu02
将这个文件在所有节点间保持完全一致。一个高效的方法是先在管理节点上配置好,然后用scp命令分发到各个计算节点:
# 从master执行
scp /etc/hosts root@node-gpu01:/etc/
scp /etc/hosts root@node-gpu02:/etc/
步骤二:调整安全策略 为了简化集群内部通信,我们通常需要临时调整或关闭一些严格的安全策略。在生产环境中,请根据你的安全需求谨慎评估以下操作。
-
关闭SELinux:编辑
/etc/selinux/config文件,将SELINUX设置为disabled,然后重启系统。sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config reboot重启后,可以用
getenforce命令验证,输出应为Disabled。 -
配置防火墙:SLURM的各个守护进程需要通过特定端口通信。更简单的做法是暂时关闭防火墙(仅用于内部测试环境),或者精确开放所需端口。
# 关闭并禁用防火墙(简易方式,适用于封闭内网) systemctl stop firewalld systemctl disable firewalld如果必须开启防火墙,你需要开放端口6817-6819(SLURM默认端口范围)。
步骤三:配置SSH免密登录 管理节点需要能免密登录到所有计算节点,以便进行文件分发和批量管理。在管理节点上生成SSH密钥对,并将公钥分发到所有节点(包括自身)。
# 在master节点执行
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
ssh-copy-id master
ssh-copy-id node-gpu01
ssh-copy-id node-gpu02
完成后,测试从master节点ssh node-gpu01是否能直接登录,无需密码。
1.2 创建专用系统用户
SLURM和其认证组件Munge需要专用的系统用户来运行,这有助于权限隔离和安全。我们需要在所有节点上创建相同UID和GID的用户。
# 创建Munge用户和组 (UID/GID 设为 991)
groupadd -g 991 munge
useradd -m -c "Munge Uid 'N' Gid Emporium" -d /var/lib/munge -u 991 -g munge -s /sbin/nologin munge
# 创建Slurm用户和组 (UID/GID 设为 992)
groupadd -g 992 slurm
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u 992


682

被折叠的 条评论
为什么被折叠?



