Slurm集群使用与管理 | L.的数字花园
约 2535 字
预计阅读 6 分钟
Slurm集群使用与管理

1. Slurm简介 — Slurm资源管理与作业调度系统安装配置 2021-12 文档

docs.slurm.cn

  • slurm.conf 主配置文件,节点信息、分区信息等
  • gres.conf 配置每个节点的实际gpu资源:
NodeName=aias-compute-1 Name=gpu Type=rtx File=/dev/nvidia[0-7]
NodeName=aias-compute-2 Name=gpu Type=rtx File=/dev/nvidia[0-6]
NodeName=aias-compute-3 Name=gpu Type=a800 File=/dev/nvidia[0-1]
NodeName=aias-compute-4 Name=gpu Type=rtx File=/dev/nvidia[0-7]
  • 先安装对应显卡驱动,查看显卡信息
  • 查看每张GPU的使用率、显存占用、功耗、温度等信息。每隔一秒刷新数据
watch -n 1 nvidia-smi
  • 可以直接在节点上运行 lspci 命令来列出所有连接的设备,包括显卡:
lspci | grep -i nvidia
  • 查看计节点信息
  • 可以通过此命令查看每个节点已经分配显卡资源数量
 scontrol show node aias-compute-4
  • 查看分区格式化信息
 sinfo -o "%20P %.5D %15F %20a %20G"
  • 统计一段时间任务执行、资源分配情况
  sacct -a --format=JobID,User,Elapsed,NodeList,AllocTREs,submit,Start,End --starttime=2024-10-19 --endtime=2024-10-20
  • 查看用户信息:所属QOS、默认QOS、最大作业数量、最大资源数量等
sacctmgr show user withassoc format=User,Account,Partition,QOS,defaultqos,maxjobs,maxtres,cluster,adminlevel
  • 查看QOS信息
 sacctmgr show qos name=a800 -P
  • 添加QOS
sacctmgr add qos test Priority=0 MaxTRESPU=cpu=8,gres/gpu=1,mem=32G MaxJobsPU=4
  • 设置用户QOS
   sacctmgr modify user name=liu set qos=gpu_limit defaultqos=defaultqos
  • 查看分区配置信息
 scontrol show partition
  • 查看配置文件位置
 scontrol show config | grep slurm.conf
  • 使用 scontrolsacctmgr 动态配置限制用户资源
  • 您还可以动态管理用户或账户的资源限制,而不需要修改 slurm.conf。例如,您可以使用 sacctmgr 来为特定用户设置资源限制:
# 限制用户 liu 同时最多只能使用 2 张 GPU
sacctmgr modify user name=liu set maxgres=gpu:2
  1. sinfo:查看节点与分区状态。

    • 查看所有分区和节点的摘要信息:

      sinfo
      
    • 查看特定分区的信息:

      sinfo --partition=cpu
      
    • 只显示空闲节点:

      sinfo --states=idle
      
    • 显示节点级信息:

      sinfo -N
      
  2. squeue:查看队列状态,包括作业队列和运行中的作业。

    • 查看所有队列中的作业:

      squeue
      
    • 查看特定用户的所有作业:

      squeue -u username
      
    • 查看特定作业的详细信息:

      scontrol show job jobid
      
  3. sbatch:提交批处理作业。

    • 提交一个作业脚本:

      sbatch job_script.sh
      

      job_script.sh

      #!/bin/bash
      #
      #SBATCH --job-name=GPU_job
      #SBATCH --output=output_%j.txt
      #SBATCH --error=errors_%j.txt
      #SBATCH --ntasks=1
      #SBATCH --cpus-per-task=1
      #SBATCH --mem=8G
      #SBATCH --time=03:00:00
      # 申请 1 个 GPU; 例如使用--gres=gpu:2 来申请两个或者更多 GPU
      #SBATCH --gres=gpu:1
      #SBATCH --qos=a800
      srun python train_gpu_11.py
      
    • 其中job_script.sh是一个包含资源请求和要执行的命令的脚本文件。

    • 以下是 sbatch 命令的常见参数及其说明,整理成表格形式:

参数 说明
--job-name 指定作业的名称。
--partition-p 指定作业运行的分区。
--time-t 指定作业的最大运行时间,格式为 minuteshours:minutes,或 days-hours:minutes
--nodes-N 指定作业需要的节点数。
--ntasks-per-node-n 指定每个节点上运行的任务数。
--cpus-per-task-c 指定每个任务需要的CPU核心数。
--mem--mem-per-cpu 指定每个CPU核心所需的内存量。
--gres 指定作业需要的通用资源,如 gres=gpu:2 表示需要2个GPU。
--exclusive 请求独占节点,不允许其他作业在同一节点上运行。
--output-o 指定作业的标准输出文件。
--error-e 指定作业的标准错误输出文件。
--array 指定作业数组,用于提交一系列相似的作业。
--mail-type 指定在作业开始、结束或失败时发送邮件的类型。
--mail-user 指定接收邮件的用户邮箱。
--dependency 指定作业依赖,只有当依赖的作业完成后,当前作业才会开始。
--account 指定作业所属的账户,用于计费。
--qos 指定作业的服务质量。
--wrap-s 允许用户将整个作业脚本作为命令行参数传递给 sbatch
例如,以下命令提交了一个作业,要求在 `gpu` 分区上运行,需要1个节点,每个节点需要2个GPU,运行时间不超过1小时,并将输出写入 `output.log` 文件:
    sbatch --job-name=my_job --partition=gpu --nodes=1 --gres=gpu:2 --time=01:00:00 --output=output.log my_script.sh
  1. srun:提交作业或启动交互式会话。

    • 以下是 srun 命令的常见参数及其说明和使用示例,整理成表格形式:
参数 说明 示例
-n, --ntasks=number 指定要运行的任务数。 srun -n 4 hostname
-c, --cpus-per-task=ncpus 指定每个任务需要的CPU核心数。 srun -c 2 python script.py
-N, --nodes=minnodes[-maxnodes] 请求至少分配 minnodes 个节点,最多不超过 maxnodes 个节点。 srun -N 2-4 hostname
-p, --partition=partition_name 在指定的分区中分配资源。 srun -p compute hostname
-t, --time=minutes 指定作业的最大运行时间。 srun -t 30 hostname
--gres 指定作业需要的通用资源,如 gres=gpu:2 表示需要2个GPU。 srun --gres=gpu:2 hostname
--exclusive 请求独占节点,不允许其他作业在同一节点上运行。 srun --exclusive hostname
--output, -o 指定作业的标准输出文件。 srun -o output.txt hostname
--error, -e 指定作业的标准错误输出文件。 srun -e error.txt hostname
--array 指定作业数组,用于提交一系列相似的作业。 srun --array=1-5 hostname
--mail-type 指定在作业开始、结束或失败时发送邮件的类型。 srun --mail-type=ALL hostname
--mail-user 指定接收邮件的用户邮箱。 srun --mail-user=user@example.com hostname
--dependency 指定作业依赖,只有当依赖的作业完成后,当前作业才会开始。 srun --dependency=afterok:123 hostname
--account 指定作业所属的账户,用于计费。 srun --account=myaccount hostname
--qos 指定作业的服务质量。 srun --qos=batch hostname
--mem 指定每个节点所需的内存量。 srun --mem=4G hostname
--cpus-per-task 指定每个任务所需的CPU核心数。 srun --cpus-per-task=4 hostname
这些参数可以帮助您根据需要定制 `srun` 命令,以便在Slurm集群上有效地运行作业。请注意,具体的参数和选项可能会根据Slurm的版本和集群的配置有所不同。
  1. salloc:分配资源并启动一个交互式会话。

    • 分配资源并启动一个shell:

      salloc -N 1 -n 4 -t 01:00:00
      
    • 其中-N指定节点数,-n指定核心数,-t指定时间限制。

  2. scancel:取消作业。

    • 取消一个作业:

      scancel jobid
      
    • 取消特定用户的所有作业:

      scancel -u username
      
  3. scontrol:系统控制,用于查看和修改Slurm的状态。

    • 查看作业信息:

      scontrol show job jobid
      
    • 更新作业属性:

      scontrol update jobid=jobid priority=4990
      
    • 通用法:

      scontrol show <job/node/partition/config> job_id/node_name
      
  4. sacct:查看历史作业信息。

    • 查看所有完成作业的详细信息:

      sacct -l
      
    • 查看特定作业的详细信息:

      sacct -j jobid --format=JobID,JobName,CPUTime,ExitCode
      
      sacct -o jobname,alloccpus,reqmem,averss,elapsed -j <JOBID>
      

Slurm提供了多种工具和命令来监控和生成作业及系统状态的报告。

  1. squeue 命令squeue 命令用于查看队列中的作业信息,包括作业ID、分区、作业名称、用户、状态、运行时间和节点列表等。可以通过添加参数如 -j 来查看特定作业的详细信息,或者使用 -l 来显示更多细节信息 。

  2. sinfo 命令sinfo 命令用于查看集群的状态,包括节点和分区的状态。它可以显示节点的可用性、分配情况以及分区配置 。

  3. scontrol 命令scontrol 是一个管理工具,可以用于查看和修改Slurm系统中的作业、节点和队列的状态。例如,使用 scontrol show job 可以查看作业的详细信息 。

  4. sacct 命令sacct 用于显示作业的计费信息,包括作业的运行时间、资源使用情况等。可以通过 -o--format 选项自定义输出格式,显示特定的字段信息 。

  5. sreport 命令:虽然在搜索结果中没有直接提到 sreport 命令,但根据 Slurm 的官方文档,sreport 可以生成关于作业、用户和账户的资源使用情况的详细报告。

  6. sview 命令sview 提供了一个图形界面,用于显示和更新作业、分区和节点的状态信息 。

  7. sbcast 命令sbcast 用于将文件从本地磁盘传输到作业分配的节点上的本地磁盘,这可以用于确保作业所需的文件在计算节点上可用 。

  8. sattach 命令sattach 允许用户将标准输入、输出和错误以及信号功能附加到当前运行的作业或作业步骤,这可以用于监控作业的实时输出 。

使用这些命令,用户可以有效地监控作业执行情况、资源使用情况以及集群的健康状态,同时生成所需的报告。