集群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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM