刀片服务器 CPU 节点使用指北

查看可用资源与计算节点状态

在提交任务或者作业之前,务必检查一下各个节点的状态,例如资源是否充足,当前有多少在执行的任务等等.使用命令

pbsnodes -a

可以查看所有节点的状态,free 表示空闲.

提交任务

用户需要编写一个 PBS 脚本来完成作业提交的设置.PBS 脚本可以在本地编写完成后上传,也可以在服务器上编辑.注意脚本内容中不要包含中文字符,在 Windows 系统下编辑的时候,可以用 Notepad++,并另存为,将换行符设置为 Unix (LF) 模式.

编写 PBS 脚本

一个简单的 PBS 脚本的模板如下,注意这里的中文注释是方便大家理解,最后都要删掉的.

#!/bin/bash
#PBS -N <jobname>
### 在 X 个节点上申请 Y 个 CPU 核心
#PBS -l nodes=X:ppn=Y
### 可选值为 q1, q2, q3,根据用户所在的组别选择对应的队列
#PBS -q <队列名> 
### 合并标准错误输出和标准输出
#PBS -j oe 
### 切换路径
cd $PBS_O_WORKDIR
### 运行需要执行的脚本或者命令
#### matlab 脚本这样子运行
matlab -nodesktop -nodisplay -nosplash < <m 文件> > <matlab 输出日志文件>
### python 脚本可以这样子写
python <python 脚本文件名>

其中第一行是固定的,表示用 /bin/bash 来执行脚本.#PBS 开头的行用来设置 PBS 选项,比如使用的资源等等.每组只有 3 个节点,每个节点的最大 CPU 核心数量为 16,申请时不能超过最大值.在确定申请 CPU 核心数量之前,请先确定是否需要这些计算资源.如果程序本身的并行程度不高(由你的代码决定),申请过多的节点和 CPU 核心数量会造成资源的浪费,并且影响他人的使用.

建议申请的节点数为 1,且目前 MATLAB 不支持跨节点运行,CPU 核心数不超过 12.请在使用的时候估计自己任务的开销,适量申请计算资源,避免造成资源的浪费.

建议在 matlab 脚本的最后一行加上 exit 语句,确保脚本运行完毕之后退出 matlab.

PBS 脚本写好之后就可以使用 qsub 命令提交作业:

qsub example.pbs

提交作业会有输出,例如

42.mgmt.chess

其中 42 为本次作业的 Job ID,mgmt.chess 为提交作业的节点的主机名.

查看任务状态

提交作业之后,用户可以使用 qstat <Job ID> 查看任务状态,示例输出:

Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
145.mgmt                   example              test         36:58:58 R q2

其中,第一列是 Job ID,第二列是作业名称,第三列是提交的用户,第四列是作业运行时间,第五列是作业运行的状态(R: 运行中,C: 运行完成,Q:排队中).

使用命令 qstat -nr <Job ID> 可以看到作业是在哪个节点上运行的,假设用户的作业在节点 “node01” 上运行,则可以登录到该节点.使用 ssh node01 登录到节点 “node01”.对于多进程作业,可以使用 top 看到具体开了多少个进程;对于多线程作业,请使用 top -H 查看.如果发现自己的作业没有使用到实际使用到申请的 CPU 核心数,说明该作业申请了过多的计算资源,造成了资源浪费.建议修改代码,提升并行计算能力,或者删除作业,适当减少 PBS 脚本中申请的计算资源,合理地利用资源.

删除作业

删除正在运行的作业可以使用 qdel <Job ID>,作业状态会转为已完成,已经完成的作业用户无法删除,系统会定期将已完成的任务清理出队列.

Related Posts