更新时间:2024-04-25 GMT+08:00
分享

开始使用

本节将展开Slurm的基础使用说明,有关Slurm详细使用指导请参考Slurm产品文档

该解决方案涉及的所有的业务端口均默认配置了同一子网可访问,如果另有需要,需根据实际情况修改安全组规则。涉及到的Slurm业务端口如下:

  • 6817:Slurm调度节点的业务面端口
  • 6818:Slurm计算节点的业务面端口
  • 该解决方案默认使用的Slurm版本:22.05.3,部署的Java版本:jdk1.8.0_202。
  • 已在Slurm内默认创建了名为cluster的集群名。

安全组修改(可选)

安全组实际是网络流量访问策略,包括网络流量入方向规则和出方向规则,通过这些规则为安全组内具有相同保护需求并且相互信任的云服务器、云容器、云数据库等实例提供安全保护。

如果您的实例关联的安全组策略无法满足使用需求,比如需要添加、修改、删除某个TCP端口,请参考以下内容进行修改。

  • 添加安全组规则:根据业务使用需求需要开放某个TCP端口,请参考添加安全组规则添加入方向规则,打开指定的TCP端口。
  • 修改安全组规则:安全组规则设置不当会造成严重的安全隐患。您可以参考修改安全组规则,来修改安全组中不合理的规则,保证云服务器等实例的网络安全。
  • 删除安全组规则:当安全组规则入方向、出方向源地址/目的地址有变化时,或者不需要开放某个端口时,您可以参考删除安全组规则进行安全组规则删除。

查看节点状态

  1. 在调度节点上查看Slurm软件运行状态,执行systemctl status munge命令和systemctl status slurmctld命令查看Munge服务和Slurmctld服务是否运行正常。

    图1 Munge服务正常运行
    图2 Slurmctld服务正常运行
    如果Munge没有启动,执行:
    systemctl start munge
    如果Slurmctld没有启动,执行:
     systemctl start slurmctld
    #查看集群内节点状态
     sinfo

  2. 每次调度节点服务器重启后,需登录调度节点云服务器,输入用户名root以及密码进入云服务器,输入以上命令启动服务。输入命令“sinfo”查看集群节点信息。

    图3 Slurm配置成功

    如果“NODES”下无节点,可登录到计算节点上开启Slurmd服务。命令如下:

    #开启node1节点slurmd服务
    ssh 192.168.0.2
    systemctl start slurmd
    exit

  3. 在调度节点上查看Slurm服务及Gearbox程序运行状态。

    进入Gearbox程序包所在目录下(默认为/usr/local/),启动Gearbox程序:
    cd /usr/local/
    nohup java -jar gearbox-0.0.1-SNAPSHOT.jar --spring.config.name=gearboxConfig > /dev/null 2>&1 &

  4. 在调度节点上查看Gearbox运行状态,执行ps aux|grep gearbox查看Gearbox服务是否正常运行。

    ps aux|grep gearbox
    图4 Gearbox服务正常运行

  5. 设置Slurm root用户配额,此配额与弹性伸缩的ECS数量相关。

    #修改配额
    sacctmgr modify user root set GrpTRES="node={用户所需的配额数量}"
    #查看配额信息
    sacctmgr list ass

    注:Gearbox启动后会将没有计算任务的节点设为“drain”状态,使用时要重新激活,命令如下:

    scontrol update NodeName={NODELIST下节点名称} State=idle
    图5 节点状态为drain

创建计算节点镜像

  1. 确认调度集群正常后,登录弹性云服务器
  2. 找到计算节点(私有IP为192.168.0.2),依次单击右侧“更多>镜像>创建镜像”。

    图6 创建镜像

  3. 镜像类型选择系统盘镜像,配置信息中名称可自行命名,本示例中名称为hpc-image。

    图7 选择系统盘镜像

    图8 配置信息填写

  4. 单击“立即创建”后跳转到镜像服务控制台,可查看镜像创建进度。

    图9 镜像创建中

    图10 镜像创建完成

配置弹性伸缩

  1. 打开华为云镜像服务控制台,确认镜像创建成功。
  2. 登录华为云弹性伸缩AS控制台,选择该方案创建的弹性伸缩配置,单击右侧“复制”。在弹窗中,选择“私有镜像”,选择创建计算节点镜像中创建的镜像,注意修改名称(名称不能带有下划线“_”,否则无法自动删除实例),单击“确定”创建新的弹性伸缩配置。

    图11 创建新的弹性伸缩配置

  3. 选择“密钥对”登录方式,本示例中密钥对名称为HPC-TEST(密钥对名称以3.1准备工作中创建的密钥对名称为准),并勾选相应选项。

    图12 设置登录方式

  4. 打开弹性伸缩组列表,选择该方案创建的弹性伸缩组,单击右侧“更多>更换弹性伸缩配置”,在弹窗中选择上一步骤创建的弹性伸缩配置,单击“确定”。

    图13 更换弹性伸缩配置

  5. 登录华为云弹性伸缩AS控制台,查看该方案创建的弹性伸缩组,单击“查看伸缩策略”。

    图14 弹性伸缩实例

  6. 单击“添加伸缩策略”,选择“告警策略”。根据业务需求配置相应的区间范围(1条伸缩策略最大支持添加10个策略区间),配置完成后单击“确定”。

    图15 添加伸缩策略

  7. 当策略区间增加的服务器数量不满足业务需要时,可以添加多个伸缩策略,单击“添加伸缩策略”。

    图16 添加策略

  8. 安装业务软件,安装业务需要的软件到共享文件目录/data下面。

    Slurm作业管理系统:

    • Slurmd、Slurmdbd、Slurmctld日志文件目录:/var/log
    • Slurmdbd服务的配置文件:/etc/slurm/slurmdbd.conf
    • Slurmctld、Slurmd服务的配置文件:/etc/slurm/slurm.conf

      详细使用参考Slurm产品文档,常用命令如下:

      表1 常用命令

      命令

      功能介绍

      常用命令举例

      sinfo

      显示系统资源使用情况

      sinfo

      squeue

      显示作业状态

      squeue

      srun

      用于交互式作业提交

      srun -N 2 -n 48 -p debug A.exe

      sbatch

      用于批处理作业提交

      sbacth -n -2 -n 48 job.sh

      salloc

      用于分配模式作业提交

      salloc -p debug

      scancel

      用于取消已提交的作业

      scancel JOBID

      scontrol

      用于查询节点信息或正在运行的作业信息

      scontrol show job JOBID

      sacct

      用于查看历史作业信息

      sacct -u pp100 -S 03/01/17 -E 03/31/17 --field=joid,partitionjobname,user,nnodes,start,end,elapsed,state

Gearbox程序工作流程介绍

本文档以批任务为示例,演示Gearbox程序如何自动进行Slurm集群弹性扩缩容。

  1. Gearbox程序启动后,设置Slurm root用户配额。

    #修改配额
    sacctmgr modify user root set GrpTRES="node={用户所需的配额数量}"
    #查看配额信息
    sacctmgr list ass
    图17 查看用户配额信息

  2. 提交批处理任务(仅供参考)。

    图18 sbatch提交slurm任务

  3. 查看云监控告警状态。当作业状态为“queued”时,代表作业job在排队中,当前集群计算节点资源不足。此时查看自定义监控中workload值>=1,将通知弹性伸缩实例进行自动扩容。

    图19 workload值变化状态

  4. 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩正在创建实例。

    图20 触发弹性扩容

  5. 弹性扩容出来的ECS实例,使用的镜像为计算节点服务器镜像。登录方式为3.3步骤1创建的密钥对。登录该ECS实例,并运行Slurmd程序即可被纳管进入Slurm集群,参与作业。

    图21 弹性扩容的ECS实例
    被纳入Slurm集群的可用ECS计算节点实例,Slurm调度节点将会下发作业任务给这些实例。
    图22 扩容出的实例执行作业任务

  6. Gearbox将周期检查Slurm集群中计算节点状态。检查到有空闲的计算节点,将状态设置为“drain”;检查集群中状态为“drain”的计算节点,判断是否还有任务正在该计算节点运行,如果没有,将该实例删除(成功后,计算节点状态将变为“down”);检查集群中状态为“down”或“drain”的计算节点,将该计算节点从Slurm集群移除。

    (参数说明:drain(节点故障),alloc(节点在用),idle(节点可用),down(节点下线),mix(节点部分占用,但仍有剩余资源)
    图23 将空闲实例状态修改为drain

  7. 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩已删除实例。

    图24 空闲实例被移出

gearbox配置文件示例

下面内容为Gearbox配置文件示例,请存放在Gearbox安装目录下。配置gearboxconfig.yaml文件时,请删除示例中的所有注释(即“#”所在行)。

user:
  # console账号的AK
  ak:
  # console账号的SK
  sk:
  # 用户所在region的项目ID
  project-id: 
  # 代理地址,端口,用户名密码等,无需代理可不配置
  proxy-address:
  proxy-port:
  proxy-user-name:
  proxy-password:
as:
  # AS服务在待使用局点的终端节点域名
  endpoint: as.cn-east-3.myhuaweicloud.com
  # 预置伸缩组资源的伸缩组ID
  group: 
  # 查询伸缩实例时单页最大返回数量,默认100可不修改
  list-instance-limit: 100
  # 删除伸缩实例时最大数量限制,AS服务最大支持50,可不修改
  delete-instance-limit: 50
ecs:
  # ECS服务在待使用局点的终端节点域名
  endpoint: ecs.cn-east-3.myhuaweicloud.com
metric:
  # 自定义监控指标命名空间,可不修改
  namespace: test.HPC
  # 自定义指标的指标名
  name: workload
  # 自定义指标维度名,可不修改
  dimension-name: autoscaling_group
  # 自定义指标维度ID,可配置成伸缩组的ID,该值不影响功能
  dimension-id: 
  # 指标上报的TTL参数,可不修改
  report-ttl: 172800
  # CES服务在待使用局点的终端节点域名
  metric-report-endpoint: ces.cn-east-3.myhuaweicloud.com
task:
  # 节点状态检查周期,单位 秒
  health-audit-period: 30
  # 自定义指标上报周期,单位 秒
  metric-report-period: 60
  # 检测是否需要缩容的周期,单位 秒
  scale-in-period: 5
  # 自动删除待缩容节点周期,单位 秒
  delete-instance-period: 5
  # 新扩容节点自发现周期,单位 秒
  discover-instance-period: 20
  # 对比伸缩组与slurm节点数量周期,单位 秒
  diff-instance-and-node-period: 60
  # 内部缓存刷新周期,单位 秒
  refresh-cache-period: 100
system:
  # deadline/slurm
  type: slurm
  # 稳定节点的Node名称,多节点英文逗号分割
  stable-nodes: master
  # 稳定节点所在的分区
  stable-partition: p1
  #不稳定节点所在的分区
  variable-partition: p1
  # 空闲时间阈值,空闲时间超过该值的节点将被缩容,单位 秒
  scale-in-time: 1
  # 判断job是否属于排队状态的时间限制条件,排队时间超过该值的job被认为是在排队并参与指标计算,建议为0
  job-wait-time: 1
  # 新节点注册的超时时间,超过该时间依然未注册成功将被AS删除,单位:分钟,建议为10
  register-timeout-minutes: 10
  # 弹性节点使用的cpu核数
  cpu: 4
  # 弹性节点使用的内存大小,该字段为预留字段,可设置为任意大于0的数值
  memory: 12600
  # 仅slurm集群配置有效,默认是true,在计算Workload时忽略含有GPU需求作业中的CPU需求量
  ignore-cpu-request-of-gpu-job: true
  # 是否使用powershell执行指令,只有windows环境下生效
  use-powershell-executor: true

相关文档