|||
最近想用R做点大活儿,可能得用超级计算机。
把我能接触的超级计算机研究了一下,试着用PBS提交了几次计算任务。中间产生了一些小问题,都一一解决了。现把心得共享。下面是依葫芦画瓢写的一个用于提交计算任务的脚本。PBS是Altair公司出品的一个任务管理系统,好像超级计算机上用得很普遍。比如下面这个脚本的名字叫“Rjob",使用”qsub Rjob"就可以提交计算任务了。
--------------------------------------------------------------------------------------------
#!/bin/bash
#PBS -P xc0
#PBS -l wd
#PBS -q normal
#PBS -l walltime=00:22:00,mem=1GB,jobfs=600mb,ncpus=6
# setenv OMP_NUM_THREADS $PBS_NCPUS
export OMP_NUM_THREADS=$PBS_NCPUS
module load R/3.1.1
R --vanilla < /home/652/nxh652/code/ploting_clst_rslt_NCI.R
-------------------------------------------------------------------------------------------
对上面的脚本,按照我的理解进行解释,如下:
第1行:声明shell的类型、及其在系统中的位置
第2行:项目号(告诉系统该计算任务属于哪个已注册的项目/课题)
第3行:wd 是指定任务提交的目录(当前文件夹)就是工作目录(working directory 缩写?)
第4行:-q 设定任务优先级,当前设定的优先级是normal
第5行:walltime 是墙上时间(不知是否任务没结束,时间一到就要把任务kill?);mem 是设定内存使用量;jobfs 预留空间(PBS_jobfs这个空间中的文件都是临时文件,任务结束即清空);ncpus 设定使用节点数(当然越高越快,但是不能超过机器提供的节点数/配额允许使用的节点数)。mem,jobsf,ncpus是有配额的,因项目/课题而不同么?(我不知道)
第6行:环境设定,这里设定的是OpenMP并行线程数(这个我解释不好,也许不对;欢迎明白人指教);$PBS_NCPUS 就是最大节点数。整句话意思是,要使用系统允许的最大并行线程数。这一行被我注释掉了,因为这一行的语法是针对csh而不是zhen对bash的。针对bash要用下面的命令行。
第7行:环境设定,针对bash
第8行:加载R;注意系统提供的R版本可能有好几个(module avail 查),自己指定要使用的版本,把版本号写在“/”后面。现在R最新版本已经是3.1.2了,可是超级计算机上安装的最新版本是3.1.1
第9行:以批处理方式运行R脚本。--vanilla参数告诉R不要加载启动文件信息,也不要向启动文件中保存任何信息。”<"就是管道符号,把后面的R脚本输送到这个环境来运行。我这R脚本的输出是画一个图,会自己形成一个文件的,所以不用再在此行设置输出了。
R脚本与我们平常普通计算机上写的一模一样,绝无二致。唯一需要注意的是,脚本里面的路径最好使用绝对路径,否则容易出错。虽然在PBS -l wd 这一句命令中,我已经设定working directory,但是似乎不管用(归根结底的原因还是我对整个系统理解不深所致),所以保险起见用绝对路径肯定没问题。
另一个潜在的容易出问题的地方。是我们的Rjob文件可能是在windows下面编辑、然后上传到超级计算机上面的,Rjob文件里面有一些肉眼看不见的格式符会导致脚本运行出错。可以用dos2unix命令把这些格式符”修理“掉。另外,我觉得用vim就不会产生这样的格式符,在windows下面也可以用的。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 02:15
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社