火山引擎GPU云服务器使用指南-HPC搭建Slurm计算集群

axin 2025-04-23 79人围观 ,发现0个评论 显卡服务器租用GPU服务器租用远程电脑租用独立显卡服务器GPU云服务器租用火山引擎GPU云服务器GPU云服务器教程

👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>

本文介绍如何在高性能计算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
  2. 删除已安装的slurm。如果您之前未安装slurm,请跳过本步骤。

    • 删除数据库。

      yum remove mariadb-server mariadb-devel -y
    • 移除Slurm和Munge。

      yum remove slurm munge munge-libs munge-devel -y
    • 删除用户和相应的文件夹。

      userdel -r slurm
      suerdel -r munge
  3. 关闭防火墙。

    systemctl stop firewalld
    systemctl disable firewalld
    systemctl stop iptables
    systemctl disable iptables
  4. 修改资源限制。

    1. 执行以下命令打开文件。

      vim /etc/security/limits.conf
    2. 在End of file下方添加如下内容,如下图所示。

      - nofile 655360
      - nproc 655350

  5. 配置时区,同步集群时钟。

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  6. 安装配置NTP服务器。

    1. 安装NTP服务器。

      yum install ntp -y
      systemctl enable ntpd.service
      ntpdate pool.ntp.org
      systemctl start ntpd
    2. 同步NTP服务器。

      yum install ntp -y
      systemctl start ntpd
      systemctl enable ntpd
    3. 安装EPEL源。

      yum install http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm
  7. 在控制节点M1安装配置NFS。

    1. 执行以下命令创建并打开文件。

      vim /etc/exports
    2. 添加如下内容。

      /software/ *(rw,async,insecure,no_root_squash)
    3. 安装NFS。

      yum -y install nfs-utils rpcbind
    4. 创建 exports 文件。

    5. 启动NFS。

      systemctl start nfs
      systemctl start rpcbind
      systemctl enable nfs
      systemctl enable rpcbind
    6. 查看NFS状态。

      systemctl status nfsjava

      回显如下,表示安装成功。

  8. 编辑本地静态解析。

    1. 执行以下命令打开本地hosts文件。

      vi /etc/hosts
    2. 将下列内容写入到文件中,IP地址与主机名请根据实际情况替换。

      192.168.0.253  m1
      192.168.0.65   c1
      192.168.0.191  c2
  9. 免密认证。

    1. 生成密钥。

      ssh-keygen

      根据提示连续按enter键后,回显如下:

    2. 复制密钥到C1、C2计算节点。

      ssh-copy-id -i .ssh/id_rsa.pub c1
      ssh-copy-id -i .ssh/id_rsa.pub c2

      过程中请输入计算节点登录密码。

    3. 重新登录计算节点,确认无需输入密码,表示免密认证成功。

      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
  2. 安装Munge。

    1. 安装装epel库。

      yum install epel-release
    2. 安装munge。

      yum install munge munge-libs munge-devel -y
    3. 安装rng工具。

      yum install rng-tools -y 
      rngd -r /dev/urandom
      rngd -r /dev/urandomscp /etc/munge/munge.key root@c1:/etc/munge
      rngd -r /dev/urandomscp /etc/munge/munge.key root@c2:/etc/munge
    4. 在控制节点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
    5. 将生成的密钥发送到计算节点C1和C2。

      scp /etc/munge/munge.key root@c1:/etc/munge
      scp /etc/munge/munge.key root@c2:/etc/munge

      输入yes后,输入计算节点密码可以看到密钥发送成功,如下图所示。

    6. 在管理节点M1和计算节点C1、C2中修改权限。

      chown -R munge: /etc/munge/ /var/log/munge/ 
      chmod 0700 /etc/munge/ /var/log/munge/
      systemctl enable munge 
      systemctl restart munge
  3. 检查munge状态。

    systemctl restart munge
    systemctl status munge
  4. 在管理节点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
  2. 安装依赖项。

    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
  3. 下载安装slurm。

    1. 安装slurm。

      wget https://download.schedmd.com/slurm/slurm-20.02.7.tar.bz2
    2. 安装rpmbuild编译Slurm,并制作rpm包。

      yum install rpm-build
      rpmbuild -ta slurm-20.02.7.tar.bz2
    3. 进入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
  2. 编辑管理节点配置文件。

    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
  3. 将编辑完成的配置文件发送至计算节点C1和C2。

    scp /etc/slurm/slurm.conf root@c1:/etc/slurm/
    scp /etc/slurm/slurm.conf root@c2:/etc/slurm/
  4. 登录火山引擎控制台配置RDS服务。

    1. 创建实例,选择5.7版本,注意RDS实例需与HPC实例属于同个地域、可用区和私有网络。

    2. 将管理节点M1的IP加入RDS实例的白名单。如下图所示,选择“数据安全”页签,单击“修改”按钮,添加M1 IP后,单击“确定”按钮。

    3. 创建名称为slurm_acct_db的数据库,用于Slurmctld通过Slurmdbd读取数据库。如下图所示,选择“数据库管理”页签,单击“创建数据库”按钮,输入数据库名称、选择字符集后,单击“确定”按钮。

  5. 配置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
    2. 配置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 #数据库名称
  6. 启动SlurmDBD服务。

    systemctl enable slurmdbd
    systemctl start slurmdbd
    systemctl status slurmdbd
  7. 开启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
  2. 在计算节点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
  2. 编辑测试脚本。

    vim "day 1".sh

    将下列内容粘贴到文件中并保存退出

    #!/bin/bash
    sleep 30
    echo "always day 1 $(hostname)"
  3. 在计算节点C1和C2执行如下命令。

    cat slurm-X.out
  4. 在管理节点M1执行测试脚本。

    sbatch "day 1".sh
    squeue
  5. 管理节点和测试节点回显分别如下,表示集群部署成功。

    回显如下,表示集群部署成功。


不容错过
Powered By TOPYUN 云产品资讯