以下是一个详细的步骤指南,帮助你在本地使用 VMware Workstation 模拟 3 台虚拟机,搭建一个简单的 Slurm 集群,并通过实际作业调度快速掌握其核心功能。整个过程分为 虚拟机配置、Slurm 安装、集群部署、作业提交 四个阶段。
一、虚拟机环境准备
1. 创建 3 台 CentOS/Ubuntu 虚拟机
- 系统要求:CentOS 7/8 或 Ubuntu 20.04/22.04(本文以 CentOS 7 为例)。
- 虚拟机配置:
- 主节点 (master):1 核 CPU,2GB 内存,40GB 磁盘。
- 计算节点 (node1, node2):各 1 核 CPU,2GB 内存,40GB 磁盘。
- 网络配置:
- 使用 NAT 或桥接模式,确保三台虚拟机在同一子网内。
- 配置静态 IP(例如:
master=10.0.0.10,node1=10.0.0.11,node2=10.0.0.12)。 - 修改
/etc/hosts添加主机名解析:# 所有节点执行 sudo vi /etc/hosts 10.0.0.10 master 10.0.0.11 node1 10.0.0.12 node2
2. 配置 SSH 免密登录
- 主节点生成密钥:
ssh-keygen -t rsa # 默认路径,回车确认 - 将公钥分发到所有节点:
ssh-copy-id master ssh-copy-id node1 ssh-copy-id node2
二、安装 Slurm 和依赖
1. 所有节点安装依赖
- 安装 EPEL 仓库(仅限 CentOS):
sudo yum install epel-release - 安装 Slurm 和 Munge(认证工具):
# CentOS sudo yum install -y slurm slurm-slurmd slurm-slurmctld slurm-devel munge munge-devel # Ubuntu sudo apt install -y slurm slurm-slurmd slurm-slurmctld slurm-devel munge munge-devel
2. 配置 Munge(所有节点)
- 生成 Munge 密钥并同步:
# 在主节点生成密钥 sudo dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key sudo chmod 400 /etc/munge/munge.key sudo chown munge:munge /etc/munge/munge.key # 将密钥复制到 node1 和 node2 scp /etc/munge/munge.key node1:/etc/munge/ scp /etc/munge/munge.key node2:/etc/munge/ - 启动 Munge 服务:
sudo systemctl enable --now munge
三、配置 Slurm 集群
1. 主节点生成配置文件
- 生成默认配置文件:
sudo cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf sudo vi /etc/slurm/slurm.conf - 修改
slurm.conf关键参数:ControlMachine=master # 主节点主机名 SlurmctldPort=6817 SlurmdPort=6818 AuthType=auth/munge # 定义节点(根据实际虚拟机配置调整) NodeName=node[1-2] Sockets=1 CoresPerSocket=1 ThreadsPerCore=1 State=UNKNOWN PartitionName=normal Nodes=node[1-2] Default=YES MaxTime=INFINITE State=UP - 同步配置文件到所有节点:
scp /etc/slurm/slurm.conf node1:/etc/slurm/ scp /etc/slurm/slurm.conf node2:/etc/slurm/
2. 启动 Slurm 服务
- 主节点启动控制服务:
sudo systemctl enable --now slurmctld - 计算节点启动计算服务:
# 在 node1 和 node2 执行 sudo systemctl enable --now slurmd
3. 验证集群状态
- 查看节点是否在线:
输出应类似:sinfo -NNODELIST NODES PARTITION STATE node1 1 normal idle node2 1 normal idle
四、提交 Slurm 作业
1. 编写测试作业脚本
- 创建作业脚本
test.sh:#!/bin/bash #SBATCH --job-name=hello_slurm #SBATCH --output=hello.out #SBATCH --nodes=1 #SBATCH --ntasks-per-node=1 echo "Hello from Slurm! Running on node: $(hostname)" - 提交作业:
sbatch test.sh - 查看作业队列:
squeue
2. 验证作业执行结果
- 查看输出文件
hello.out:
输出应类似:cat hello.outHello from Slurm! Running on node: node1
五、故障排查
1. 常见问题
- 节点状态为
down:- 检查
slurmd服务是否启动:systemctl status slurmd - 查看日志:
journalctl -u slurmd
- 检查
- 作业无法调度:
- 检查
slurm.conf是否一致:scontrol show config - 查看主节点日志:
tail -f /var/log/slurmctld.log
- 检查
2. 关键命令速查
sinfo # 查看分区和节点状态
squeue # 查看作业队列
scontrol show nodes # 显示节点详细信息
scancel <jobid> # 取消作业
六、扩展场景
1. 多节点并行作业
- 提交 MPI 作业:
#SBATCH --nodes=2 #SBATCH --ntasks-per-node=1 srun hostname
2. GPU 资源调度
- 修改
slurm.conf添加 GPU 支持:NodeName=gpu-node Gres=gpu:1 PartitionName=gpu Nodes=gpu-node
通过上述步骤,你可以在本地虚拟机环境中快速搭建一个 Slurm 集群,并理解其核心调度流程。实际生产环境中需根据硬件资源和业务需求调整配置参数。
浙公网安备 33010602011771号