1. Slurm简介 — Slurm资源管理与作业调度系统安装配置 2021-12 文档
主要配置文件
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
Slurm管理命令
- 查看计节点信息
- 可以通过此命令查看每个节点已经分配显卡资源数量
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
- 使用
scontrol
或sacctmgr
动态配置限制用户资源 - 您还可以动态管理用户或账户的资源限制,而不需要修改
slurm.conf
。例如,您可以使用sacctmgr
来为特定用户设置资源限制:
# 限制用户 liu 同时最多只能使用 2 张 GPU
sacctmgr modify user name=liu set maxgres=gpu:2
Slurm基本命令
-
sinfo:查看节点与分区状态。
-
查看所有分区和节点的摘要信息:
sinfo
-
查看特定分区的信息:
sinfo --partition=cpu
-
只显示空闲节点:
sinfo --states=idle
-
显示节点级信息:
sinfo -N
-
-
squeue:查看队列状态,包括作业队列和运行中的作业。
-
查看所有队列中的作业:
squeue
-
查看特定用户的所有作业:
squeue -u username
-
查看特定作业的详细信息:
scontrol show job jobid
-
-
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 |
指定作业的最大运行时间,格式为 minutes ,hours: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
-
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的版本和集群的配置有所不同。
-
salloc:分配资源并启动一个交互式会话。
-
分配资源并启动一个shell:
salloc -N 1 -n 4 -t 01:00:00
-
其中
-N
指定节点数,-n
指定核心数,-t
指定时间限制。
-
-
scancel:取消作业。
-
取消一个作业:
scancel jobid
-
取消特定用户的所有作业:
scancel -u username
-
-
scontrol:系统控制,用于查看和修改Slurm的状态。
-
查看作业信息:
scontrol show job jobid
-
更新作业属性:
scontrol update jobid=jobid priority=4990
-
通用法:
scontrol show <job/node/partition/config> job_id/node_name
-
-
sacct:查看历史作业信息。
-
查看所有完成作业的详细信息:
sacct -l
-
查看特定作业的详细信息:
sacct -j jobid --format=JobID,JobName,CPUTime,ExitCode
sacct -o jobname,alloccpus,reqmem,averss,elapsed -j <JOBID>
-
Slurm监控与与报告
Slurm提供了多种工具和命令来监控和生成作业及系统状态的报告。
-
squeue 命令:
squeue
命令用于查看队列中的作业信息,包括作业ID、分区、作业名称、用户、状态、运行时间和节点列表等。可以通过添加参数如-j
来查看特定作业的详细信息,或者使用-l
来显示更多细节信息 。 -
sinfo 命令:
sinfo
命令用于查看集群的状态,包括节点和分区的状态。它可以显示节点的可用性、分配情况以及分区配置 。 -
scontrol 命令:
scontrol
是一个管理工具,可以用于查看和修改Slurm系统中的作业、节点和队列的状态。例如,使用scontrol show job
可以查看作业的详细信息 。 -
sacct 命令:
sacct
用于显示作业的计费信息,包括作业的运行时间、资源使用情况等。可以通过-o
或--format
选项自定义输出格式,显示特定的字段信息 。 -
sreport 命令:虽然在搜索结果中没有直接提到
sreport
命令,但根据 Slurm 的官方文档,sreport
可以生成关于作业、用户和账户的资源使用情况的详细报告。 -
sview 命令:
sview
提供了一个图形界面,用于显示和更新作业、分区和节点的状态信息 。 -
sbcast 命令:
sbcast
用于将文件从本地磁盘传输到作业分配的节点上的本地磁盘,这可以用于确保作业所需的文件在计算节点上可用 。 -
sattach 命令:
sattach
允许用户将标准输入、输出和错误以及信号功能附加到当前运行的作业或作业步骤,这可以用于监控作业的实时输出 。
使用这些命令,用户可以有效地监控作业执行情况、资源使用情况以及集群的健康状态,同时生成所需的报告。