非root权限下使用qsub的方法及SGE系统qsub提交失败求助
关于SGE系统qsub提交失败及非root用户使用qsub的解决方案
一、qsub提交失败的问题分析与修正脚本
你提交失败最核心的问题是用错了作业调度系统的语法——你写的全是PBS/Torque系统的指令(#PBS开头),但SGE(Sun Grid Engine)根本不识别这套语法,这直接导致提交失败。除此之外还有几个小问题,我给你整理了修正后的脚本,并说明修改点:
修正后的提交脚本
#!/bin/bash #$ -l nodes=1:ppn=4 # 指定1个节点,4个核心(SGE标准指令前缀是#$) #$ -N pix2pix # 作业名称 #$ -o pix2pix.out # 标准输出重定向文件 #$ -e pix2pix.err # 错误输出重定向文件 #$ -q GPU_HIGH # 指定要提交的GPU队列 #$ -l h_rt=72:00:00 # SGE中设置运行时间的参数是h_rt,格式为hh:mm:ss,这里设72小时(根据集群限制调整) #$ -cwd # 自动切换到提交脚本时的工作目录,替代你原来的cd操作 # 激活conda tensorflow环境 source activate tensorflow # 执行训练脚本,换行排版更清晰 python /public/home/chensu/others/Guicai/pix2pix-tensorflow/pix2pix.py \ --mode train \ --output_dir /public/home/chensu/others/Guicai/pix2pix-tensorflow/face2face-model \ --max_epochs 2000 \ --input_dir /public/home/chensu/others/Guicai/pix2pix-tensorflow/你的完整输入目录路径
关键修改点说明
- 指令前缀替换:把所有
#PBS改成SGE标准的#$,这是最核心的修改,SGE只会识别#$开头的作业参数 - 运行时间参数:SGE中设置作业最长运行时间的参数是
h_rt,而不是PBS的walltime,并且格式必须是hh:mm:ss,你原来写的72000:00:00时间过长,远超绝大多数集群的限制,这里改成合理的72小时,你可以根据集群管理员给出的上限调整 - 工作目录设置:用
#$ -cwd可以自动切换到你提交脚本时所在的目录,比手动cd更可靠,如果你坚持手动cd,也要确保路径拼写正确(你原来的$PBS_0_WORKDIR不仅是PBS变量,还打错了字母,应该是O不是0,SGE对应变量是$SGE_O_WORKDIR) - 脚本可读性:把python命令拆成多行,避免一行太长,方便后续修改维护
二、非root用户使用qsub的问题
SGE系统默认就是允许普通用户(非root)使用qsub提交作业的,如果你用不了,大概率是以下几个原因:
- 账号未加入SGE用户列表:找集群管理员确认你的账号已经被添加到SGE的用户组中(管理员可以通过
qconf -su命令管理SGE用户) - 无队列提交权限:比如你指定的
GPU_HIGH队列,管理员可能限制了只有特定用户组能提交。你可以用qstat -g c查看队列的权限配置,或者直接找管理员给你开放对应队列的提交权限 - 脚本权限不足:确保你的提交脚本有可执行权限,执行
chmod +x 你的脚本文件名.sh即可添加执行权限 - 集群SGE服务异常:这种情况概率较低,如果前面几点都没问题,可以联系管理员检查SGE服务状态
内容的提问来源于stack exchange,提问作者Taufik_TF
相关产品推荐
相关产品推荐

