Linux 服务器集群与PBS作业系统
服务器集群
基本介绍
当前的服务器集群主要包括一个登陆节点 mu01(管理节点)和 20 个计算节点 cu01,cu02,...,cu20,分成两个队列
- cu1 队列 cu01-10,cu15-20,每个节点有28核
- cu2 队列 cu11-14,每个节点有16核
登陆节点和计算节点关系如下图(实际只部署了一个登陆节点,同时作为唯一的管理节点)
集群中两个队列的节点分别使用了不同的Intel处理器,将其与一个笔记本上较新的AMD处理器的主要指标进行对比
处理器 | 总核心数 | 主频 | 三级缓存 | 架构 |
---|---|---|---|---|
Intel Xeon E5-2680 v4 | 28 核 | 2.4 GHz | 35 MB | Broadwell-EP (22nm) |
Intel Xeon E5-2667 v4 | 16 核 | 3.2 GHz | 25 MB | Broadwell-EP (22nm) |
AMD Ryzen 9 7940H | 8 核 | 4.0 GHz | 16 MB | Zen 4 (7nm) |
其中:
- 主频:指每秒处理器执行指令的速度,高主频有利于快速执行单线程任务和串行计算。
- 核心数:决定处理器同时执行任务的能力,多核心可加速并行计算和大规模数据处理。
- 三级缓存:高速缓存用于存储频繁访问的数据和指令,更大缓存可降低内存访问延迟,提升处理效率。
除此之外,每一个节点的内存是256GB(DDR4),作为对比,个人笔记本的出厂配置通常只有8G或16G内存。
使用下面的命令可以测试集群的状态 1
tentakel -g allm 'df -h|grep mu01'
使用方式
关于当前服务器集群的使用:
- 作为一个集群,所有节点之间会保持数据和用户信息的一致性:
- 例如各个节点的
/home/
目录(包括其子文件夹)(总的物理空间约 16T)映射的实际是同一个物理空间 - 还有
/opt/
目录(包括其子文件夹)(总的物理空间约 500G)也是同一物理空间(集群好像只保证这两个目录在所有节点上是一致的)
- 例如各个节点的
- 服务器中的软件安装:
- root 用户把多数人需要的公共软件安装在
/opt/
目录下 - 名为 username
的普通用户把个人需要的软件安装在
/home/username/
目录下
- root 用户把多数人需要的公共软件安装在
- 集群的登陆:
- 可以通过 ssh 远程登陆到管理节点 mu01,在校园网内需要使用 IP 地址 XXX.XX.XXX.XXX 登陆,在校园网外无法直接登陆
- 从管理节点 mu01 可以使用 ssh 跳转到其它计算节点,例如
ssh cu01
- 集群的使用:
- 使用scp/sftp或者其它方式将代码上传到管理节点
- 在管理节点上编译C/C++/Fortran代码得到二进制程序,对于Python/MATLAB则不需要编译
- 使用PBS作业系统提交耗时的计算任务,PBS作业系统会将计算任务分配给某个或某些空闲的计算节点
- 不要直接在管理节点上直接执行二进制程序或脚本,因为这只是在消耗管理节点的算力!应该让计算节点负责计算
有时我们需要进行一些轻量级的计算,但是并不想将其打包为PBS作业,可以手动切换到一个空闲的计算节点中操作,使用下面的脚本可以自动查找一个空闲节点并跳转过去
1
2
3
4
5
6
7
8
9
10
11
12
# get first free node
first_node=$(pbsnodes -l free | head -n 1 | awk '{print $1}')
# check free nodes
if [ -z "$first_node" ]; then
echo "No free nodes available."
else
echo "Connecting to $first_node..."
ssh "$first_node"
fi
软件版本
当前集群的管理节点系统为centos 7.9,计算节点系统为centos 7.3,两者之间有较大差距,可能导致问题。(甚至因为不能联网,在计算节点上的时间都是不准的)
系统自带的很多工具软件的版本偏低:
- bash 的版本只有 4.2.46,不支持使用 oh-my-bash 进行美化;
- git 的版本只有 1.8.3;
- cmake 的版本只有 2.8.12;
- tmux 的版本只有 1.8。
服务器上预装的编译器/计算软件也同样如此:
- GNU编译器:gcc/g++/gfortran,版本只有4.8.5,这个版本的g++刚刚完全支持C++11,但是默认使用c++98标准,需要加上
-std=c++11
选项才能使用C++11; - Intel编译器:icc/icpc/ifort,版本为15.0.1;
- MATLAB 的版本为2015b。
在服务器上使用这些软件时必须要考虑到对低版本的兼容性。 当前系统的版本已经低到不满足VSCode remote的要求,VSCode在不久后就不再对其支持。
修改密码
普通用户可以使用下面的命令修改自身密码(要先输入旧密码,再输入新密码并重复一遍新密码)
1
2
3
4# 从管理节点mu01跳转到计算节点cu01上(或者其它任意计算节点)
ssh cu01
# 修改密码
yppasswd
这和普通Linux系统使用的passwd
命令是不太一样的:因为需要修改
NIS 数据库中的密码保证在集群中所有节点上同步。
对于密码的设置,最好包括大小写字母,加上数字或特殊字符等,不要直接包含用户名生日等信息。
PBS 作业系统
基本介绍
为什么使用 PBS 作业系统? 因为默认情况下所有用户的地位平等,CPU 时间片会轮流分配给各个人的任务,这会影响了所有人的正常作业效率。 PBS系统会将各个用户提交的作业(作业通常是一些耗时的计算任务)组织为任务队列,依次执行,有效分配资源,避免相互之间的资源竞争。
下面是PBS作业系统的示意图
对于图中内容的解释:
PBS command
: 用于提交、监视、修改和删除作业。PBS_server
: 提供基本的批处理服务,例如接收/创建一个批处理作业,管理维护作业队列,管理输出结果等。PBS_mom
: 是一个守护进程,从PBS_server
接收作业后放入其自身的执行队列中等待执行。Scheduler
: 检查作业并分配资源,对用户提交的作业进行调度
PBS系统有多种实现,当前服务器使用的具体实现为 torque+maui。
状态查询
下面的这些命令只能在管理节点上执行。
使用下面的命令可以查询计算节点的状态
pbsnodes
查询所有节点的详细信息pbsnodes cu01
查询 cu01 节点的详细信息pbsnodes -l free
查询空闲节点列表pbsnodes -l all
查询所有节点列表
节点的常见状态如下:
free
代表空闲状态,可接受作业job-exclusive
代表正在满负荷运行作业,不可接受作业offline
代表掉线状态,不可接受作业down
代表关机或者故障,不可接受作业down,job-exclusive
代表关机或者故障,且关闭前有作业在进行
showq
查看所有作业(正在进行的作业,闲置的作业,受阻的作业),输出形如
1 | ACTIVE JOBS-------------------- |
使用方式
在PBS作业系统上提交作业需要使用PBS脚本,它本质上就是一个shell脚本:
- 以
#
开头的行被bash视作注释 - 以
#PBS
开头的行被PBS系统识别为运行参数 - 可以直接调用shell命令和系统命令(shell命令的规则比较奇怪,某些情况下甚至对空格是敏感的)
- 脚本可以使用
.sh
或.pbs
后缀 - 脚本无需使用
+x
赋予执行权限
关于PBS脚本编写的细节比较多,因此将其拆分出来单独整理,这里只提供一个简单的示例
1
2
3
4
5
6
7
8
9
10
11#PBS -N <jobname> # 作业的名称
#PBS -q cu2 # 指定使用某个作业队列,例如cu2
#PBS -l nodes=1:ppn=4 # 作业需要的计算资源: 1个节点,每个节点4个核心
#PBS -l walltime=24000:00:00 # 作业需要的计算时间: 申请24000小时的工作,不满足将无法继续进行计算
# 初始状态下处于用户家目录
# 这里切换到提交作业时的目录
cd $PBS_O_WORKDIR
# 启动计算程序或执行计算脚本
./a.out
在编写PBS脚本之后,使用方式如下:
qsub
提交作业:使用qsub XXX.pbs
或qsub XXX.sh
提交PBS作业,提交后会反馈一个作业号,例如20408.mu01
;qstat
查询作业状态:qstat
查询当前用户的所有作业的状态,如果有作业会以表格形式给出,如果没有则不会返回任何信息,在正常情况下,一个作业会依次经历如下状态Q
代表正在排队R
代表正在运行E
代表正在退出C
代表任务完成
qstat -f id
根据作业号查询作业的详细状态,注意已经完成的作业是查询不到的信息的;
qdel id
删除已提交的指定作业号的作业:一般用户只能删除自己提交的作业,但作业中已经产生的输出文件不会被删除。通常不需要手动删除作业,因为作业完成后就会被自动删除,同时也查询不到了。
补充
除了PBS脚本,我们还可以在qsub
命令中直接添加运行参数,命令中的运行参数优先级高于脚本中的运行参数。
PBS会实时监控作业的执行:如果作业遇到错误卡死的情况(例如MATLAB执行中遇到错误),会导致CPU空闲率过高等,如果这种异常状态超过一定的阈值,PBS会主动结束当前作业。
如果需要查看PBS历史作业的细节,可以进入下面的目录去查看日志(无需root权限)
1
cd /opt/tsce4/torque6/server_priv/accounting/