学校分配了一个小集群帐来优化应用,需要通过SGE作业管理系统提交作业到计算节点。第一次接触SGE,从网上选摘一些基本用法,并将自己使用过程中的所遇到的问题罗列出来并给出相应的解决方案。
一、基本用法
- SGE工作流程:
- 接受用户投放的任务
- 在任务运行以前,将任务放到一个存储区域
- 发送任务到一个执行设备,并监控任务的运行
- 运行结束写回结果并记录运行日志
- 常用的SGE命令:
方法一: qsub -cwd -l vf=*G -q all.q *.sh
方法二: qsub -cwd -S /bin/bash -l vf=*G -q all.q *.sh
-cwd 表示在当前路径下投递,sge的日志会输出到当前路径。
-l vf=*G 任务的预估内存,内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂。
-q 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
注: 方法一和方法二都可以投递任务到指定队列,但是方法一可能会输出警告信息“Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.” 这是因为SGE默认使用的是tcsh,而*.sh使用的是bash,所以应该在投递的时候指明命令解释器。若非要使用方法一的话,可以在脚本*.sh的开头加上#$ -S /bin/bash。
2. 投递任务到指定节点
qsub -cwd -l vf=*G -l h=node1 *.sh
qsub -cwd -l vf=*G -l h=node1 -P project -q all.q *.sh
-P 参数指明任务所属的项目
3. 查询任务
qstat -f 查看所有任务
qstat -j jobId 按任务id查看
qstat -u user 按用户查看
任务状态:
qw 表示等待状态
Eqw 投递任务出错
r 表示任务正在运行
dr 节点挂了之后,删除任务就会出现这个状态,只有节点重