以下是一个详细的步骤指南,帮助你在本地使用 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.10node1=10.0.0.11node2=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 -N
    
    输出应类似:
    NODELIST   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.out
    
    输出应类似:
    Hello 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 集群,并理解其核心调度流程。实际生产环境中需根据硬件资源和业务需求调整配置参数。

posted on 2025-03-29 19:05  LeeHang  阅读(471)  评论(0)    收藏  举报