slurm部署

Slurm(Simple Linux Utility for Resource Management)是开源的高性能计算(HPC)资源管理与作业调度系统,广泛用于集群环境的 CPU、GPU 等资源调度。以下是 Slurm 完整部署指南,包含单节点测试、多节点集群部署、基础配置与作业提交,适配科研 / 企业级 HPC 场景:

一、部署前准备(环境要求 + 前置配置)

(一)核心环境要求
角色 配置规格 说明
操作系统 CentOS 7/8、Ubuntu 20.04/22.04(所有节点一致) 推荐 CentOS 7(兼容性最佳)
硬件配置 控制节点(Controller):2 核 4GB+;计算节点(Compute):2 核 4GB+ 生产环境根据集群规模扩容(如 100 节点集群控制节点建议 8 核 16GB)
网络要求 所有节点互通(内网优先),关闭防火墙或开放必要端口(无固定端口,依赖 RPC 通信) 控制节点与计算节点需免密 SSH 登录(用于节点通信)
依赖组件 Munge(身份认证)、MariaDB/PostgreSQL(可选,用于会计存储)、libmunge-devel、openssl-devel 必须安装 Munge(Slurm 核心认证组件)
(二)前置操作(所有节点执行)
1. 关闭防火墙与 SELinux

bash

运行

复制代码
# 关闭SELinux(永久生效,需重启)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

# 关闭防火墙(生产环境可按需开放端口,简化部署时直接关闭)
systemctl stop firewalld && systemctl disable firewalld
2. 配置主机名与 hosts 文件(关键!)
  • 控制节点 (示例 hostname:slurm-master):

    bash

    运行

    复制代码
    hostnamectl set-hostname slurm-master
  • 计算节点 (示例 hostname:slurm-node1、slurm-node2...):

    bash

    运行

    复制代码
    hostnamectl set-hostname slurm-node1  # 每个计算节点修改为唯一主机名
  • 所有节点配置 /etc/hosts(添加控制节点与所有计算节点的 IP + 主机名映射):

    vi /etc/hosts

    添加如下内容(替换为实际IP和主机名)

    192.168.1.100 slurm-master # 控制节点IP
    192.168.1.101 slurm-node1 # 计算节点1IP
    192.168.1.102 slurm-node2 # 计算节点2IP

3. 配置控制节点到计算节点的免密 SSH 登录(控制节点执行)

bash

运行

复制代码
# 生成SSH密钥(一路回车,无需设置密码)
ssh-keygen -t rsa

# 复制公钥到所有计算节点(包括自身,方便本地测试)
ssh-copy-id slurm-master
ssh-copy-id slurm-node1
ssh-copy-id slurm-node2
4. 安装依赖组件(所有节点执行)
  • CentOS 7/8

    bash

    运行

    复制代码
    # CentOS 7
    yum install -y epel-release
    yum install -y munge munge-libs munge-devel openssl-devel gcc gcc-c++ make mariadb-server mariadb-devel
    
    # CentOS 8
    dnf install -y epel-release
    dnf install -y munge munge-libs munge-devel openssl-devel gcc gcc-c++ make mariadb-server mariadb-devel

Ubuntu

bash

运行

复制代码
apt update
apt install -y munge libmunge-dev openssl libssl-dev gcc g++ make mariadb-server libmariadb-dev

二、Slurm 部署(控制节点主导,计算节点同步)

(一)步骤 1:安装与配置 Munge 认证(所有节点执行)

Munge 是 Slurm 节点间身份认证的核心,必须确保所有节点的 Munge 密钥一致。

  1. 控制节点生成 Munge 密钥

    bash

    运行

    复制代码
    # 初始化 Munge(生成密钥)
    dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
    chmod 400 /etc/munge/munge.key
    chown munge:munge /etc/munge/munge.key
    
    # 启动 Munge 服务并设置开机自启
    systemctl start munge && systemctl enable munge
    systemctl status munge  # 验证状态为 active (running)

2、复制 Munge 密钥到所有计算节点(控制节点执行):

bash

运行

复制代码
scp /etc/munge/munge.key slurm-node1:/etc/munge/
scp /etc/munge/munge.key slurm-node2:/etc/munge/

3、计算节点启动 Munge 服务(所有计算节点执行):

  1. bash

    运行

    复制代码
    chmod 400 /etc/munge/munge.key
    chown munge:munge /etc/munge/munge.key
    systemctl start munge && systemctl enable munge
    systemctl status munge  # 确保启动成功
(二)步骤 2:编译安装 Slurm(所有节点执行)

Slurm 官方推荐编译安装(版本更新快,适配自定义配置),以下以 Slurm 23.11.8(LTS 版本)为例:

  1. 下载 Slurm 源码包(所有节点执行):

    复制代码
    cd /opt
    wget https://download.schedmd.com/slurm/slurm-23.11.8.tar.bz2
    tar -jxvf slurm-23.11.8.tar.bz2
    cd slurm-23.11.8
  2. 编译安装(所有节点执行):

    配置编译参数(指定安装路径、依赖库)

    ./configure --prefix=/usr/local/slurm
    --sysconfdir=/etc/slurm
    --with-munge=/usr
    --with-openssl=/usr
    --with-mysql=/usr

    编译安装(-j 后接CPU核心数,加速编译)

    make -j 4 && make install

3. 配置环境变量(所有节点执行,永久生效):

复制代码
echo 'export PATH=$PATH:/usr/local/slurm/bin:/usr/local/slurm/sbin' >> /etc/profile
source /etc/profile

# 验证安装(显示版本则成功)
slurmctld --version  # 控制节点命令
slurmd --version     # 计算节点命令
(三)步骤 3:配置 Slurm 核心文件(控制节点执行,计算节点同步)

Slurm 核心配置文件为 /etc/slurm/slurm.conf,需根据集群拓扑自定义。

  1. 生成基础配置文件(控制节点执行):
复制代码
   cd /opt/slurm-23.11.8/contribs/configurator_easy.html

   # 方法1:本地浏览器打开该HTML文件,填写集群信息生成配置(推荐,可视化)
   # 方法2:通过命令行生成(示例配置,需根据实际修改)
   cat > /etc/slurm/slurm.conf << EOF
   # 集群名称(自定义)
   ClusterName=hpc-cluster
   # 控制节点主机名
   ControlMachine=slurm-master
   # 控制节点端口(默认6817,无需修改)
   ControlPort=6817
   # 计算节点端口(默认6818,无需修改)
   SlurmdPort=6818
   # 节点通信超时时间(秒)
   SlurmctldTimeout=300
   SlurmdTimeout=300
   # 作业账户文件(记录作业归属)
   AccountingStorageType=accounting_storage/none  # 暂不启用会计功能(后续可配置MariaDB)
   # 日志文件路径
   SlurmctldLog=/var/log/slurm/slurmctld.log
   SlurmdLog=/var/log/slurm/slurmd.log
   # 节点配置(NodeName=主机名 CPU=核心数 RealMemory=内存MB State=UNKNOWN)
   NodeName=slurm-master CPU=2 RealMemory=4096 State=UNKNOWN  # 控制节点也可作为计算节点
   NodeName=slurm-node1 CPU=4 RealMemory=8192 State=UNKNOWN
   NodeName=slurm-node2 CPU=4 RealMemory=8192 State=UNKNOWN
   # 分区配置(PartitionName=分区名 Nodes=节点范围 Default=YES 表示默认分区)
   PartitionName=debug Nodes=slurm-master,slurm-node[1-2] Default=YES MaxTime=24:00:00 State=UP
   EOF
  1. 创建日志目录(所有节点执行):

    mkdir -p /var/log/slurm
    chown root:root /var/log/slurm
    chmod 755 /var/log/slurm

复制配置文件到所有计算节点(控制节点执行):

复制代码
scp /etc/slurm/slurm.conf slurm-node1:/etc/slurm/
scp /etc/slurm/slurm.conf slurm-node2:/etc/slurm/
四)步骤 4:启动 Slurm 服务(控制节点→计算节点)
  1. 控制节点启动 slurmctld 服务

    启动服务并设置开机自启

    systemctl start slurmctld && systemctl enable slurmctld
    systemctl status slurmctld # 验证状态为 active (running)

2.计算节点启动 slurmd 服务(所有计算节点执行):

复制代码
systemctl start slurmd && systemctl enable slurmd
systemctl status slurmd  # 验证状态为 active (running)
(五)步骤 5:验证集群状态(控制节点执行)
复制代码
# 查看节点状态(所有节点显示 IDLE 表示正常)
sinfo
# 输出示例:
# PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
# debug*       up 2-00:00:00      3   idle slurm-master,slurm-node1,slurm-node2

# 查看节点详细信息
scontrol show nodes

# 查看 Slurm 服务状态
scontrol show slurmctld

三、Slurm 基础使用:提交与管理作业

(一)作业提交方式(两种核心方式)
1. 交互式作业(实时占用资源,适合调试)
复制代码
# 申请1个CPU核心,1GB内存,交互登录节点
srun -n 1 -c 1 --mem=1G --pty /bin/bash

# 登录后可执行命令(如运行脚本、编译程序)
hostname  # 查看当前所在节点
./your_program.sh  # 运行自定义程序

# 退出交互模式(释放资源)
exit
2. 批处理作业(后台运行,适合长时间任务)
  1. 创建作业脚本(如 job.sh):

    cat > job.sh << EOF
    #!/bin/bash
    #SBATCH -J test-job # 作业名称
    #SBATCH -n 2 # 总进程数
    #SBATCH -c 1 # 每个进程占用的CPU核心数
    #SBATCH --mem=2G # 作业总内存
    #SBATCH -o job.out # 标准输出日志
    #SBATCH -e job.err # 标准错误日志
    #SBATCH -p debug # 指定分区(与slurm.conf中一致)

    作业执行内容(示例:查看节点信息、运行sleep命令)

    echo "Job start time: (date)" echo "Running on node: (hostname)"
    srun hostname # 每个进程输出所在节点
    sleep 60 # 模拟任务运行
    echo "Job end time: $(date)"
    EOF

2.提交作业:

复制代码
sbatch job.sh
# 输出示例:Submitted batch job 1(作业ID为1)
(二)作业管理常用命令
复制代码
# 查看作业队列(所有用户作业)
squeue
# 查看指定用户作业(如用户root)
squeue -u root

# 取消作业(替换1为作业ID)
scancel 1

# 查看作业详情(替换1为作业ID)
scontrol show job 1

# 查看作业输出日志
cat job.out
cat job.err

# 查看集群资源使用情况
sstat -j 1  # 查看运行中作业的资源使用
seff 1      # 查看已完成作业的资源利用率

四、进阶配置(可选,生产环境必备)

(一)启用会计功能(记录作业历史,支持配额管理)
  1. 控制节点安装并配置 MariaDB:

    启动MariaDB服务

    systemctl start mariadb && systemctl enable mariadb

    初始化数据库(设置root密码、移除匿名用户等)

    mysql_secure_installation

    登录数据库,创建Slurm账号和数据库

    mysql -u root -p
    CREATE DATABASE slurm_acct_db;
    CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'SlurmDB@123'; # 自定义密码
    GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'localhost';
    FLUSH PRIVILEGES;
    exit

2.编译安装 Slurm 数据库插件(控制节点执行):

复制代码
cd /opt/slurm-23.11.8
./configure --prefix=/usr/local/slurm --with-mysql=/usr
make -j 4 && make install

3.初始化会计数据库并修改 Slurm 配置:

复制代码
# 初始化数据库
/usr/local/slurm/bin/sacctmgr initdb

# 修改 slurm.conf 启用会计
sed -i 's/AccountingStorageType=accounting_storage\/none/AccountingStorageType=accounting_storage\/mysql/' /etc/slurm/slurm.conf
echo 'AccountingStorageHost=localhost' >> /etc/slurm/slurm.conf
echo 'AccountingStorageUser=slurm' >> /etc/slurm/slurm.conf
echo 'AccountingStoragePass=SlurmDB@123' >> /etc/slurm/slurm.conf  # 与数据库密码一致

# 重启 Slurm 控制服务
systemctl restart slurmctld

4.验证会计功能

复制代码
# 查看作业历史(提交过的作业会被记录)
sacct
(二)GPU 资源调度配置(若集群含 GPU)
  1. 所有节点安装 NVIDIA 驱动和 CUDA(略,参考 NVIDIA 官方文档)。

  2. 修改 slurm.conf 添加 GPU 资源配置:

    在 NodeName 行添加 Gres=gpu:数量(如2块GPU)

    NodeName=slurm-node1 CPU=4 RealMemory=8192 Gres=gpu:2 State=UNKNOWN
    NodeName=slurm-node2 CPU=4 RealMemory=8192 Gres=gpu:2 State=UNKNOWN

    添加 Gres 配置项

    GresTypes=gpu

3.提交 GPU 作业示例

复制代码
sbatch --gres=gpu:1 job.sh  # 申请1块GPU

五、常见问题排查

1. 节点状态显示 DOWN/UNKNOWN
  • 检查 Munge 服务是否正常:systemctl status munge(所有节点必须运行)。
  • 检查节点间网络连通性:ssh slurm-node1(控制节点能免密登录计算节点)。
  • 查看 Slurm 日志:cat /var/log/slurm/slurmctld.log(控制节点)、cat /var/log/slurm/slurmd.log(计算节点),定位报错(如配置文件语法错误、资源参数不匹配)。
2. 作业提交失败(提示资源不足)
  • 检查节点状态:sinfo(确保节点为 IDLE 状态)。
  • 检查作业资源请求是否超过节点配置:scontrol show nodes(对比 CPU / 内存参数)。
  • 查看队列拥堵情况:squeue(是否有大量作业占用资源)。
3. Munge 认证失败(日志显示 munge: authentication failed)
  • 确保所有节点的 /etc/munge/munge.key 完全一致(重新复制密钥并重启 Munge)。
  • 检查密钥权限:ls -l /etc/munge/munge.key(必须为 400,属主 munge:munge)。

六、运维建议(生产环境)

  1. 日志管理:定期归档 Slurm 日志(/var/log/slurm),避免磁盘占满。

  2. 高可用:控制节点配置主备(Slurm HA),避免单点故障。

  3. 资源监控:结合 Prometheus + Grafana 监控 Slurm 集群资源使用情况。

  4. 权限管控:通过 sacctmgr 管理用户、账户和资源配额,避免资源滥用。

  5. 版本更新:定期升级 Slurm 到最新 LTS 版本(修复漏洞,优化性能)。

    总结

    Slurm 部署核心是 Munge 认证一致性slurm.conf 配置正确性,关键步骤为:环境准备→Munge 配置→Slurm 编译安装→集群配置→服务启动→作业测试。单节点部署可快速验证功能,多节点集群需重点保障节点间网络连通性和配置同步。通过 sinfo(节点状态)、squeue(作业队列)、sbatch(作业提交)三个核心命令,可完成日常集群管理。生产环境建议启用会计功能和 GPU 调度(如需),并配置监控与高可用。

相关推荐
Eloudy9 小时前
08章 向量内存操作 - “Vega“ 7nm Instruction Set ArchitectureReference Guide
gpu·arch
Eloudy1 天前
cudaEventCreateWithFlags 的 cudaEventInterprocess 和 cudaEventDisableTiming
gpu·cuda·arch
virtaitech2 天前
云平台一键部署【facebook/sam3】图像和视频中的可提示分割
人工智能·gpu·facebook·池化技术·永久免费
玄德公笔记2 天前
GPU节点接入k8s集群的处理
docker·kubernetes·gpu·containerd·nvidia·runtime·fabricmanager
云卓SKYDROID2 天前
无人机计算平台技术要点与难点
无人机·cpu·飞控·高科技·云卓科技·链路
吴佳浩3 天前
大模型量化部署终极指南:让700亿参数的AI跑进你的显卡
人工智能·python·gpu
杰克逊的日记3 天前
大模型的原理是什么
人工智能·大模型·gpu·算力
遇见火星3 天前
Linux性能调优:理解CPU中的平均负载和使用率
linux·运维·服务器·cpu
MonkeyKing_sunyuhua3 天前
什么是GPU机器,怎么计算GPU显卡的算力,应该从那几个方面计算
gpu
Baihai_IDP3 天前
AI 处理器全景指南(CPU、GPU、TPU、APU、NPU、IPU、RPU...)
人工智能·面试·gpu