「xxxx.local isn't declared to be NUMA, but mom is reporting」と表示されてpbsnodesに計算ノードが表示されない

NUMAのせいです。
epelで提供しているのはNUMA対応品で、それを外したパッケージを別途作ることをお勧めします。
一応、「/var/lib/torque/server_priv/nodes」ファイルで

cap01.sybyl.local np=8 num_node_boards=1

と「num_node_boards=1」を加えれば回避されそうなのだが、、特定ノードでの計算の際には下記のようにする必要が生じる

#!/bin/bash
#PBS -q batch
#PBS -l nodes=cap01.sybyl.local-0:ppn=4
#PBS -j oe
 :
 :

queue指定とnodesを数で示す分には問題ないですけど。

インターラクティブモード

qsub -I -q batch -l nodes=1:ppn=16 -X

と「-I」を指定するとインターラクティブモードになります。上記の場合はnodeを1つ、16coreを占有した
ターミナルが利用可能になります。
また「-X」を追加することで、GUIアプリも利用可能になります。

qsubに複数の引数を渡す

qsubに投げるスクリプトに引数を渡したい.
スクリプトはこんな感じ

#!/bin/sh
#PBS -q batch
#PBS -l nodes=1:ppn=1:gpus=1
cd $PBS_O_WORKDIR
relion_run_motioncorr --i ${IN}  ..... --gainref ${GAIN} ...

そうして、コマンドラインで

qsub motioncor2.sh -v IN=Micrographs/sq_1_10001.tif,GAIN=MicrographsCountRef.mrc

と打つとqsubスクリプトに引数が渡り、計算が行われる

pbs_sched のコントロール下で gpus を使ったとき、どのGPUがアサインされたかを知る

下記のジョブを投入すると

#!/bin/sh
#PBS -q batch
#PBS -l nodes=1:ppn=1:gpus=1
cat $PBS_GPUFILE

標準出力で "pbs.sybyl.local-gpu0"と返事を頂く。この最後の番号がGPUIDとして使えるみたい

留意

#PBS -l nodes=1:ppn=1:gpus=4

とすると、$PBS_GPUFILEの中身は

pbs.sybyl.local-gpu0
pbs.sybyl.local-gpu1
pbs.sybyl.local-gpu2
pbs.sybyl.local-gpu3

と4行で表示される。

mauiではなく pbs_sched でコントロールさせる

qmgr -c set server scheduling = True

で pbs_sched 側に流れる

npの値を自動的に定義する

qmgr -c set server auto_node_np = True

これで /var/lib/torque/server_priv/nodes が自動的に書き換わる

ジョブの標準出力をモニターする

qsubでジョブを投入すると、リソースの空いているノードにジョブが投入される。
その計算中の標準出力を見るにはどうしたらいいのか?

投入先のノードは qstat -n -1 <queue id> で見つけられる
そして標準出力は、ノードの /var/lib/torque/spoolに置かれるので、下記のような単純なスクリプトで行ける

#!/bin/bash
#
if [ $# -ne 1 ]; then
   echo "usage qcat <queue ID>" 1>&2
   exit 1
fi
#
host=$(qstat -n -1 $1 | tail -n1 | awk '{print $12}' | tr -s '+', '\n' | sort -u)
for i in $host
do
f=$(rsh $i ls /var/lib/torque/spool/$1.*.OU 2>/dev/null)
if [ $f ]; then
   rsh $i cat $f
   exit
fi
done

*rshで運用している場合の例です
本来なら xmllint を使って確実にすべきかもしれない
MPIで投げている場合、qstat -n -1 <queue id>で投げているノードが全て判明して、その中のrank0で標準出力を出しているのなら、順繰り回して探すスクリプトです

上記をちょいと改変して qtailqhead を作ってみた

計算ノードはユーザログイン禁止にする

rsh系なら各ノードのrshは許可するが、rloginは起動させない

[root@c1 ~]# systemctl list-unit-files
 :
rlogin.socket                                 disabled
rsh.socket                                    enabled
 :

sshは、

[root@c1 ~]# vi /etc/ssh/sshd_config
 :
AllowUsers supervisor root
[root@c1 ~]#

としておく

バージョン違いが混在

管理ノードと計算ノードでバージョンの違いがあっても問題ないのか調べてみた
管理サーバは4.2.10、計算ノードを最新の6.1.1とした
torque-6.1.1の調理方法はrpmbuildで作りました。ソースは開発元から取得して、その中に「torque.spec」ファイルがあります。ソースは~/rpmbuild/SOURCEへ、「torque.spec」ファイルは修正後~rpmbuild/SPECSへ配置します。
「torque.spec」ファイルの変更箇所

  • 25行目(drmaa,gui,libcpuset,munge,pam,readlineを「bcond_without」へ)
    [root@c ~]# diff -u rpmbuild/SPECS/torque.spec.orig rpmbuild/SPECS/torque.spec
    ### Features disabled by default
    %bcond_with    blcr
    %bcond_with    cpuset
    %bcond_with    cgroups
    %bcond_with    debug
    %bcond_without    drmaa
    %bcond_without    gui
    %bcond_without    libcpuset
    %bcond_with    memacct
    %bcond_without    munge
    %bcond_with    numa
    %bcond_without    pam
    %bcond_with    top
    %bcond_without    readline
  • 75行目(torque_homeを/var/spool/torqueから/var/lib/torqueへ)
    ### Macro variables
    %{!?torque_user:%global torque_user torque}
    %{!?torque_home:%global torque_home %{_var}/lib/%{name} }
    %{!?torque_server:%global torque_server localhost}
    %{!?sendmail_path:%global sendmail_path %{_sbindir}/sendmail }
  • 417行目(%files欄へファイルを追加)
      %{_mandir}/man*/*
     +/etc/ld.so.conf.d/torque.conf
     +/etc/profile.d/torque.csh
     +/etc/profile.d/torque.sh

specファイルが書き終わったらrebuild

[root@c ~]# rpmbuild -bb rpmbuild/SPECS/torque.spe

完成したrpmファイルを計算ノードに送って、

[root@n2 ~]# yum localinstall ./torque-6.1.1.1-1.adaptive.el7.centos.x86_64.rpm \
   ./torque-client-6.1.1.1-1.adaptive.el7.centos.x86_64.rpm

としてインストール。(事前に前のtorque環境は削除したほうがいいかも)
pbd_momを起動させ、管理サーバから見ていると

[root@pbs ~]# pbsnodes
n1.sybyl.local
     state = free
     np = 1
     properties = bio
     ntype = cluster
     status = rectime=1493821456,varattr=,jobs=,state=free,netload=7894397,gres=,loadave=0.00,ncpus=1,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
n2.sybyl.local
     state = free
     np = 2
     properties = chem
     ntype = cluster
     status = rectime=1493821483,version=6.1.1.1,macaddr=(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
n3.sybyl.local
     state = free
     np = 3
     properties = chem
     ntype = cluster
     status = rectime=1493821488,varattr=,jobs=,state=free,netload=8008005496,gres=,loadave=0.00,ncpus=1,(略
     mom_manager_port = 15003
 
[root@pbs ~]#

と「n2」のみversionが明記され、フォーマットが若干異なっている。
qsubでジョブを流してみたが、問題なく流れている


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-04-15 (月) 19:10:03 (10d)