刀片服务器 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>
,作业状态会转为已完成,已经完成的作业用户无法删除,系统会定期将已完成的任务清理出队列.