HPC
系统资源简介
计算资源(节点配置)
- 系统配置为:
- 8台计算节点: 英特尔至强金牌6248(2.5GHz/20-Core/27.5MB/150W)处理器,总核数为80核,内存大小为256GB。
- 1台GPU节点: 英特尔至强金牌6248(2.5GHz/20-Core/27.5MB/150W)处理器,总核数为40核,内存大小为512GB。 GPU型号GeForce RTX2080Ti*8,功耗为250W,显存大小为11019MB。
- 1台胖节点: CPU型号 英特尔至强金牌6248(2.5GHz/20-Core/27.5MB/150W)处理器,核数为80核,内存大小为2TB。
- 集群使用Slurm作业调度系统,共有三个队列:cn,fat,gpu,通过sinfo可以查看。
温馨提示:通过sinfo可以查看到所有队列的当前使用情况。
存储资源(文件系统)
- 文件系统有华为O9000存储系统挂载提供。
- 共享目录为/public
- 用户家目录:/public/home
- 软件安装目录:/public/apps
- 软件包资源目录:/pubic/source
Slurm作业管理系统
系统使用Slurm作业管理系统,采用共享模式,为避免系统资源浪费,使用时请尽量保证满核提交(即为单节点和数的整数倍)。
作业管理系统常用命令如下:
命令 | 功能介绍 | 常用命令例子 |
---|---|---|
sinfo | 显示系统资源使用情况 | sinfo |
squeue | 显示作业状态 | squeue |
srun | 用于交互式作业提交 | srun -N 2 -n 40 -p com A.exe |
sbatch | 用于批处理作业提交 | sbatch -N 2 -n 40 job.sh |
salloc | 用于分配模式作业提交 | salloc -p com |
scancel | 用于取消已提交的作业 | scancel JOBID |
scontrol | 用于查询节点信息或正在运行的作业信息 | scontrol show job JOBID |
sacct | 用于查看历史作业信息 | sacct -u deng -S 03/01/17 -E 03/31/17 --field=jobid,partition,jobname,user,nnodes,start,end,elapsed,state |
sinfo查看系统资源
- sinfo得到的结果是当前账号可使用的队列资源信息,如下图所示:
- 第一列PARTITION是队列名。
- 第二列AVAIL是队列可用情况,如果显示up则是可用状态;如果是inact则是不可用状态。
- 第三列TIMELIMIT是作业运行时间限制,默认是infinite没有限制。
- 第四列NODES是节点数。
- 第五列STATE是节点状态,idle是空闲节点,alloc是已被占用节点,comp是正在释放资源的节点,其他状态的节点都不可用。
- 第六列NODELIST是节点列表。
-
sinfo的常用命令选项:
命令示例 功能 sinfo -n cn01 指定显示节点comput1的使用情况 sinfo -p cn 指定显示队列com情况
squeue查看作业状态
-
squeue得到的结果是当前账号的作业运行状态,如果squeue没有作业信息,说明作业已退出。
- 第一列JOBID是作业号,作业号是唯一的。
- 第二列PARTITION是作业运行使用的队列名。
- 第三列NAME是作业名。
- 第四列USER是作业提交的账号名。
- 第五列ST是作业状态,R表示正常运行,PD表示在排队,CG表示正在退出,S是管理员暂时挂起。
- 第六列TIME是作业运行时间。
- 第七列NODES是作业使用的节点数。
- 第八列NODELIST(REASON)对于运行作业(R状态)显示作业使用的节点列表;对于排队作业(PD状态),显示排队的原因。
- squeue的 常用命令选项:
命令示例 功能 squeue -j 123456 查看作业号为123456的作业信息 squeue -u paratera 查看账号为 paratera的作业信息 squeue –p cn 查看提交到com队列的作业信息 squeue -w cn01 查看使用到comput1节点的作业信息
srun交互式提交作业
- srun [options] program命令属于交互式提交作业,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。
srun 命令示例:srun -p cn -w cn[01-02] -N 2 -n 4 -t 20 hostname
交互式提交hostname程序。如果不关心节点和时间限制,可简写为srun -N 2 -n 4 hostname
- -p cn指定提交作业到cn队列;
- -w cn[01-02] 指定使用节点cn[01-02];
- -N 2 指定使用2个节点;
- -n 4 指定进程数为4;
- -t 20 指定作业运行时间限制为20分钟。
-
srun 的一些常用命令选项:
参数选项 功能 -N 3 指定节点数为3 -n 20 指定进程数为20 -c 20 指定每个进程(任务)使用的CPU核为20 -p cn 指定提交作业到cn 队列 -w cn[01-02] 指定提交作业到cn01,cn02节点 -x cn[01-02] 排除cn01、cn02节点 -o out.log 指定标准输出到out.log文件 -e err.log 指定重定向错误输出到err.log文件 -J JOBNAME 指定作业名为JOBNAME -t 20 限制运行20分钟
sbatch后台提交作业
- sbatch一般情况下与srun一起提交作业到后台,需要将srun写到脚本中,再用sbatch 提交脚本。这种方式不受本地网络波动影响,提交作业后可以关闭本地电脑。sbatch命令没有屏幕输出,默认输出日志为提交目录下的slurm-xxx.out文件,可以使用tail -f slurm-xxx.out实时查看日志,其中xxx为作业号。
sbatch命令示例1(40个进程提交A.exe程序),编写脚本job1.sh,内容如下:
#!/bin/bash
srun -n 40 A.exe
然后在命令行执行sbatch -p com job1.sh 提交作业。脚本中的#!/bin/bash是bash脚本的固定格式。从脚本的形式可以看出,提交脚本是一个shell脚本,因此常用的shell脚本语法都可以使用。作业开始运行后,在提交目录会生成一个slurm-xxx.out日志文件,其中xxx表示作业号。
sbatch命令示例2(指定2个节点,4个进程,每个进程10个cpu核提交A.exe程序,限制运行60分钟):
编写脚本job2.sh,内容如下:
#!/bin/bash
#SBATCH -N 2
#SBATCH -n 4
#SBATCH -c 10
#SBATCH -t 60
srun -n 4 A.exe
然后在命令行执行sbatch -p com job2.sh就可以提交作业。其中#SBATCH注释行是slurm定义的作业执行方式说明,一些需要通过命令行指定的设置可以通过这些说明写在脚本里,避免了每次提交作业写很长的命令行。
sbatch命令示例3(单节点提交多任务),编写脚本job3.sh,内容如下:
#!/bin/bash
srun -n 5 A.exe &
srun -n 5 B.exe &
srun -n 5 C.exe &
srun -n 5 C.exe &
wait
然后在命令行执行sbatch -N 1 -p com job3.sh,这里是单节点同时提交4个任务,每个任务使用5个进程。这里需要5个任务全部执行完毕,作业才会退出。
sbatch 的一些常用命令选项基本与srun的相同,具体可以通过sbatch --help查看。
salloc分配模式作业提交
salloc命令用于申请节点资源,一般用法如下:
- 执行salloc -p com;
- 执行squeue 查看分配到的节点资源,比如分配到n001;
- 执行ssh comput1登陆到所分配的节点;
- 登陆节点后可以执行需要的提交命令或程序;
- 作业结束后,执行scancel JOBID释放分配模式作业的节点资源。
scancel取消已提交的作业
scancel 可以取消正在运行或排队的作业。
命令示例 | 功能 |
---|---|
scancel 123456 | 取消作业号为123456的作业 |
scancel -n test | 取消作业名为test的作业 |
scancel -p com | 取消提交到com队列的作业 |
scancel -t PENDING | 取消正在排队的作业 |
scancel -w comput1 | 取消运行在comput1节点上的作业 |
scancel的其他参数选项,可通过scancel --help查看
scontrol查看正在运行的作业信息
scontrol命令可以查看正在运行的作业详情,比如提交目录、提交脚本、使用核数情况等,对已退出的作业无效。
查看作业号为123456的作业详情:
scontrol show job 123456
scontrol 的其他参数选项,可通过scontrol --help查看。
sacct查看历史作业信息
sacct显示Slurm作业记帐日志或Slurm数据库中所有作业和作业步骤的记帐数据。可以查看历史作业的起止时间、结束状态、作业号、作业名、使用的节点数、节点列表、运行时间等。
- 使用Slurm调用的作业的记帐信息要么记录在作业记帐日志文件中,要么保存到Slurm数据库中。
- sacct命令以各种形式显示存储在作业记帐日志文件或Slurm数据库中的作业记帐数据,以供分析。
- sacct命令默认显示有关作业,作业步骤,状态和exitcode的信息。 您可以使用--format =选项定制输出以指定要显示的字段。对于root用户,sacct命令显示所有用户的作业统计数据,但有一些选项可以过滤输出以仅报告来自指定用户或组的作业。对于非root用户,sacct命令将作业统计数据的显示限制为默认情况下使用自己的用户标识符(UID)启动的作业。
- 可以使用--allusers, - user或--uid选项显示其他用户的数据。
示例:
sacct -u paratera -S 2018-07-01 -E now --field=jobid,partition,jobname,user,nnodes,nodelist,start,end,elapsed,state
- -u paratera是指查看paratera账号的历史作业,
- -S是开始查询时间,
- -E是截止查询时间,
- --format定义了输出的格式,jobid是指作业号,partition是指提交队列,user是指超算账号名,nnodes是节点数,nodelist是节点列表,start是开始运行时间,end是作业退出时间,elapsed是运行时间,state是作业结束状态。
- sacct --helpformat可以查看支持的输出格式。
sacct的其他参数选项可通过sacct --help查看
作业模版
#!/bin/bash
#SBATCH -p com 指定队列名称
#SBATCH -J test 指定作业名称
#SBATCH -N 2 指定要提交的节点数量
#SBATCH -n 8 指定要提交的总核数
#SBATCH -o test.o 指定标准输出文件名
#SBATCH -e test.e 指定错误输出文件名
srun -N 2 -n 8 -p com hostname 程序运行命令