目前或者相当长一段时间我们最多只有一个计算节点,但是为了便于任务管理以及以后的扩展,我们用上了OpenPBS,详细的使用参考ALTAIR PBS Professional的指南。
如果自己电脑是Windows系统,则可使用PuTTY连接:
Session页面Host Name下方填入服务器的(域名或者IP地址),Port下方填入端口,Connection type:处选SSH,这时候点Open就能连接了,但为了方便,可以先保存Saved Sessions下方填入一个名称(自己编一个),点Save就可以保存了,下次使用的时候可以双击这个名称就自己连接了Connection,出现一个界面,将Seconds between keepalives后边填入60,这样就不会过会儿不用就自动断开了。填好之后要回到Session界面点保存才会保持这个设置。Connection下方的Data,在Auto-login username后边填入用户名,这样连接的时候就会自动填入用户名了。同样要回到Session界面进行保存。
PuTTY默认情况下选择文本则自动进行复制到剪贴板,单击鼠标右键则粘贴剪贴板里的内容,这非常方便。 此项功能在Window栏下边的Selection栏里边进行设置。对于复杂点的命令,可以在纯文本编辑器(如Notepad++)里编辑好之后复制粘贴到PuTTY连接的终端运行。通过NppToR可以用F9将Notepad++里选中的代码推送到PuTTY。
PuTTY结合Xming可以实现图形化界面显示(X11-Forwarding),这个在Connection下的SSH下的Auth的X11栏设置。 这个我基本不用,因为显示效果可能不那么理想,而且速度也可能不那么快。对于要查看生成的图片之类的,可以使用scp拷贝下来之后再查看。
如果自己的电脑是Linux系统、Mac系统、或者使用Windows的CMD、或者Windows系统下用Cygwin,则可以使用ssh命令连接。使用man ssh查看使用手册。基本命令如下:
ssh -p Port username@HostName
首先下载Cygwin安装程序,按照默认安装即可。为了方便使用,推荐安装chere包,同样使用安装程序,搜索得到Chere包并安装即可。安装之后,在Cygwin终端运行如下命令:
chere -i -t mintty -s bash
然后就可以再任意文件夹下右键选择“Bash Prompt Here”打开Cygwin了,这样要在当前文件夹下和服务器互传文件就会非常方便。
与服务器进行文件传递可以使用scp,使用man scp来查看相关的参数。基本用法和cp很相似。
比如下边是把 A 文件到服务器上自己HOME目录去:
scp -P PORT A username@server_IP:~/
其中PORT是服务器的端口,username是自己的用户名,server_IP是服务器的IP地址或域名。从服务器上下载文件则是变化一下服务器和本地文件或文件夹的位置,比如把服务器上自己HOME目录的B文件scp到自己电脑当前目录:
scp -P PORT username@server_IP:~/B ./
如果传递的是文件夹,则需要加上-r参数,上传C文件夹和下载D文件夹:
scp -r -P PORT C username@server_IP:~/ scp -r -P PORT username@server_IP:~/D ./
使用scp命令是会要求输入密码,可以设置免密码登录,那样就不需要每次都输入密码了,就会比较方便了。
对于Windows电脑,可以使用Cygwin的scp,打开Cygwin之后切换到自己电脑需要上传的文件所在的文件夹,比如下边是切换到D盘的X文件夹:
cd /cygdrive/d/X
我喜欢用Cygwin,可以设置好免密登录,使用chere包的右键Bash Prompt Here非常方便地调用。
另外,可以设置ssh config,这样不用每次都输入端口等信息,vi ~/.ssh/config在此config文件中添加如下内容:
Host XXXX
HostName server_IP
Port PORT
User username
其中XXXX是你自己编的一个名称,后边server_IP和PORT是服务器的IP地址和端口,username是用户名。设置好之后就能很方便的进行scp了,比如这样就能把A文件拷贝到服务器上:
scp A XXXX:~/
使用rsync可以实现断点续传,文件比较大的时候使用rsync更合理。比如下载XXXX服务器上~/D文件夹里的所有文件到本都当前目录下的D文件夹的命令如下:
rsync -P --rsh=ssh XXXX:~/D/* ./D/
这里可以设置一个alias以方便使用,把这个添加到~/.bash_profile文件中:
alias rscp="rsync -P --rsh=ssh"
这样就能方便地类似与scp一样使用了,比如把~/D文件夹及里边的内容拷贝下来,则使用-r参数:
rscp -r XXXX:~/D ./
Win+R打开运行,输入CMD,回车,就打开了CMD。
Linux Shell终端直接可用scp.
PuTTY套装里边有个pscp.exe文件,可以在Windows里的CMD里运行,可以将它添加到路径之后在CMD里使用。比如我的这个文件位于D:/Program/PuTTY/文件夹,那么我在CMD里通过如下命令把这个路径添加到PATH变量中:
setx PATH "%PATH%;D:/Program/PuTTY/"
重启CMD之后就能用pscp命令了,比如这样看看帮助信息:
pscp -h
RSA,Number of bits…可以保持默认2048,我喜欢设大一点,比如8192。~/.ssh/authorized_keys文件中。chmod 600 ~/.ssh/authorized_keys
用户名,再回到Session栏目,点击Save。这样下回只需要双击保存的session就可以实现自动链接了。~/.ssh目录下。这一步默认产生两个文件:一个私钥id_rsa, 一个公钥id_rsa.pub。为了方面使用,文件名及保持位置保持默认。执行过程中会提示输入passphrase(密码),一定要输入足够强度的密码 ssh-keygen -t rsa -b 8192 -f id_rsa
~/.ssh/authorized_keys文件中,如果没有则新建一个,新建则注意要改600。eval `ssh-agent` && ssh-add
eval `ssh-agent` && ssh-add放到~/.bash_profile文件中,这样每次打开CygWin都自动执行这一命令,需要用到的时候输入passphrase,不需要用到的时候用Ctrl+c取消掉这个加载即可,这样就又方便了许多。
首先链接到的是登录节点,登录节点可以做一些轻量级的操作,对于耗时比较长,资源需求比较多的任务,使用投递到计算节点运行。
首先要创建一个脚本,把你需要执行的代码放到这个脚本里,前边是一些参数,如下这个example_pbs_script.sh示例脚本:
#!/bin/sh #PBS -j oe #PBS -l walltime=1:00:00 #PBS -l ncpu=4,mem=1gb date sleep 60 date
这里:
#!/bin/sh指明了用/bin/sh来执行这个脚本。根据整个脚本的编程语言来选择。比如,如果后边的代码是R语言代码,那么这里就改成/usr/bin/Rscript这样的Rscript的路径。如果是别的编程语言,则相应的给出编译器的路径。
#PBS -j oe表示将输出(o=Output)和错误(e=Error)流合并(join)到一个文件,如果没有这个参数,那么任务完成后能够看到两个文件。
#PBS -l walltime=1:00:00表示请求1小时的时间,而#PBS -l ncpu=4,mem=1gb表示请求4个CPU和1Gb的内存。这些有助于PBS把任务分配到合适的节点去。-l后边接<resource>=<value>这样格式的参数,多个参数用半角逗号连接。
还可以添加更多的PBS参数,比如加一行#PBS -m abe则表示当任务失败(a=aborts)、开始(b=begins)、以及结束(e=ends)的时候发邮件,加一行#PBS -M wanghong.china@foxmail.com则指明邮件发到的邮箱。#PBS -N job_name把任务名设置为job_name。 #PBS -a date_time把任务名计划在date_time时间节点之后才运行,date_time格式为[[[[CC]YY]MM]DD]hhmm[.SS],比如你写0830,那就是此后最近的(当天或者次日)的08:30开始,你写150830.45那就是从当月的15日08:30:45后开始,以此类推,CC是年的前两位数字,YY是年的后两位数字。这个选项一般用不着。#PBS -o output_filename指定把输出写到output_filename文件,可以使用文件的路径。同理,#PBS -e error_filename指定把错误写到error_filename文件。 #PBS -q queue_name指定把任务投递到指定的叫queue_name的queue去。
这里指定的这些#PBS参数,也可以在qsub的时候再指定
后边从date开始就是需要执行的命令了,比如这里是先执行date命令查看时间,然后sleep 60秒,然后再看时间。这样,在这个脚本的输出信息的文件里,能看到两个相隔60s的时间。
在脚本里把各种参数设置好,直接qsub就好了,比如这里的例子
qsub example_pbs_script.sh
上边脚本中的#PBS开头的参数也可以放到qsub后边,在qsub的时候设置。比如:
qsub -l walltime=1:00:00 example_pbs_script.sh
这样如果时间超过了1个小时,那么,任务将被终止掉。 这个目前不要求必须设置,而是自己估计时间看看,太长时间没有运行完则自己找原因并kill掉。
务必要根据自己任务的需求设置好cpu数和内存的请求量,比如这里请求了2个线程以及1Gb内存:
qsub -l ncpus=2,mem=1gb example_pbs_script.sh
这个要设置合适,任务会预先占据这些资源。如果预占太多,那么将会造成浪费,预占满了就没法在执行新的任务了。如果预先设置得太少了,那么可能有太多的任务挤上去,后期的资源又不够,这样的话导致节点卡顿,也不好。因此对自己的任务所占用的内存要心里有数。对于CPU,一般根据使用到的软件的线程数设置,比如有的比对软件可以使用多线程。可以多线程运行的软件,一定要看好线程参数的设置,有的软件默认是多线程的,如果不设置好,最后拥挤了,就会让服务器变得非常慢。
还有更多的qsub的参数,使用man qsub命令查看更多可设置的参数。对于-l <resource list>中的resource list可以使用man pbs_resources命令查看更多的参数。
任务投递之后,用qstat看任务的情况,看看是否在运行,是否运行结束,以及运行过程中的一些数据。qstat可以看到自己所有的任务,如果对某个特定的任务(比如任务id为:job_id),这用qstat -f job_id查看正在运行的job_id的详情,可以看到任务运行的情况,如果任务还没有开始运行,能够看到为什么没有开始运行。比如如果请求的资源超过了的节点的最大限制,那么会提示“Can Never Run:”字样,这时候就需要做出调整。
可以专门查看资源的使用情况:
qstat -f job_id | grep "used"
如果想要删掉这个任务,则用qdel:
qdel job_id
有时候,可能需要调整任务的资源要求等,可以使用qalter命令来实现:
qalter -l ncpu=2 job_id
这里是把cpu的需求改为2。qalter只能对还没有开始运行的任务进行更改。 比如,投递的时候CPU数目需求设置太高,而实际上用不了那么多,改小一点,就可以使用这个命令。
遇到报错,有时候是由于硬盘满了,可能是运行任务中log文件太大,或者计算节点的o和e文件太大,没有拷贝回来。
遇到过一个问题,qstat命令得到报错如下:
Connection refused qstat: cannot connect to server xxxx (errno=111)
重启pbs失败,后来发现是/var/spool/pbs/sched_logs文件夹里边的log文件太大了,删掉之后启动pbs即可,原先还没有运行完成的任务也继续运行了。
另外计算节点上文件夹/var/spool/pbs/undelivered也可能会异常满了。在出现异常找不到原因的的时候也可以留意一下。
互动任务等同于登录到计算节点去使用计算节点。使用qsub -I命令实现。当然,要指明自己使用的CPU数等资源需求情况。
qsub -I -l ncpus=1
使用完成时候使用exit命令退出。
还可以设置最长使用时间,比如这里设置了10分钟,时间到了就自动退出:
qsub -I -l nodes=1:ppn=1,walltime=00:10:00
要让终端令行提示符显示得丰富多彩,可以在~/.bash_profile中,加如下一行:
PS1="\[\033[0;32m\]\D{%Y-%m-%d} \[\033[0;32m\]\t \[\033[0;31m\]\u\[\033[0;34m\]@\[\033[0;35m\]\h\[\033[0;34m\]:\[\033[00;36m\]\$PWD\[\033[0;33m\] \n$\[\033[0m\]"
加上之后source ~/.bash_profile之后看看效果吧
本网页已被访问12064数;最后编辑时间: 2024/08/08 15:55