You need to enable JavaScript to run this app.
文档中心
GPU云服务器

GPU云服务器

复制全文
下载 pdf
搭建应用
HPC-搭建Slurm计算集群
复制全文
下载 pdf
HPC-搭建Slurm计算集群
本文介绍如何在高性能计算GPU实例上搭建Slurm计算集群。​
概述​
什么是Slurm​
Slurm(Simple Linux Utility for Resource Management)是一个开源、容错和高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。Slurm的运行不需要内核修改,并且相对独立。作为集群工作负载管理器,Slurm具有以下三个关键功能:​
  • 在一段时间内为用户分配对资源(计算节点)的独占或非独占访问,以便资源可以执行工作。​
  • 为在分配的节点集上启动、执行和监控工作(通常是并行工作)提供框架。​
  • 通过管理待处理工作队列来仲裁资源争用。​
架构图​
架构图来源于:Slurm官方网站。​
​​​
  • 控制进程slurmctld :资源管理系统的中枢服务,负责资源状态维护、资源分配、作业调度、作业管理控制等。​
  • 节点监控进程slurmd:运行在每个计算节点上,负责收集节点上的资源状态并向控制进程报告,slurmd接收来自控制进程与用户命令的请求,进行作业步任务加载、作业取消等操作。​
  • slurmdbd:命令工具与控制进程访问数据库的中间层。它提供访问数据与关联信息的统一接口,并起到用户认证与安全隔离的作用。​
  • Client commands用户命令包含 :​
  • sbatch:提交单节点和多节点 slurm任务。​
  • srun:运行作业。​
  • scancel:终止排队中或运行中的作业。​
  • sinfo:查看系统状态。​
  • squeue:查看作业状态。​
  • sacct:查看运行中或结束了的作业及作业步信息等命令。​
  • scontrol:作为管理工具,可以监控、修改集群的配置和状态信息等。​
  • sacctmgr:用于管理数据库,可认证集群、有效用户、有效记账账户等。​
前期准备​
准备3台高性能GPU云服务器实例分别作为管理节点和计算节点,均需进行如下操作,假设各节点配置信息如下:​
  • 操作系统:CentOS 7.8​
  • 实例规格:4vCPU,16G内存,300G数据盘​
  • 数据库规格:MySQL,2vCPU,4G内存,100G数据盘​
  • 计算节点1:C1,192.168.0.32​
  • 计算节点2:C2,192.168.0.159​
  • 管理节点:M1,192.168.0.65​
  1. 请分别在3个节点执行以下命令,设置主机名:​
  • ​
    hostnamectl set-hostname m1​
    hostnamectl set-hostname c1​
    hostnamectl set-hostname c2​
    ​
  1. 删除已安装的slurm。如果您之前未安装slurm,请跳过本步骤。​
  • 删除数据库。​
  • ​
    yum remove mariadb-server mariadb-devel -y​
    ​
  • 移除Slurm和Munge。​
  • ​
    yum remove slurm munge munge-libs munge-devel -y​
    ​
  • 删除用户和相应的文件夹。​
  • ​
    userdel -r slurm​
    userdel -r munge​
    ​
  1. 关闭防火墙。​
  • ​
    systemctl stop firewalld​
    systemctl disable firewalld​
    systemctl stop iptables​
    systemctl disable iptables​
    ​
  1. 修改资源限制。​
  1. 执行以下命令打开文件。​
  • ​
    vim /etc/security/limits.conf​
    ​
  1. 在End of file下方添加如下内容,如下图所示。​
  • ​
    - nofile 655360​
    - nproc 655350​
    ​
  • ​​​
  1. 配置时区,同步集群时钟。​
  • ​
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime​
    ​
  1. 安装配置NTP服务器。​
  1. 安装NTP服务器。​
  • ​
    yum install ntp -y​
    systemctl enable ntpd.service​
    ntpdate pool.ntp.org​
    systemctl start ntpd​
    ​
  1. 同步NTP服务器。​
  • ​
    yum install ntp -y​
    systemctl start ntpd​
    systemctl enable ntpd​
    ​
  1. 安装EPEL源。​
  • ​
    yum install http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm​
    ​
  1. 在控制节点M1安装配置NFS。​
  1. 安装NFS。​
  • ​
    yum -y install nfs-utils rpcbind​
    ​
  1. 创建 exports 文件。​
  1. 执行以下命令创建并打开文件。​
  • ​
    vim /etc/exports​
    ​
  1. 添加如下内容。​
  • ​
    /software/ *(rw,async,insecure,no_root_squash)​
    ​
  1. 启动NFS。​
  • ​
    systemctl start nfs​
    systemctl start rpcbind​
    systemctl enable nfs​
    systemctl enable rpcbind​
    ​
  1. 查看NFS状态。​
  • ​
    systemctl status nfs​
    ​
  • 回显如下,表示安装成功。​
  • ​​​
  1. 编辑本地静态解析。​
  1. 执行以下命令打开本地hosts文件。​
  • ​
    vi /etc/hosts​
    ​
  1. 将下列内容写入到文件中,IP地址与主机名请根据实际情况替换。​
  • ​
    192.168.0.253 m1​
    192.168.0.65 c1​
    192.168.0.191 c2​
    ​
  1. 免密认证。​
  1. 生成密钥。​
  • ​
    ssh-keygen​
    ​
  • 根据提示连续按enter键后,回显如下:​
  • ​​​
  1. 复制密钥到C1、C2计算节点。​
  • ​
    ssh-copy-id -i .ssh/id_rsa.pub c1​
    ssh-copy-id -i .ssh/id_rsa.pub c2​
    ​
  • 过程中请输入计算节点登录密码。​
  • ​​​
  1. 重新登录计算节点,确认无需输入密码,表示免密认证成功。​
  • ​
    ssh root@c1​
    ssh root@c2​
    ​
步骤一:安装munge​
Slurm和Munge要求集群中每个节点的UID和GID一致,请登录各节点,完成munge的安装。​
  1. 创建全局用户。​
  • ​
    export MUNGEUSER=991​
    groupadd -g $MUNGEUSER munge​
    useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge​
    ​
  1. 安装Munge。​
  1. 安装epel库。​
  • ​
    yum install epel-release​
    ​
  1. 安装munge。​
  • ​
    yum install munge munge-libs munge-devel -y​
    ​
  1. 安装rng工具。​
  • ​
    yum install rng-tools -y ​
    ​
  1. 在控制节点M1上新建密钥并设置权限。​
  • ​
    /usr/sbin/create-munge-key -r​
    dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key ​
    chown munge: /etc/munge/munge.key ​
    chmod 400 /etc/munge/munge.key​
    ​
  1. 将生成的密钥发送到计算节点C1和C2。​
  • ​
    scp /etc/munge/munge.key root@c1:/etc/munge​
    scp /etc/munge/munge.key root@c2:/etc/munge​
    ​
  • 输入yes后,输入计算节点密码可以看到密钥发送成功,如下图所示。​
  • ​​​
  1. 在管理节点M1和计算节点C1、C2中修改权限。​
  • ​
    chown -R munge: /etc/munge/ /var/log/munge/ ​
    chmod 0700 /etc/munge/ /var/log/munge/​
    systemctl enable munge ​
    systemctl restart munge​
    ​
  1. 检查munge状态。​
  • ​
    systemctl restart munge​
    systemctl status munge​
    ​
  1. 在管理节点M1上执行以下命令,验证munge是否安装成功以及管理节点与各计算节点的连通性。​
  • ​
    munge -n ​
    munge -n | unmunge ​
    munge -n | ssh c1 unmunge​
    munge -n | ssh c2 unmunge​
    ​
  • 回显如下,表示安装成功。​
  • ​​​
步骤二:安装slurm​
请登录各节点,完成slurm的安装。​
  1. 创建slurm用户。​
  • ​
    groupadd -g 1109 slurm​
    useradd -m -c "Slurm manager" -d /var/lib/slurm -u 1109 -g slurm -s /bin/bash slurm​
    ​
  1. 安装依赖项。​
  • ​
    yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y​
    yum install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mysql-devel -y​
    ​
  1. 下载安装slurm。​
  1. 安装slurm。​
  • ​
    wget https://download.schedmd.com/slurm/slurm-20.02.7.tar.bz2​
    ​
  1. 安装rpmbuild编译Slurm,并制作rpm包。​
  • ​
    yum install rpm-build​
    rpmbuild -ta slurm-20.02.7.tar.bz2​
    ​
  1. 进入rpm包目录下,安装Slurm。​
  • ​
    cd /root/rpmbuild/RPMS/x86_64​
    yum localinstall slurm-*​
    ​
步骤三:配置管理节点​
  1. 登录管理节点M1,创建相关文件。​
  • ​
    mkdir /var/spool/slurmctld​
    chown slurm: /var/spool/slurmctld​
    chmod 755 /var/spool/slurmctld​
    touch /var/log/slurmctld.log​
    chown slurm: /var/log/slurmctld.log​
    touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log​
    chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log​
    mkdir /var/spool/slurm​
    chown slurm:slurm /var/spool/slurm​
    chmod 755 /var/spool/slurm​
    mkdir -p /var/spool/slurm/cluster_state​
    chown slurm:slurm /var/spool/slurm/cluster_state​
    ​
  1. 编辑管理节点配置文件。​
  1. 打开文件。​
  • ​
    vi /etc/slurm/slurm.conf​
    ​
  • 输入以下内容。​
  • ​
    #​
    # Example slurm.conf file. Please run configurator.html​
    # (in doc/html) to build a configuration file customized​
    # for your environment.​
    #​
    #​
    # slurm.conf file generated by configurator.html.​
    #​
    # See the slurm.conf man page for more information.​
    #​
    ClusterName=test​
    ControlMachine=m1​
    ControlAddr=192.168.0.65 #管理节点IP​
    #BackupController=​
    #BackupAddr=​
    #​
    SlurmUser=slurm​
    #SlurmdUser=root​
    SlurmctldPort=6817​
    SlurmdPort=6818​
    AuthType=auth/munge​
    #JobCredentialPrivateKey=​
    #JobCredentialPublicCertificate=​
    StateSaveLocation=/var/spool/slurmctld​
    SlurmdSpoolDir=/var/spool/slurm/d​
    SwitchType=switch/none​
    MpiDefault=none​
    SlurmctldPidFile=/var/run/slurmctld.pid​
    SlurmdPidFile=/var/run/slurmd.pid​
    ProctrackType=proctrack/pgid​
    #PluginDir=​
    #FirstJobId=​
    ReturnToService=0​
    #MaxJobCount=​
    #PlugStackConfig=​
    #PropagatePrioProcess=​
    #PropagateResourceLimits=​
    #PropagateResourceLimitsExcept=​
    #Prolog=​
    #Epilog=​
    #SrunProlog=​
    #SrunEpilog=​
    #TaskProlog=​
    #TaskEpilog=​
    #TaskPlugin=​
    #TrackWCKey=no​
    #TreeWidth=50​
    #TmpFS=​
    #UsePAM=​
    #​
    # TIMERS​
    SlurmctldTimeout=300​
    SlurmdTimeout=300​
    InactiveLimit=0​
    MinJobAge=300​
    KillWait=30​
    Waittime=0​
    #​
    # SCHEDULING​
    SchedulerType=sched/backfill​
    #SchedulerAuth=​
    SelectType=select/cons_tres​
    SelectTypeParameters=CR_Core​
    #PriorityType=priority/multifactor​
    #PriorityDecayHalfLife=14-0​
    #PriorityUsageResetPeriod=14-0​
    #PriorityWeightFairshare=100000​
    #PriorityWeightAge=1000​
    #PriorityWeightPartition=10000​
    #PriorityWeightJobSize=1000​
    #PriorityMaxAge=1-0​
    #​
    # LOGGING​
    SlurmctldDebug=info​
    SlurmctldLogFile=/var/log/slurmctld.log​
    SlurmdDebug=info​
    SlurmdLogFile=/var/log/slurmd.log​
    JobCompType=jobcomp/none​
    #JobCompLoc=​
    #​
    # ACCOUNTING​
    JobAcctGatherType=jobacct_gather/linux​
    #JobAcctGatherFrequency=30​
    #​
    AccountingStorageType=accounting_storage/slurmdbd​
    #AccountingStorageHost=​
    #AccountingStorageLoc=​
    #AccountingStoragePass=​
    #AccountingStorageUser=​
    #​
    # COMPUTE NODES​
    NodeName=c[1-2] Procs=1 State=UNKNOWN​
    PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP​
    ​
  1. 将编辑完成的配置文件发送至计算节点C1和C2。​
  • ​
    scp /etc/slurm/slurm.conf root@c1:/etc/slurm/​
    scp /etc/slurm/slurm.conf root@c2:/etc/slurm/​
    ​
  1. 登录火山引擎控制台配置RDS服务。​
  1. 创建实例,选择5.7版本,注意RDS实例需与HPC实例属于同个地域、可用区和私有网络。​
  • ​​​
  • ​​​
  1. 将管理节点M1的IP加入RDS实例的白名单。如下图所示,选择“数据安全”页签,单击“修改”按钮,添加M1 IP后,单击“确定”按钮。​
  • ​​​
  • ​​​
  1. 创建名称为slurm_acct_db的数据库,用于Slurmctld通过Slurmdbd读取数据库。如下图所示,选择“数据库管理”页签,单击“创建数据库”按钮,输入数据库名称、选择字符集后,单击“确定”按钮。​
  • ​​​
  • ​​​
  1. 配置slurmdbd.conf文件。​
  1. 创建systemd文件。​
  • ​
    cp /usr/lib/systemd/system/slurmctld.service /usr/lib/systemd/system/slurmd.service /usr/lib/systemd/system/slurmdbd.service /etc/systemd/system/​
    cat /etc/systemd/system/slurmctld.service​
    ​
  1. 配置slurmdbd.conf文件。​
  • ​
    cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf​
    chown slurm: /etc/slurm/slurmdbd.conf​
    chmod 600 /etc/slurm/slurmdbd.conf​
    mkdir /var/log/slurm/​
    touch /var/log/slurm/slurmdbd.log​
    chown slurm: /var/log/slurm/slurmdbd.log​
    vi /etc/slurm/slurmdbd.conf​
    ​
  • 在slurmdbd.conf配置文件中输入以下内容。​
  • ​
    #​
    # Example slurmdbd.conf file.​
    #​
    # See the slurmdbd.conf man page for more information.​
    #​
    # Archive info​
    #ArchiveJobs=yes​
    #ArchiveDir="/tmp"​
    #ArchiveSteps=yes​
    #ArchiveScript=​
    #JobPurge=12​
    #StepPurge=1​
    #​
    # Authentication info​
    AuthType=auth/munge​
    #AuthInfo=/var/run/munge/munge.socket.2​
    #​
    # slurmDBD info​
    DbdAddr=localhost​
    DbdHost=localhost​
    DbdPort=6819​
    SlurmUser=slurm​
    #MessageTimeout=300​
    DebugLevel=verbose​
    #DefaultQOS=normal,standby​
    LogFile=/var/log/slurm/slurmdbd.log​
    PidFile=/var/run/slurmdbd.pid​
    #PluginDir=/usr/lib/slurm​
    #PrivateData=accounts,users,usage,jobs​
    #TrackWCKey=yes​
    #​
    # Database info​
    StorageType=accounting_storage/mysql​
    StorageHost=mysql3dd7de4bfd19.rds.ivolces.com #数据库实例内网地址​
    StoragePort=3306 #内网端口​
    StoragePass=AihymTs4X*7z*QGp #数据库实例密码​
    StorageUser=zxd-slurm #账号名称​
    StorageLoc=slurm_acct_db #数据库名称​
    ​
  1. 启动SlurmDBD服务。​
  • ​
    systemctl enable slurmdbd​
    systemctl start slurmdbd​
    systemctl status slurmdbd​
    ​
  1. 开启slurmctl服务。​
  • ​
    systemctl enable slurmctld.service​
    systemctl start slurmctld.service​
    systemctl status slurmctld.service​
    ​
步骤四:配置Slurm计算节点​
  1. 在计算节点C1、C2分别创建/etc/slurm/文件夹。​
  • ​
    mkdir /var/spool/slurmd​
    chown slurm: /var/spool/slurmd​
    chmod 755 /var/spool/slurmd​
    touch /var/log/slurmd.log​
    chown slurm: /var/log/slurmd.log​
    ​
  1. 在计算节点C1、C2分别启动slurm服务。​
  • ​
    mkdir /var/spool/slurm​
    mkdir /var/spool/slurm/d​
    systemctl start slurmd.service​
    systemctl status slurmd.service​
    systemctl enable slurmd.service​
    ​
步骤五:Slurm 测试指令​
  1. 显示所有Compute Nodes。​
  • ​
    scontrol show nodes​
    ​
  • 如果Compute Nodes的State=DOWN,执行如下命令,将状态变成IDLE:​
  • ​
    scontrol update nodename=cas01 state=resume​
    ​
  1. 编辑测试脚本。​
  • ​
    vim "day 1".sh​
    ​
  • 将下列内容粘贴到文件中并保存退出​
  • ​
    #!/bin/bash​
    sleep 30​
    echo "always day 1 $(hostname)"​
    ​
  1. 在计算节点C1和C2执行如下命令。​
  • ​
    cat slurm-X.out​
    ​
  1. 在管理节点M1执行测试脚本。​
  • ​
    sbatch "day 1".sh​
    squeue​
    ​
  1. 管理节点和测试节点回显分别如下,表示集群部署成功。​​回显如下,表示集群部署成功。​
  • ​​​
  • ​​​
附录:Slurm基础操作命令​
您可以登录Slurm官方网站查看基础操作命令。​
​
最近更新时间:2026.10.30 19:14:47
这个页面对您有帮助吗?
有用
有用
无用
无用