1、NUIST HPC使用讲座, 作业提交刘建宇2015-05-05,!声明!,这里讨论的用户环境设置是基于目前(2014年)的NUIST HPC的配置上进行的相关的用法、设置方式等有一定的普遍性,也有本地局限性这里讨论的用法、设置方式,在不同的系统及配置下可能不适用这里讨论的用法、设置方式,可能有不全面或不足之处仅供参考,谨慎使用ftp:/202.195.238.13/Public/submit_job.pdf仅校内可访问,PBS作业脚本,PBS作业脚本含有PBS指令的脚本PBS指令用于申请资源、设置作业属性等放在注释行的位置,使用#PBS作为前缀#PBS option除-l和-W选项外,其他选
2、项后如果有多个指令,只有最后一个有效,PBS基本指令,#PBS -P project_no必需设置,项目号#PBS -q queue必须设置,队列名#PBS -l nodes=N:ppn=M #PBS -l select=N:ncpus=M:mpiprocs=P必须设置, N:节点数, M:每个节点核数,P:MPI任务数/节点#PBS -N jobname可选设置,作业名#PBS -S /bin/bash可选设置,指定PBS的Shell为bash#PBS -l walltime=hh:nn:mm可选设置,墙钟限制,不同队列,墙钟限制不一样,,PBS基本指令,#PBS -M meeartch可选
3、设置,作业报告发送电子邮件地址#PBS -m bea可选设置,作业报告发送状态b 开始,e 结束, a 中止#PBS -V可选设置,复制用户环境变量#PBS -o jobname.out可选设置,标准输出输出文件#PBS -e jobname.err可选设置,标准错误输出文件#PBS -j oe可选设置,合并标准输出与标准错误,注意事项,注释掉PBS指令在PBS指令前再加一个#PBS -l node=2:ppn=8PBS指令后不能跟有注释内容 #PBS -l node=2:ppn=8 #2个节点,8个MPI任务/节点#PBS -l node=2:ppn=8PBS指令中不能直接使用变量替换#PB
4、S -l node=$N:ppn=$MPBS作业脚本中不能含有不可见的ASCII字符ASCII码为0 31的字符ASCII码为126以上字符,注意事项,PBS作业脚本中不能有DOS格式的行终结符(CR/LF)通常在下面的情况中会包含有DOS格式的行终结符在Windows下编辑的文本文件在FTP上传时使用ASCII方式上传的文本文件转换CR/LF的方法dos2unix job_scripttr -d r job_script.new,注意事项,-l nodes=n:ppn=p为旧格式兼容性好对作业的控制有限-l select=n:ncpus=m:mpiprocs=p为新格式只适用于较新版本的PB
5、S可以对作业做更多的控制具体能做的控制依赖于PBS服务的设置计算节点没有开启超线程每个节点申请核数最好不要超过12个ppn、ncpus、 mpiprocs的设置,注意事项,对内存需求大的任务,在申请资源时可采用增加节点数,降低每个节点使用核数的方式来避免在单个节点上内存不足的问题,例如单个节点内存为24G,12个核总共需要使用168个核每个MPI任务需要使用4Gnodes=42:ppn=4在单个节点上的内存使用一般不要超过系统物理内存的90%为避免在属性为共享的节点上出现多个用户的任务争用内存互相干扰的情况,最好在申请资源时把结点设置为独占方式(机时统计将按节点算)#PBS -l select
6、=42:ncpus=4:mpiprocs=4#PBS -l place=scatter:excl如果希望节省资源而申请共享属性的节点,最好在申请时加上对内存的数量的申请,从而避免争夺内存的情况(机时统计将实际使用核数来算)#PBS -l select=42:ncpus=4:mpiprocs=4:mem=16gb#PBS -l place=scatter:free,PBS的环境变量,!PBS的变量只在PBS环境中才可以访问!,MPI作业,运行24个MPI任务,使用两个节点,每个节点个核#!/bin/bash #PBS -S /bin/bash#PBS -N helloworld#PBS -P P
7、123456789#PBS -q Regular#PBS -l nodes=2:ppn=12#PBS -l walltime=00:05:00cd $PBS_O_WORKDIRnprocs=cat $PBS_NODEFILE | wc -lmpirun -np $nprocs ./my_mpi_app.exe,OpenMP作业,只能在一个节点内运行, 最多只能运行12个OpenMP线程#!/bin/bash #PBS -S /bin/bash#PBS -N helloworld#PBS -P P123456789#PBS -q Regular#PBS -l nodes=1:ppn=12#PBS
8、 -l walltime=00:05:00nprocs=cat $PBS_NODEFILE | wc -lexport OMP_NUM_THREADS=$nprocscd $PBS_O_WORKDIR./my_openmp_app.exe,Hybrid作业,进程在同一个节点内使用OpenMP方式,跨节点用MPI方式#!/bin/bash#PBS -S /bin/bash#PBS -N helloworld#PBS -P P123456789#PBS -q queue Regular#PBS -l nodes=2:ppn=12#PBS -l walltime=00:05:00cd $PBS_O_
9、WORKDIR#每个节点运行4个MPI任务#每个MPI任务使用3个OpenMP线程export OMP_NUM_THREADS=3#OpenMPI#mpirun -np 8 -npernode 4 my_hybrid_app.exe# MVAPICH2#mpirun -np 8 -ppn 4 my_hybrid_app.exe,#每个节点运行1个MPI任务#每个MPI任务使用12个OpenMP线程export OMP_NUM_THREADS=12# OpenMPI#mpirun -np 2 -npernode 1 my_hybrid_app.exe# MVAPICH2#mpirun -np 2
10、 -ppn 1 my_hybrid_app.exe,串行作业,使用1个节点,个核运行4个任务#!/bin/bash #PBS -S /bin/bash#PBS -N helloworld#PBS -P P123456789#PBS -q queue Regular#PBS -l nodes=1:ppn=4#PBS -l walltime=00:05:00cd $PBS_O_WORKDIR./myapp1.exe &./myapp2.exe &./myapp3.exe &./myapp4.exe# 此处需要设计一段等待脚本保持# 在所有任务结束之前不退出,如果未等所有任务结束就退出脚本,未结束的
11、任务将失败或变成不可管理的孤儿进程,MPMD(multiple program, multiple data)作业,OpenMPI#!/bin/bash#PBS -S /bin/bash#PBS -N HelloWorld#PBS -P P123456789#PBS -q Regular#PBS -l nodes=2:ppn=12#PBS -l walltime=00:05:00cd $PBS_O_WORKDIRmpirun -app configfile,#configfile-np 8 exe1 arg1 arg2-np 4 exe2-np 12 exe3,MPMD(multiple pr
12、ogram, multiple data)作业,MVAPICH2#!/bin/bash#PBS -S /bin/bash #PBS -N HelloWorld#PBS -P P123456789#PBS -q Regular#PBS -l nodes=2:ppn=12#PBS -l walltime=00:05:00cd $PBS_O_WORKDIRmpirun -config configfile,#configfile-n 8 : exe1 arg1 arg2-n 4 : exe2-n 12 : exe3,关联作业,#!/bin/bash job1=qsub job1.sh job2=qs
13、ub -W depend=afterok:$job1 job2.sh job3=qsub -W depend=afterok:$job2 job3.sh job4=qsub -W depend=afterok:$job3 job4.sh exit 0 afterok: : 当指定的作业正常退出afternotok: :当指定的作业异常退出afterany: : 只要指定的作业结束不论正常或异常,作业脚本的额外设置,login shell CSH设置#PBS -S /bin/bash可避免出现以下信息(需.bashrc与.cshrc的设置一致)e file : tput: No value fo
14、r $TERM and no -T specifiedo file : Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.login shell KSH设置#PBS -S /bin/bash可避免出现以下信息(需.bashrc与.kshrc的设置一直)/etc/profile90: .5: .5: .46: shopt: not found No such file or directory如果需要在作业脚本中使用module命令,则需在作业脚本开头添加以下命令进行ksh的环境初
15、始化 . /etc/profile.d/modules.sh 使用qsub 提交KSH的脚本如果需要在作业脚本中使用module命令,则需在作业脚本开头添加以下命令进行ksh的环境初始化 . /etc/profile.d/modules.sh ,把当前脚本中用户环境变量复制到作业脚本运行环境中(1)在PBS作业脚本中设置#PBS V#!/bin/bashexport work_dir=/blah/blahexport data_dir=/blah/blah qsub my_job.sh. ,作业脚本的额外设置(续),my_job.sh#!/bin/bash#PBS -N check_env#P
16、BS -q Regular#PBS -l node=2:ppn=2#PBS -l walltime=00:00:05#PBS -P P000000000#PBS -Vecho work_dir=|$work_dir|echo data_dir=|$data_dir|,作业脚本的额外设置(续),把当前脚本中用户环境变量复制到作业脚本运行环境中(2)在命令行使用“-v variable_list”选项qsub -v work_dir=/blah/blah, data_dir=/blah/blah my_job.shqsub -v var1=A,B,C,D job.sh qsub -v a=10,
17、var2=A,B, c=20, HOME=/home/zzz job.sh,作业脚本的额外设置(续),在作业脚本中切换不同的运行环境安全的做法首先使用module purge清除所有环境设置信息接着使用module load先加载需要的编译器环境然后使用module load仅加载运行程序必要的环境例如,登录环境为Intel运行需要PGI环境则在作业脚本开头加入下面module命令# KSH Only# . /etc/profile.d/modules.shmodule purgemodule load pgimodule load ,作业管理,删除作业qdel job_idqdel qsel
18、ect -u $USER | cut -d. -f1查看指定用户的作业qstat -u $USER,作业管理,查看所有队列的情况qstat -q查看Economy队列排队的情况qstat -n | grep Eco | grep Q ,作业管理,查看Economy队列资源使用情况qstat -n | grep Eco | grep R | awk nodes+=$6 ; cores+=$7 END printf Total nodes = %d Total cores = % d n, nodes, cores ,作业管理,查看作业详细信息qstat -n job_idqstat -w job
19、_idqstat -f job_id查看历史作业信息qstat -x job_idqstat -fx job_idqstat -x -u $USERqstat -fx -u $USER,作业管理,获取作业IDqselect -u $USER | cut -d. -f1获取指定用户的所有作业IDqselect -s R -u $USER | cut -d. -f1获取指定用户运行中的作业IDqselect -s Q -u $USER | cut -d. -f1获取指定用户排队中的作业ID,一些建议,提交正式作业之前,最好做一个简单/快速测试,确保脚本没有问题选用较少的资源只申请一个节点较小的计算
20、规模只进行试运行积分很短的时间执行简单的命令根据队列使用情况选择提交的队列需要资源少、墙钟时间短的作业等待时间相对短,常见问题,/.ssh/authorized_keys损坏Killed by signal 15Permission denied, please try again.Permission denied, please try again.Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).如果不清楚如何修复,则请管理员帮忙修复,常见问题,作业脚本含有DOS格式的行终结符号-bash: /var/
21、spool/PBS/mom_priv/jobs/164168.log05.SC: /bin/bashM: bad interpreter: No such file or directory去除CR/LF的方法dos2unix job_scripttr -d r job_script.new,常见问题,已设置项目号,但还是提示项目号错误项目号没有设置对,或脚本中有错,作业调度服务无法解析脚本,常见问题,作业节点可能有问题/nuist/u/home/lanlr/.bashrc: line 9: module: command not found/nuist/u/home/lanlr/.bashr
22、c: line 10: module: command not found把作业号告诉管理员,请管理员帮忙检查节点,常见问题,作业节点可能有问题,或运行环境设置有问题loading shared libraries: xxxxx.so: cannot open shared object file: No such file or directory比较登录节点和计算节点$LD_LIBRARY_PATH的设置或把作业号告知管理员,请管理员帮忙检查节点,常见问题,/.ssh/known_hosts文件问题 WARNING: REMOTE HOST IDENTIFICATION HAS CHANG
23、ED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host isfe:65:ab:89:9a:23:34:5a:50:1e:05:d6:bf:ec:da:6
24、7.Please contact your system administrator.Add correct host key in /user/.ssh/known_hosts to get rid of this message.Offending key in /home/hahn/.ssh/known_hosts:42RSA host key for requin has changed and you have requested strict checking.Host key verification failed. 解决方式删除/.ssh/known_hosts 文件或在/.ssh/config中设置StrictHostKeyChecking noUserKnownHostsFile /dev/null,问题或建议,,