@nicklhy
2016-04-26T03:07:34.000000Z
字数 2665
阅读 6208
集群服务器
集群服务器为了方便管理,所有用户都必须通过PBS作业系统(torque)提交任务的方式来运行自己的程序,而不是随意选择一个计算结点随意运行,对于PBS任务系统的详细说明请查看官方文档,这里只对其使用进行简要说明。
PBS任务系统的任务提交流程非常简单,大致如下:
1. 假设任务需要执行的命令(可执行文件、带参数的长命令等)为 python test.py;
2. 编写任务提交配置文件 pbs_test.job;
3. 通过qsub命令提交任务;
4. 通过qpeek、showq、qstat、qdel等命令查看、停止任务;
用户为了运行自己的程序必须准备一个用于提交任务的配置文件,假设用户的想要执行的命令为 :
python train_imagenet.py --gpus 5,6,7,8
该程序需要占用3号计算结点的4个CPU和4个GPU(PBS系统本身并不支持GPU动态调度,因此一般把GPU和CPU设置成相同数量),那么可以编写一个用于提交任务的配置文件 pbs_imagenet.job:
#!/bin/bash
#PBS -N work
#PBS -l nodes=1:compute-0-3:ppn=4,walltime=10:00:00
#PBS -j oe
cd $PBS_O_WORKDIR
nprocs=`cat $PBS_NODEFILE | wc -l`
cat $PBS_NODEFILE > NODEFILE
python train_imagenet.py --gpus 5,6,7,8
其中:
1. 第2行的"-N work1"表示任务名字,可以自己随意选择,在用qstat命令查看任务时会显示;
2. 第3行的compute-0-3表示3号计算结点(目前可选项为compute-0-1, compute-0-2, compute-0-3三个);
3. 第3行的ppn=4表示使用4个CPU;
4. 第3行的nodes=1表示使用1个计算结点;
5. 第3行的walltime=10:00:00表示该程序预计用时为10个小时,10个小时后即使程序未结束也会被强制终止;
6. 第4行的"-j oe"表示需要保存程序的标准输出(stdout)和标准错误(stderr);
7. 第6、7行为某些MPI程序需要用到的多机并行配置,普通程序可有可无;
8. 第8行为用户自己需要执行的程序,如果有多条命令,依次在后面添加即可;
下面对常用的几个命令进行介绍:
- qsub: 用来提交任务,例如qsub xxx.job,执行后会返回一个任务号,表示提交成功,否则会返回一些错误信息;
- showq: 显示当前集群正在运行、等待的所有任务及已占用的计算资源,注意,只能看到自己提交的任务列表,而不能看到其他用户提交的任务列表;
- qstat: 显示自己提交的任务列表
- qdel: 终止任务,例如qdel 1234,即为终止1234号任务的意思,同样,每个用户也只能终止自己提交的任务;
- qpeek: 用以查看某个任务的输出,加上-f参数可以实时查看任务输出,否则每次运行只显示部分输出,用法为qpeek -f 1234;
- fetch-gpu, fetch-cpu, fetch-io: 用于查看某个计算结点的资源使用情况,例如fetch-gpu -n 1,查看1号结点的GPU使用情况
把任务提交后,如何实时看到我的程序输出?
答:qpeek -f 1234, 1234为job ID
提交任务有什么限制?
答:目前每个用户最多提交10个任务,其中6个任务可以同时执行,另外4个保持等待知道正在执行的任务数小于6个,提交的10个任务都未结束前,不允许再提交任务。
提交任务有限制,那么每个用户使用的资源有限制吗?
答:目前考虑到严格的资源分配可能会造成很大的浪费,所以并没有按小组或者按用户严格的划分CPU、硬盘、GPU、内存的可用资源,请大家尽量规范自己的使用习惯,减少硬盘冗余数据,不要长时间占用过多计算资源(比如一个人一次性占用十几个GPU),让全组用户可以尽可能充分的使用集群服务器。
集群可以使用远程桌面(图形界面)吗?
答:集群的控制服务器只安装有一个性能很低的集显可以用来做图形显示(Tesla K80等计算显卡不能用来做图形显示),如果提供给大量用户远程连接使用,会造成网络拥塞,使用卡顿,影响他人使用,因此集群服务器并没有开启任何远程桌面类似的服务,请大家自行熟悉Linux的命令行环境,通过ssh远程连接工作;
对于普通CPU程序,可以在控制结点上进行简单调试,那么对于需要使用GPU的程序,是否同样有办法?
答:这个需求原生PBS任务系统是不支持的,但是考虑到没有这个功能可能让大家觉得集群使用起来很不方便,因此我们尝试添加了短时调试功能,下面之前的例子train_imagenet.py进行说明,假设我们想单步调试,那么我们的pbs_imagenet.job配置文件可以写为
#!/bin/bash
#PBS -N work
#PBS -l nodes=1:compute-0-3:ppn=4,walltime=10:00:00
#PBS -j oe
cd $PBS_O_WORKDIR
nprocs=`cat $PBS_NODEFILE | wc -l`
cat $PBS_NODEFILE > NODEFILE
python -m ipdb train_imagenet.py --gpus 5,6,7,8
之后使用qsub的debug模式进行提交,qsub -d pbs_imagenet.job,即可按照正常的单步调试方式继续了。
**注意**:该命令选项"-d"专门为调试使用,并不会真的把该程序提交到PBS任务系统,而是直接放到计算结点上执行,为了防止用户通过该功能绕过PBS作业系统,因此设置了超时选项,即用户每次使用该调试功能不能超过**30分钟**,30分钟后会自动终止。
如果我想安装一些自己使用的库,该怎么安装?
答:如果是python库,可以在用pip、easy_install安装的时候选择装在用户目录(~/.local),如果是自己源码编译安装,同样可以通过配置--prefix=/home/xxx/.local来实现。
如果提交的任务状态变成Error,无法删除怎么办?
答:qdel -p job_id。