目录
一 . sinfo 查看集群
作为查看集群状态的基本命令: Usage: sinfo [OPTIONS]
[root@master ~]# sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST CPU40* up infinite 2 idle server[1-2] GPU24 up infinite 1 idle server3 test up infinite 1 idle ansible
- PARTITION:分区,提交作业时提交-p参数,来选择分区所对应的计算节点,带*为默认节点,即不指定分区默认提交到CPU40,使用server1-2计算
- TIMELIMIT:时间限制,infinite代表分区作业无时间限制。
- STATE:drain: 排空状态,表示该类结点不再分配到其他; idle: 空闲状态; alloc: 完全被分配状态; mix:部分被占用,但是仍有可用资源
二. sacct 查询历史作业
作为集群查看历史作业命令: sacct [<OPTION>]
查看从2023-3-3到2023-3-8且用户为root的作业信息[root@master ~]# sacct -S 2023-03-03 -E 2023-03-08 -u root JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 6560 hostname CPU40 root 1 FAILED 1:0 6579 hostname CPU40 root 2 CANCELLED 0:0 6589 ansibel CPU40 root 3 CANCELLED+ 0:0 6610 hostname CPU40 root 2 FAILED 1:0 6628 hostname CPU40 root 2 FAILED 1:0 6629 hostname CPU48 root 2 COMPLETED 0:0 6629.0 hostname root 2 COMPLETED 0:0 ## -S 在什么之后 -E 在日期之之前 ,通常搭配使用 ## -u 用户
- JobID: 作业id号
- Partition: 作业运行的分区
- Account: 账户组 :root组
- AllocCPUS:使用的CPU核心数
- State:COMPLETED :作业已完成; RUNNING: 作业运行中; FAILED:作业失败;
三 . squeue 查询作业状态
查询排队和运行状态的作业 Usage: squeue [OPTIONS]
[root@master ~]# squeue -j 7570 JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 7570 CPU40 POL-2023 gu R 14:56 1 server2 ##-j指定 作业id [root@master ~]# squeue -p CPU40 JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 7570 CPU40 POL-2023 gu R 14:56 1 server2 ##-P 指定分区 [root@master ~]# squeue -u gu | head JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 7570 CPU40 POL-2023 gu R 14:56 1 server2 ##-u 指定用户
- ST: R为运行中; PD为排队中 S:挂起 ;CG: 正在退出
- NODELIST(REASON):任务占据节点列显示节点名,如不是则如下情况
BeginTime: 未到用户所指定的任务开始时间
Dependency: 该作业所依赖的作业尚未完成
InvalidAccount: 用户的 SLURM 账号无效
InvalidQOS : 用户指定的 QoS 无效
ParitionTimeLimit: 用户申请的时间超过该分区时间上限
QOSMaxCpuPerUserLimit: 超过当前 QoS 用户最大 CPU 限制
QOSMaxGRESPerUser : 超过当前 QoS 用户最大 GRES(GPU) 限制
Priority: 存在一个或多个更高优先级的任务,该任务需要等待
ReqNodeNotAvail: 所申请的部分节点不可用
Resources : 暂无闲置资源,该任务需等待其他任务完成
四 . scontrol 查看作业节点命令
显示或设定slurm作业、队列、结点等状态 scontrol [<OPTION>] [<COMMAND>]
[root@master ~]# scontrol show nodes server1 | grep CPUAlloc CPUAlloc=48 CPUEfctv=48 CPUTot=48 CPULoad=40.24 ##查看节点为server1的详细信息
- CPUAlloc:剩余未分配cpu核心数
- AllocMem: 剩余未分配内存
[root@master ~]# scontrol show job 7679 | grep TRES TRES=cpu=1,mem=200M,node=1,billing=1 ##显示作业使用资源数
五 .提交作业
一切的作业的运行前提是在共享路径下才能执行
1. srun
交互式作业提交(采用srun命令提交)
一般用于短时间小作业测试
[root@master ~]# srun -n 2 -p test ceshi.sh ##发个测试任务给test分区 申请2个节点
只用于简单的测试文件
2.sbatch
批处理模式:编写提交作业脚本
常用任务提交模式可与srun结合
[root@master ~]# cat test.sh #!/bin/bash #SBATCH -J test # 指定作业名 #SBATCH -o test.out # 屏幕上的输出文件重定向到 test.out #SBATCH -p test # 作业提交的分区为 test #SBATCH -N 1 # 作业申请 1 个节点 #SBATCH --cpus-per-task=4 # 单任务使用的 CPU 核心数为 4 #SBATCH -t 1:00:00 #任务运行的最长时间为 1 小时 #SBATCH --gres=gpu:A10:1 # 单个节点使用 1 块 GPU 卡 #SBATCH -t 00:00:10 # 作业最多运行10s #SBATCH --priority 10 ##指定作业优先级为10 谨慎使用 尽可能保持默认值 紧急任务可使用 #SBATCH --qos nor_fast #指定qos # 运行程序 并行任务 source activate env-name ##运行特定anconda环境 python 1.py srun -n 4 2.sh [root@famaster slurm]# sbatch test.sh [root@famaster slurm]# sbatch -d singleton test—a.sh ##作业名称相同的,且只有当test完成后才会运行test-a.sh [root@famaster slurm]# squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 99 debug ceshi root PD 0:00 1 (Dependency) 98 debug ceshi root R 0:22 1 famaster
3.salloc
分配作业模式类似于交互式作业模式和批处理作业模式的融合。用户需指定所需要的资源条件,向资源管理器提出作业的资源分配请求。提交后,作业处于排队,当用户请求资源被满足时,将在用户提交作业的节点上执行用户所指定的命令,指定的命令执行结束后,运行结束,用户申请的资源被释放。在作业结束前,如果提交时的命令行终端断开,则任务终止。典型用途是分配资源并启动一个shell,然后在这个shell中利用srun运行并行作业
(1)salloc后面如果没有跟定相应的脚本或可执行文件,则默认选择/bin/sh,用户获得了一个合适环境变量的shell环境。
(2)salloc和sbatch最主要的区别是salloc命令资源请求被满足时,直接在提交作业的节点执行相应任务,而sbatch则当资源请求被满足时,在分配的第一个节点上执行相应任务。
(3)salloc在分配资源后,再执行相应的任务,很适合需要指定运行节点和其它资源限制,并有特定命令的作业。
sbtach -N 2 -J test vasp.sh
六: 总结
常见报错点
1. 查看作业状态 为ReqNodeNotAvail
- 大概率是指定了主机,但是该主机不在默认分区内
2. 作业提交报错 no such file
- 指定到其他计算节点运行,但是该节点没有该文件,一般是未放在共享路径下
3. 在 Slurm 作业脚本中加载 Conda 环境时,可能会遇到一些问题。如果您在提交作业时无法成功加载 Conda 环境,但在交互式会话中可以成功加载,可能是因为您的作业脚本没有正确设置环境变量。
#!/bin/bash #SBATCH --nodes=1 #SBATCH --nodelist=node1 # 设置 Conda 安装路径 CONDA_PATH=/path/to/conda # 初始化 Conda 环境 source $CONDA_PATH/etc/profile.d/conda.sh # 激活 my_env 环境 conda activate my_env # 在此处添加您的作业命令 echo "Hello from my_env!"
4. 本地能够运行的脚本,但是投入集群就无法运行
一般是由于用户提交作业的主机下的改用户 编译器版本过低,如python默认是2.75,但是他必须要3.6以上才可以运行,一般升级版本即可
Slurm文档首页 - Slurm中英文对照文档https://docs.slurm.cn/
Slurm Workload Manager - Overview (schedmd.com)https://slurm.schedmd.com/overview.html 需更详细的资料可参照官方文档或其他个人文档,