kuroの覚え書き

96の個人的覚え書き

TORQUEでメモリリミットを設定する

中古サーバ主体のクラスタのため、メモリはあまり潤沢にあるとは言えない。(システムとしては1ノードあたり192GBまで乗せることができるが現状1ノードに12GBしか積んでない。26GBまでは増強予定だが。)
なので、無茶な計算をさせると一気にメモリを使い切ってスワップに入ってしまい、最悪クラッシュしてしまうので、ジョブごとにメモリ上限を設定しておきたいのだが。

SGE/UGEだと

#$ -l h_vmem=12G

のように-lオプションでスクリプトに書いておけばメモリ上限を設定できるはずなんだが、TORQUEで

#PBS -l mem=12G

としてもどうもちゃんと機能していないっぽい。

なにか情報が無いかと検索。日本語の情報は見つからないな。
http://www.clusterresources.com/pipermail/torqueusers/2011-December/013923.html

qmgr -c 'set queue large resources_default.pmem = 16gb'
qmgr -c 'set queue large resources_default.vmem = 16gb'

こんなふうにqueの設定として入れておくのが一つの手らしい。この場合、1コアあたりが使えるメモリ上限なので、うちの今のシステムだと12G/16core =768Mとなる?
計算ノードを兼ねているヘッドノードのみ64G/8core =8Gなので、ヘッドノードのみ使うqueを分けて設定しておくほうが良いな。
3ノードフルに使うときはメモリ上限を768M、ヘッドノードのみのときは8Gまで許容というふうに。


もう1点、ノードを使い分ける上で問題となるノードの指定がうまくできない。

#PBS -l nodes=HostA:ppn=8
#PBS -l nodes=1:ppn=8:HostA

どちらも

qsub: submit error (Job exceeds queue resource limits MSG=cannot locate feasible nodes (nodes file is empty, all systems are busy, or no nodes have the requested feature))

というエラーが出て受け付けてくれない。
そこで、というか別解として、ヘッド兼計算サーバと計算専用サーバの2グループを作って、グループ指定でやってみることにした。
ヘッドノードで

$ sudo nano /var/lib/torque/server_priv/nodes 

で、

    HostA np=8 A num_node_boards=1 numa_board_str=8
    HostB np=16 B num_node_boards=1 numa_board_str=16
    HostC np=16 B num_node_boards=1 numa_board_str=16

というふうにnp= の後ろにスペースを挟んでグループ名(A、B)を入れてpbs_serverを再起動

#PBS -l nodes=1:ppn=8:B

とするとグループBだけで動作する。A、B両方で計算させたいときは、これまで通り、なにもグループ指定しなければいい。
グループAは8Gまで使っていいけどグループBは768Mまでしか使わない〜っていうのを一緒に設定するのはちょっと無理かな。


参考
http://isotope.iis.u-tokyo.ac.jp/~kei/?plugin=attach&refer=IT%20memo%2Flinuxmemo4&openfile=103-Torque取扱説明.pdf