Switch to English page
Memo
Home > Memo > TORQUE安裝筆記

Home

Projects

Memo

Links

Contact







TORQUE安裝筆記:

  Torque Resource Manager是一套OpenSource的軟體,主要是用來控管叢集式電腦的工作排程,雖然是免費軟體但功能還算蠻完整的,可以設定不同的工作類別,分配不同的資源,還可以設定工作完成時的e-mail通知...等等,我所知道的幾座叢集式電腦上都有安裝這個。會重新安裝這套軟體(版本2.4.17,於RHEL4上)是因為各個節點間的版本不一樣,造成了一些奇奇怪怪的問題,像是什麼送工作就會讓伺服器服務停掉啦...等等的,安裝步驟如下,主要其實也是參考官方說明來操作:

  1. 首先到官方網站上去找你要的版本
    2.4.x官方已於2012 Aug.31停止對此版本的支援,2.4.17為最終版本
    2.5.x 未來只會新增小功能,官方表示這是最值得信賴的版本,推薦安裝2.5.12
    3.0.x 除了擁有2.5.x的所有功能以外,新增對「非統一記憶體存取」 (Non-Uniform Memory Access, NUMA)架構的支援,此版本不向下相容,官方已於2012 Dec.31停止對此版本的支援,3.0.6為最終版本
    4.x.x 版本4以後多是針對較為龐大的運算環境(PETA flops)所設計的,有興趣的人可以自行研究
    如果想要抓2.5.x以前的版本,要從Archived Versions Library找,下載後請先解壓縮。
  2. 執行安裝設定

    [root@HPC TORQUE]$ ./configure --prefix=/usr/TORQUE --with-scp \
                       --with-server-home=/var/spool/TORQUE
    checking ...(略)
    Building components: server=yes mom=yes clients=yes
    gui=no drmaa=no pam=no
    PBS Machine type: linux
    Remote copy: /usr/bin/scp -rpB
    PBS home: /var/spool/TORQUE
    Default server: HPC
    Unix Domain sockets: yes
    Tcl: disabled
    Tk: disabled

    Ready for 'make'.

    --with-scp是要求它使用scp來當複製檔案的工具,預設為rcp(建議使用scp)
    這裡的prefix是放主程式的位置,不加的話預設為/usr/local/bin、/usr/local/sbin...等位置
    而with-server-home是放設定檔的地方,預設值為/var/spool/torque
    為了搞清楚哪些是後來裝上去的我都會額外指定大寫的資料夾。

  3. 看到Ready for 'make'之後,請下make; make install來安裝。
  4. 若不打算以NFS共享已安裝的TORQUE到運算節點上的話,可以用以下指令製作給節點用的安裝檔:
    [root@HPC TORQUE]$ make packages
    Building ./torque-package-clients-linux-x86_64.sh ...
    Building ./torque-package-mom-linux-x86_64.sh ...
    ...(略)
    [root@HPC TORQUE]$ ls
    torque-package-clients-linux-x86_64.sh  torque-package-devel-linux-x86_64.sh
    torque-package-doc-linux-x86_64.sh      torque-package-mom-linux-x86_64.sh
    torque-package-server-linux-x86_64.sh
      節點上的安裝僅需torque-package-clients-linux-x86_64.sh、torque-package-mom-linux-x86_64.sh這兩個檔案複製過去後執行./torque-package-clients-linux-x86_64.sh --install即可完成節點上的安裝,路徑會跟server上使用的路徑一樣。

到此基本的安裝就完成了,不過接下來的設定才是最重要的部分!


主機上的設定

  1. 環境設定:
      如果不是裝在預設位置的話需要先把程式路徑設定在環境變數裡,不這麼做的話就有可能在執行時遇上pbs_server: not found之類的錯誤訊息,或是在呼叫相關的函式庫時出現error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory,請將以下設定寫入你的環境設定檔(我是寫在/etc/profile.d/torque.sh裡面):
    export PBS=/usr/TORQUE
    export PBS_SERVER_HOME=/var/spool/TORQUE
    export TORQUE=$PBS
    export PATH=$PBS/bin:$PBS/sbin:$PATH
    export MANPATH=$PBS/man:$MANPATH
    export LD_LIBRARY_PATH=$PBS/lib:$LD_LIBRARY_PATH
    然後source一下讓設定生效,再用which檢查設定是否正確
    [root@HPC ~]$ source /etc/profile.d/torque.sh
    [root@HPC ~]$ which pbs_server
    /usr/TORQUE/sbin/pbs_server
    之後檢查一下TORQUE Server的server_name有沒有設定對,這是程式幫你設定的,應該是沒問題
    [root@HPC ~]# cat /var/spool/TORQUE/server_name
    HPC
  2. 新增服務:
      這步驟可以略過沒關係,主要的目的是要讓管理比較便利,能經由service指令查詢運作狀態:
    [root@HPC torque-2.4.17]$ service pbs_server status
    pbs_server: unrecognized service
    [root@HPC torque-2.4.17]$ cp contrib/init.d/pbs_server /etc/init.d
    [root@HPC torque-2.4.17]$ cp contrib/init.d/pbs_mom /etc/init.d
    [root@HPC torque-2.4.17]$ cp contrib/init.d/pbs_sched /etc/init.d
    [root@HPC torque-2.4.17]$ chkconfig --add pbs_server
    [root@HPC torque-2.4.17]$ chkconfig --add pbs_mom
    [root@HPC torque-2.4.17]$ chkconfig --add pbs_sched
    [root@HPC torque-2.4.17]$ service pbs_server status
    pbs_server is not running
    要注意,在這個版本裡contrib/init.d/底下的script,路徑都是指向預設路徑,所以如果不是安裝到預設路徑下的人記得要先改一下檔案中PBS_DAEMON以及PBS_HOME的值。

  3. 將服務設定為開機啟動:
      開機啟動的設定有兩種方式,如果你是照著我上面寫的做到這裡的話,請用下面這個方法:
    # 在伺服器端,以下這兩個為必要服務
    [root@HPC torque-2.4.17]$ chkconfig pbs_server on
    [root@HPC torque-2.4.17]$ chkconfig pbs_sched on
    # 如果也要把伺服器端加入運算資源中,那也要啟動pbs_mom
    [root@HPC torque-2.4.17]$ chkconfig pbs_mom on
      若你主機上的TORQUE不是自己安裝的,請檢察/etc/裡有沒有pbs.conf或是torque.conf之類的設定檔,如果有的話請找找/etc/init.d下有沒有叫做pbs或torque的script,很有可能是靠這個設定檔來控制開機時要啟動什麼服務。
      我手邊的這台機器就是這樣,設定檔為/etc/torque.conf,而PBS init script就是/etc/init.d/torque(chkconfig中的服務也只有torque一個,但這個script裡面就有寫好關於那三個服務的操作控制,簡言之,用這個script就可以控制那三個服務)。在這種情況下請修改/etc/torque.conf:
    [root@HPC ~]$ cat /etc/torque.conf
    PBS_EXEC=/usr/TORQUE
    PBS_HOME=/var/spool/TORQUE
    # 1表示啟動,0則為不啟動
    PBS_START_SERVER=1
    # 同樣的,如果你的主機也要加入運算資源裡,那這個也要啟動
    PBS_START_MOM=1
    PBS_START_SCHED=1
    PBS_SERVER=HPC
    # 最後確定一下torque這個服務有設定成開機啟動:
    [root@HPC ~]$ chkconfig --list |grep "torque"
    torque    0:off   1:off    2:on    3:on    4:on    5:on    6:off
    # 這樣就OK了!

  4. 初始化資料庫:
    使用前要先初始化TORQUE的資料庫,有兩個方法選一個即可
    # 方法一:
    [root@HPC torque-2.4.17]$ pbs_server -t create
    # 方法二:用裡面的script,後面接你要讓它成為TORQUE管理者的帳號
    [root@HPC torque-2.4.17]$ ./torque.setup root
    initializing TORQUE (admin: root@HPC)
    Max open servers: 9
    Max open servers: 9
    初始化之後 就可以依需要設定伺服器了(例如walltime等參數)
    下qmgr -c "print server"可以看到現在的設定

  5. 伺服器設定
    其實資料庫初始化之後大概就可以直接使用了,這邊列出幾個可能會用上的設定:
    # 讓使用者可以查詢別人送的工作
    [root@HPC ~]$ qmgr -c "set server query_other_jobs = True"
    # 允許於運算節點上送工作(或者是去修改/etc/hosts.equiv這樣就不需要設定這參數)
    [root@HPC ~]$ qmgr -c "set server allow_node_submit = True"
    # 限制使用者所能送的工作數(這裡queue "batch"要依你設定的queue的名稱來改
    # 如果沒有做額外設定的話預設值就是batch)

    [root@HPC ~]$ qmgr -c "set queue batch max_user_queuable=20"
    # 更改預設的walltime(預設為一小時,以下將會把他設定為兩小時,用02:00:00也可以)
    [root@HPC ~]$ qmgr -c "set queue batch resources_default.walltime=7200"
    # 設定batch這個工作序列最多可以使用到幾顆運算核心
    [root@HPC ~]$ qmgr -c "set queue batch resources_max.ncpus = 30"

  6. 設定運算節點資訊:
      節點名稱及可用的CPU/GPU數量等資訊都是記錄在/var/spool/TORQUE/server_priv/nodes裡,格式如下:
    主機名 可用核心數
    node2 np=12
    node3 np=12
    設定完後重新啟動pbs_server,再用pbsnodes可以看當前運算節點的狀態。如果遇上:
    [root@HPC ~]$ pbsnodes
    pbsnodes: Server has no node list MSG=node list is empty - check 'server_priv/nodes' file
    那可能是忘了編寫nodes這個檔案,或者是沒有重新啟動伺服器所致。

  7. 啟動伺服器以及排程daemon
    如果你的伺服器到現在都還沒啟動的話,現在可以把他啟動了,靠service指令啟動或是直接執行都可以
    [root@HPC ~]$ pbs_server
    [root@HPC ~]$ pbs_sched
    # 確認一下伺服器的狀態
    [root@HPC ~]$ qmgr -c 'list server'
    Server HPC
          server_state = Active
          scheduling = True
          total_jobs = 0
          ....(略)
    # 確認一下工作列裡的工作可以開始進行了
    [root@HPC ~]$ gmqr -c 'list queue batch'
    Queue batch
          queue_type = Execution
          total_jobs = 0
          ...(略)
          enabled = True
          started = True
    OK!

運算節點上的設定

  用先前製作出來的package在運算節點上安裝好之後,跟設定伺服器一樣先依需求新增pbs_mom的服務,並把它設定為開機啟動,之後就只要再新增一個config檔就可以了:
[root@node1 ~]$ vi /var/spool/TORQUE/mom_priv/config
$pbsserver HPC
$logevent 255
# 其實只有上面兩行是必備的,下面這行是標明作業系統
opsys RHEL4
$usecp *:/home /home
$usecp *:/scra /scra
$usecp *:/scra2 /scra2
# 下面這行是只允許
$restricted HPC
# 最後啟動pbs_mom
[root@node1 ~]$ service pbs_mom start
Starting TORQUE Mom:                        [ OK ]
# 此時執行pbsnodes,如果設定正確應該就可以看到node上線了
[root@node1 ~]$ pbsnodes
node1
     state = free
     np = 12
     ntype = cluster
     status = ......叭啦叭啦一狗票(略)
  這config裡的usecp呢,是針對NFS檔案系統設定的,舉例來說我在登入節點有設定將/home、/scra、/scra2以NFS廣播出去,在運算節點上也都有掛載這些資料夾,那如果我在這幾個地方送工作的話,那些工作輸出以及錯誤輸出紀錄檔(*.o/*.e)時就沒有必要透過scp來做跨機器的複製,這裡的設定就是告訴TORQUE對於要送到這些地方的資料直接用一般的cp指令複製到該處即可。

測試
  測試時可以用隨便挑個指令或是執行檔來跑,要注意送工作不能用root:

[Cypresslin@HPC work]# vi TORQUEtest.sh
#!/bin/sh
#PBS -N TEST
#PBS -l nodes=HPC


echo "TORQUE TEST on "`hostname`
echo "Current working directory is " `pwd`
[root@HPC work]$ qsub TORQUEtest.sh
qsub: Bad UID for job execution MSG=root user root not allowed
[Cypresslin@HPC work]# qsub TORQUEtest.sh
1.HPC
[Cypresslin@HPC work]# qstat
Job id   Name   User         Time Use  S Queue
-------- ------ ------------ --------- - ------
1.HPC    TEST   Cypresslin   00:00:00  C batch
# 因為指令很短,所以一瞬間就執行完畢了,並會產生輸出與錯誤紀錄
# 狀態欄位(S)說明如下:
# R = running
# Q = queued
# H = held
# C = completed after having run
# E = exiting after having run
[Cypresslin@HPC work]# ls
TEST.o1 TEST.e1 TORQUEtest.sh
[Cypresslin@HPC work]# cat TEST.o1
TORQUE TEST on HPC
Current working directory is /work
# 看到訊息正確無誤就OK啦!稍後也可以指定不同node去測試,會出現對應的主機名稱
# 如果沒有出錯的話,紀錄stderr 的TEST.e1是不會有東西的

  如果在測試時發現送的工作一直處在Queue的狀態,可以用pbsnodes檢查看看node的狀態,如果一切正常再試試把防火牆暫時停掉(關於防火牆的設定可以看這篇說明

設定的備份
  可以看到在執行qmgr -c 'print server'或是qmgr -c 'print queue batch' 時, 出現的都是set server ...、set queue ...等執行命令句,所以只要把這些結果寫到某個檔案就可以把他們備份下來:
[root@HPC ~]$ qmgr -c 'print server' > TORQUE.server.bak
# 要把備份的設定叫回來也很簡單,只要:
[root@HPC ~]$ qmgr < TORQUE.server.bak
  如果在網路上搜尋,有時可能會看到有文章說到關於執行host $HOSTNAME時出現Host XXXX not found: 3(NXDOMAIN)這個錯誤訊息,從而導致TORQUE沒有辦法正確運作。在我手邊這台機器,執行該指令時的確會出現此錯誤訊息,但是排程工具仍舊能正常運作,所以我想這可能不是造成錯誤的主因。


參考資料:TORQUE Admin Manual
     [torqueusers] a question about $usecp




<-Memo

inserted by FC2 system