2011年9月1日木曜日

PBS (torque) の導入

バッチジョブを投入することが増えてきたので PBS を Ubuntu 11 に入れた。
まとめて投入した複数のバッチを順番に1本づつ実行させたい。投入ノードと計算ノードが同一かつ計算ノードが1つのみという単純構成。パッケージで入れたこともありすんなり出来たがメモしておく。
まずは pbs_server, pbs_scheduler, pbs_mom をインストール
apt-get install torque-server
apt-get install torque-mom
apt-get install torque-client
サーバノードの指定は vi /etc/torque/server_name (/var/spool/torque/server_priv/server_name)
ホスト名
計算ノードの指定は vi /var/spool/torque/server_priv/nodes
ホスト名 np=2
np=2 はこの計算ノードの最大同時実行数。
もし pbs_server が起動していなければ手動で pbs_server -t create を実行後に qmgr コマンドを実行し、以下を設定する
c q キュー名 queue_type=e
s s default_queue=キュー名
s s scheduling = t
s s acl_hosts = ホスト名

s q キュー名 started=t
s q キュー名 enabled=t
s q キュー名 max_running=1
pbs_server, pbs_sched, pbs_mom が動いていたら一旦全部 kill して、手動で起動してみる。
/etc/init.d/torque_server start
/etc/init.d/torque_sched start
/etc/init.d/torque_mom start

pbs_server, pbs_sched, pbs_mom が起動したのでジョブ投入してみる。

$ echo sleep 60 | qsub
1.ホスト名
qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.ホスト名                   STDIN            JC                 0 R キュー名
$ echo sleep 60 | qsub
2.ホスト名
$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.ホスト名                   STDIN            JC                 0 R キュー名
2.ホスト名                   STDIN            JC                 0 Q キュー名

このキューの max_running は 1 なので 2 本投入したうち 1 本だけが R (Run) で後から投入したジョブは実行待ちで Q (Queued) になっている。一人で使う分にはこれで申し分ない。


<2011/12/19 追記>

Syslog に pbs_server のエラーが大量に出ていた:

Dec 19 04:51:02 huge_host pbs_server: LOG_ERROR::is_request, bad attempt to connect from 10.0.2.15:1023 (address not trusted - check entry in server_priv/nodes)

/var/spool/torque/server_priv/nodes というファイルを新規に作って以下一行記述
hoge_host np=2 headnode

Daemon 再起動した。

5 件のコメント:

  1. CentOS6.5でですが、インストールしてみました。
    同じように、順番にジョブを投入することが目的です。
    管理ノードも計算ノードも同じサーバです。

    たしかにインストールは簡単でしたが、
    キューに投入されたものがQから変わりません。
    すごく初歩的な質問なのですが、問題解決は
    なにを参考にされましたか?

    返信削除
    返信
    1. 一つの例にすぎませんが、Queue の属性で enabed と started という項目があり、これらが true になっていないと Queued のままになります。

      現状を qmgr -c ' p s' で確認できます。手元の環境ですと、simple というキューがあり、以下のような出力になりました:
      --------------------------------------------------------------------------------
      #
      # Create queues and set their attributes.
      #
      #
      # Create and define queue simple
      #
      create queue simple
      set queue simple queue_type = Execution
      set queue simple max_running = 1
      set queue simple enabled = True
      set queue simple started = True
      #
      # Set server attributes.
      #
      set server scheduling = True
      set server acl_hosts = catchy
      set server default_queue = simple
      set server log_events = 511
      set server mail_from = adm
      set server scheduler_iteration = 600
      set server node_check_rate = 150
      set server tcp_timeout = 6
      set server next_job_number = 8
      --------------------------------------------------------------------------------

      設定の仕方は例えば http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/index.php?Torque などが参考になると思います。

      またログファイルを見ると何が起きているか判ることもあります。以下の3つのディレクトリに日付ごとのログファイルが生成されています:

      - /var/spool/torque/server_log/
      - /vara/spool/torque/sched_log/
      - /var/spool/torque/mom_log/

      pbs_server が qsub のリクエストを受け取り、pbs_sched が pbs_mom と連携してスケジューリングをして、最終的にpbs_mom で実行という流れだったと思います。

      削除
    2. ありがとうございます。うごきました。
      原因は不明です。この間にやったことといえば、ファイアーウォールを一時的に
      止めたことくらいです。
      今後、うまくいかないときは、ログを参照します。

      削除
    3. ともあれ動いてよかったです.

      削除
  2. /var/spool/torque/mom_logs
    に5分置きにLEVEL=0 のログが表示されています。
    /var/spool/torque/mom_priv/config
    の設定を変えて、pbs_momをrestartしてみたのですが
    5分置きの出力は変えられませんでした。

    Jugemさんの環境でも、ログは5分間隔でしょうか。

      prologalarmは既定値で300秒になっていますが、
      3600に変えてみたのですが、ここも違うようです。

      loglevelは0-7とあったので7にすると1分置きに
      より多くのログが出力されたので0に設定
      
      logevenはビットマスクとあったので255と0
      で試して、マニュアルにあった(fが一つ多い?)0x1fff
      も試しました。

    返信削除