用户工具

侧边栏

站点工具

您的足迹: • hpc

HPC使用基础

目前或者相当长一段时间我们最多只有一个计算节点,但是为了便于任务管理以及以后的扩展,我们用上了OpenPBS,详细的使用参考ALTAIR PBS Professional的指南。

登录

与服务器的连接,我使用PuTTY和Cygwin。PuTTY用于连接服务器,自动复制代码这样的功能很方便; 而和服务器间使用scp传文件则Cygwin很方便。

使用PuTTY

如果自己电脑是Windows系统,则可使用PuTTY连接:

  1. 安装装PuTTY之后打开PuTTY,默认是在Session页面
  2. Host Name下方填入服务器的(域名或者IP地址),Port下方填入端口,Connection type:处选SSH,这时候点Open就能连接了,但为了方便,可以先保存
  3. Saved Sessions下方填入一个名称(自己编一个),点Save就可以保存了,下次使用的时候可以双击这个名称就自己连接了
  4. 做更多的设置,点Connection,出现一个界面,将Seconds between keepalives后边填入60,这样就不会过会儿不用就自动断开了。填好之后要回到Session界面点保存才会保持这个设置。
  5. 点Connection下方的Data,在Auto-login username后边填入用户名,这样连接的时候就会自动填入用户名了。同样要回到Session界面进行保存。
  6. 还有其它的很多选项,一般来说保持默认就可以了。感兴趣的可以自己去探索,或者等到有新的需求或者遇到问题的时候再去看看别人怎么设置的。

PuTTY默认情况下选择文本则自动进行复制到剪贴板,单击鼠标右键则粘贴剪贴板里的内容,这非常方便。 此项功能在Window栏下边的Selection栏里边进行设置。对于复杂点的命令,可以在纯文本编辑器(如Notepad++)里编辑好之后复制粘贴到PuTTY连接的终端运行。通过NppToR可以用F9将Notepad++里选中的代码推送到PuTTY。
PuTTY结合Xming可以实现图形化界面显示(X11-Forwarding),这个在Connection下的SSH下的Auth的X11栏设置。 这个我基本不用,因为显示效果可能不那么理想,而且速度也可能不那么快。对于要查看生成的图片之类的,可以使用scp拷贝下来之后再查看。

使用SSH

如果自己的电脑是Linux系统、Mac系统、或者使用Windows的CMD、或者Windows系统下用Cygwin,则可以使用ssh命令连接。使用man ssh查看使用手册。基本命令如下:

ssh -p Port username@HostName

Cygwin的安装和使用

首先下载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命令是会要求输入密码,可以设置免密码登录,那样就不需要每次都输入密码了,就会比较方便了。

Cygwin里用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:~/

Cygwin里用rsync

使用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  ./

Windows CMD 的 scp、Linux Shell 的 scp、PuTTY套装里的PSCP

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

免密码登录

用PuTTY免密登录

  1. PuTTY套件中有个puttygen.exe,双击它就能打开PuTTY Key Generator窗口
  2. 下方的两个参数,Tye of key …保持默认的RSA,Number of bits…可以保持默认2048,我喜欢设大一点,比如8192。
  3. 然后点击Generate,根据提示把鼠标在窗口空白处随机移动,然后等待完成创建Key
  4. 在Key passphrase:后边输入密码,在Confirm passphrase:后边再次输入同样的密码,一定要设密码,且要记住,密码不宜太简单
  5. 点击Save private key保存Private key(私钥),这个私钥的使用时需要输入上一步设置的密码;
  6. 将Public key for pasting into OpenSSH authorized_Keys file:下方窗口里所有内容复制到登录节点的~/.ssh/authorized_keys文件中。
    1. 如果此文件不存在,则新建一个,权限设置为600,即
      chmod 600 ~/.ssh/authorized_keys
    2. 如果此文件已存在,则附加到文件中,也就是作为新的一行进行粘贴。
    3. 这个Public Key(公钥)可以通过点击Save public key保存,但是里边的内容直接复制粘贴到authorized_keys文件是不行的,复制粘贴到authorized_keys的是一行,以ssh-rsa开头,然后空格,接下来才是Key。
    4. 公钥可以通过使用PuTTY Key Generator Load私钥显示出来。
  7. 使用的时候,用PuTTY套件里的pageant.exe,双击打开Pageant Key List窗口,点击下方的Add Key,选择上边的保存的私钥文件,输入密码即可
  8. 然后试试用PuTTY链接登录节点,这回就不需要再输入密码了。只要电脑不关机,载入的私钥就一直有效。这样就大大减少了输入密码的次数。加载了Key之后,不要退出pageant.exe,这样才能继续免密登录。电脑关机重启之后需要再次运行pageant.exe并加载Key。
  9. 用户名也可以预先保存在PuTTY里:在PuTTY的Session栏目下选中已保存的session并点Load,如果未曾保存在填入相应的信息,然后转到Connetion栏目下的Data栏目,在Auto-login username后边填入自己的用户名,再回到Session栏目,点击Save。这样下回只需要双击保存的session就可以实现自动链接了。
  10. 最后在强调一下:一定要保护好自己的私钥(Private key),设置足够强度的密码

用Cygwin免密登录

  1. 在Cygwin终端,使用如下命令创建创建Key,这个key默认保存在~/.ssh目录下。这一步默认产生两个文件:一个私钥id_rsa, 一个公钥id_rsa.pub。为了方面使用,文件名及保持位置保持默认。执行过程中会提示输入passphrase(密码),一定要输入足够强度的密码
    ssh-keygen -t rsa -b 8192 -f id_rsa
  2. 公钥就一行,将这一行拷贝附加到集群登录节点的~/.ssh/authorized_keys文件中,如果没有则新建一个,新建则注意要改600。
  3. 在当前终端第一次使用ssh或scp之前,执行如下命令,输入上边设置的passphrase,就可以免密ssh和scp了:
    eval `ssh-agent` && ssh-add
  4. 可以将eval `ssh-agent` && ssh-add放到~/.bash_profile文件中,这样每次打开CygWin都自动执行这一命令,需要用到的时候输入passphrase,不需要用到的时候用Ctrl+c取消掉这个加载即可,这样就又方便了许多。

任务投递

首先链接到的是登录节点,登录节点可以做一些轻量级的操作,对于耗时比较长,资源需求比较多的任务,使用投递到计算节点运行。

脚本准备

首先要创建一个脚本,把你需要执行的代码放到这个脚本里,前边是一些参数,如下这个example_pbs_script.sh示例脚本:

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也可能会异常满了。在出现异常找不到原因的的时候也可以留意一下。

Interactive Job

互动任务等同于登录到计算节点去使用计算节点。使用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之后看看效果吧


本网页已被访问12062数;最后编辑时间: 2024/08/08 15:55


页面工具

Powered by DokuWiki | ©2018-8102 Hong Wang | 桂ICP备18010616号 | 桂公网安备 45010302002017号