zoukankan      html  css  js  c++  java
  • 集群SGE作业调度系统

    0. 一些基本概念

    • 计算机集群:高性能集群(High Performance Computing,简称HPC)是一组松散或紧密连接在一起工作的计算机。由于这些计算机协同工作,在许多方面它们可以被视为单个系统。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。与网格计算机不同,计算机集群将每个节点设置为执行相同的任务,由软件控制和调度。

    关于集群与分布式的区别有一段话总结得很好:集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式,C/S架构也可以叫分布式。集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

    • 节点是集群中的控制器。它通过专有的管理集群网络连接到集群中的其他节点。每个集群均包含节点,也就是管理数据和执行维护任务的计算单元。

    1. 常见的几种资源管理和调度系统

    • SGE(Sun Grid Engine):Sun网格引擎是一种来自于SUN Microsystem的分布式资源管理和调度系统,它用来在基于UNIX的计算环境中优化软件和硬件资源的使用。SGE能用于查找资源池内的闲置资源并利用这些资源;它同样用于通常的一些事务中,例如管理和调度作业到可用资源中。

    • PBS(Portable Batch System):便携式批处理系统接受批处理作业(具有控制属性的shell脚本),保留和保护作业直到它开始运行。因为一个批处理作业是一个无需用户干预的,在计算机系统后台运行的程序,在批处理作业运行过程中,用户无法实时地得到作业运行结果,所以PBS只能在作业执行后,将作业结果返回给提交者。目前,PBS包含开源免费的OpenPBS、商业付费的PBS Pro、Torque三种分支。

    • Condor来自Wisconsin-Madison大学的研究项目。充分利用工作站的空闲时间是Condor的最显著特征。Condor管理的机群由网络中的工作站组成,工作站可以自愿加入或退出。Condor监测网络中所有工作站的状态,一旦某台计算机被认为空闲,便把它纳入到资源池中。在资源池中的工作站被用来执行作业。

    • LSF(Load Sharing Facility):负载共享设施是由加拿大平台计算公司研制与开发的,由Toronto大学开发的Utopia系统发展而来。在使用范围上,LSF不仅用于科学计算,也用于企业的事务处理。功能上,除了一般的作业管理特性外,它还在负载平衡、系统容错、检查点操作、进程迁移等方面作了很好的努力,并力图使之实用化。

    2. SGE常见指令

    2.1 提交任务

    qsub参数:

    $ qsub -help
    SGE 8.1.9
    usage: qsub [options]
       [-a date_time]                           request a start time
       [-ac context_list]                       add context variable(s)
       [-Ap fname]                              add a new parallel environment from file
       [-astnode node_shares_list]              add sharetree node(s)
       [-at thread_name]                        add/start qmaster thread
       [-A account_string]                      account string in accounting record
       [-b y[es]|n[o]]                          handle command as binary
       [-binding [env|pe|set] exp|lin|str]      binds job to processor cores
       [-c ckpt_selector]                       define type of checkpointing for job
       [-cwd]                                   use current working directory
       [-C directive_prefix]                    define command prefix for job script
       [-dc simple_context_list]                delete context variable(s)
       [-dul listname_list]                     delete userset list(s) completely
       [-e path_list]                           specify standard error stream path(s)
       [-h]                                     place user hold on job
       [-hard]                                  consider following requests "hard"
       [-he  y[es]|n[o]]                        enable/disable hard error handling
       [-help]                                  print this help
       [-hold_jid job_identifier_list]          define jobnet interdependencies
       [-hold_jid_ad job_identifier_list]       define jobnet array interdependencies
       [-i file_list]                           specify standard input stream file(s)
       [-j y[es]|n[o]]                          merge stdout and stderr stream of job
       [-js job_share]                          share tree or functional job share
       [-jsv jsv_url]                           job submission verification script to be used
       [-l resource_list]                       request the given resources
       [-M mail_list]                           notify these e-mail addresses
       [-m mail_options]                        define mail notification events
       [-masterq wc_queue_list]                 bind master task to queue(s)
       [-mattr obj_nm attr_nm val obj_id_list]  modify an attribute (or element in a sublist) of an object
       [-N name]                                specify job name
       [-notify]                                notify job before killing/suspending it
       [-now y[es]|n[o]]                        start job immediately or not at all
       [-o path_list]                           specify standard output stream path(s)
       [-ot tickets]                            set jobs override tickets
       [-P project_name]                        set jobs project
       [-p priority]                            define jobs relative priority
       [-pe wc_pe_name slot_range]              request slot range for parallel jobs
       [-q wc_queue_list]                       bind job to queue(s)
       [-r y[es]|n[o]]                          define job as (not) restartable
       [-sc context_list]                       set job context (replaces old context)
       [-shell y[es]|n[o]]                      start command with or without wrapping <loginshell> -c
       [-soft]                                  consider following requests as soft
       [-srqs [rqs_list]]                       show resource quota set(s)
       [-sync y[es]|n[o]]                       wait for job to end and return exit code
       [-S path_list]                           command interpreter to be used
       [-t task_id_range]                       create a job-array with these tasks
       [-v variable_list]                       export these environment variables
       [-verify]                                do not submit, just verify
       [-V]                                     export all environment variables
       [-wd working_directory]                  use working_directory
       [-@ file]                                read commandline input from file
       [{command|-} [command_args]]
    

    最常用参数:

    - cwd #使用当前工作目录
    - binding #将作业绑定到处理器核心
    - p #定义工作的相对优先级,-1023 到 1024 , 默认值0
    - P #定义项目名称,前提是存在该项目
    - q #将作业绑定到队列
    - l #请求给定的计算资,如-l arch=solaris64,h_vmem=750M,permas=1
    

    示例qsub -cwd -l vf=2g,p=1 -q queuename.q -P projectname -binding linear:2 test.sh

    qsub 
      -cwd 
      -l vf=2g,p=1  #vf内存简写,p线程数简写;
    #资源可分开写,可写全称,单位可大小写,如-l virtual_free=2G -l num_proc=1。
    #关于资源限制域可通过 qconf -sc命令查看
      -q queueName.q 
      -P ProjectName  
      -binding linear:2  #处理器核心数 linear
    test.sh
    

    2.2 查看任务

    qstat命令

    qstat -j jobid #某个任务详细信息
    qstat -u username #某用户的任务
    qstat -u * #所有用户任务
    qstat -q all.q -u *  #查看某个队列下所有任务
    qstat -q all.q@node1 -u *  #查看某个队列的某一节点下所有任务
    qstat -f  #查看用户自己在每个节点的任务情况,没啥用
    

    任务的状态:

    qw #等待状态
    hqw #任务挂起等待中,待依赖的任务完成后执行
    Eqw #投递任务出错
    r #任务正在运行
    s #暂时挂起
    dr #节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失
    
    

    2.3 删除任务

    qdel命令

    qdel jobid #可同时删除多个,如qdel jobid1 jodid2
    qdel -u username #删除某用户所有任务
    

    2.4 挂起/恢复任务

    qhold命令:挂起qw的任务

    qhold jobid
    qhold -u *
    
    qrls jobid #恢复
    

    qmod命令:挂起running中的任务

    qmod -sj jobid
    qmod -usj jobid #恢复
    

    如果未提交到SGE系统,直接运行的命令用kill -STOP pid 挂起,用kill -CONT pid恢复。

    2.5 更改任务属性

    qalter命令修改已提交但正处于暂挂状态的作业的属性
    参数和qsub一样。

    Ref:https://www.bbsmax.com/A/MAzADlxyd9/

  • 相关阅读:
    Bash's Big Day
    树链剖分求lca
    Contest1814
    启发式合并
    2019 Multi-University Training Contest 10
    图论题
    vijos-记数问题
    2018届研究生招生预推免(THU,HIT)经历分享
    数细胞-swust oj
    Bone Collector-HDU
  • 原文地址:https://www.cnblogs.com/jessepeng/p/13432542.html
Copyright © 2011-2022 走看看