#author("2019-04-15T10:10:03+00:00","default:sysosa","sysosa")
#author("2021-07-01T08:39:27+00:00","default:sysosa","sysosa")
***「xxxx.local isn't declared to be NUMA, but mom is reporting」と表示されてpbsnodesに計算ノードが表示されない [#z990690d]
NUMAのせいです。
epelで提供しているのはNUMA対応品で、それを外したパッケージを別途作ることをお勧めします。
一応、「/var/lib/torque/server_priv/nodes」ファイルで
#code(nonumber){{
cap01.sybyl.local np=8 num_node_boards=1
}}
と「num_node_boards=1」を加えれば回避されそうなのだが、、特定ノードでの計算の際には下記のようにする必要が生じる
#code(nonumber){{
#!/bin/bash
#PBS -q batch
#PBS -l nodes=cap01.sybyl.local-0:ppn=4
#PBS -j oe
 :
 :
}}
queue指定とnodesを数で示す分には問題ないですけど。


***インターラクティブモード [#b15343d0]
#code(nonumber){{
qsub -I -q batch -l nodes=1:ppn=16 -X
}}
と「&color(magenta){''-I''};」を指定するとインターラクティブモードになります。上記の場合はnodeを1つ、16coreを占有した
ターミナルが利用可能になります。
また「&color(darkgreen){''-X''};」を追加することで、GUIアプリも利用可能になります。




***qsubに複数の引数を渡す [#qb85940d]

qsubに投げるスクリプトに引数を渡したい.
スクリプトはこんな感じ
#code(nonumber){{
#!/bin/sh
#PBS -q batch
#PBS -l nodes=1:ppn=1:gpus=1
cd $PBS_O_WORKDIR
relion_run_motioncorr --i ${IN}  ..... --gainref ${GAIN} ...
}}
そうして、コマンドラインで
#code(nonumber){{
qsub motioncor2.sh -v IN=Micrographs/sq_1_10001.tif,GAIN=MicrographsCountRef.mrc
}}
と打つとqsubスクリプトに引数が渡り、計算が行われる

***pbs_sched のコントロール下で gpus を使ったとき、どのGPUがアサインされたかを知る [#n55c1600]
下記のジョブを投入すると
#code(nonumber){{
#!/bin/sh
#PBS -q batch
#PBS -l nodes=1:ppn=1:gpus=1
cat $PBS_GPUFILE
}}
標準出力で "pbs.sybyl.local-gpu0"と返事を頂く。この最後の番号がGPUIDとして使えるみたい

&color(white,blue){留意};
#code(nonumber){{
#PBS -l nodes=1:ppn=1:gpus=4
}}
とすると、$PBS_GPUFILEの中身は
#code(nonumber){{
pbs.sybyl.local-gpu0
pbs.sybyl.local-gpu1
pbs.sybyl.local-gpu2
pbs.sybyl.local-gpu3
}}
と4行で表示される。

***mauiではなく pbs_sched でコントロールさせる [#efb328e9]
#code(nonumber){{
qmgr -c set server scheduling = True
}}
で pbs_sched 側に流れる

***npの値を自動的に定義する [#l9744c2e]
#code(nonumber){{
qmgr -c set server auto_node_np = True
}}
これで /var/lib/torque/server_priv/nodes が自動的に書き換わる



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

投入先のノードは &color(magenta){qstat -n -1 <queue id>}; で見つけられる
そして標準出力は、ノードの &color(orangered){/var/lib/torque/spool};に置かれるので、下記のような単純なスクリプトで行ける
#code(nonumber){{
#!/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
}}
&color(red){*};&size(10){rshで運用している場合の例です};
&size(10){本来なら xmllint を使って確実にすべきかもしれない};
MPIで投げている場合、&color(magenta){qstat -n -1 <queue id>};で投げているノードが全て判明して、その中のrank0で標準出力を出しているのなら、順繰り回して探すスクリプトです

上記をちょいと改変して [[qtail>TORQUE/script#h813c792]] と [[qhead>TORQUE/script#l0d86897]] を作ってみた




***計算ノードはユーザログイン禁止にする [#n802fdb2]
rsh系なら各ノードのrshは許可するが、&color(crimson){rlogin};は起動させない
#code(nonumber){{
[root@c1 ~]# systemctl list-unit-files
 :
rlogin.socket                                 disabled
rsh.socket                                    enabled
 :
}}
sshは、
#code(nonumber){{
[root@c1 ~]# vi /etc/ssh/sshd_config
 :
AllowUsers supervisor root
[root@c1 ~]#
}}
としておく


***バージョン違いが混在 [#e6534d19]
管理ノードと計算ノードでバージョンの違いがあっても問題ないのか調べてみた
管理サーバは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」へ)
#code(nonumber){{
[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へ)
#code(nonumber){{
### 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欄へファイルを追加)
#code(nonumber){{
  %{_mandir}/man*/*
 +/etc/ld.so.conf.d/torque.conf
 +/etc/profile.d/torque.csh
 +/etc/profile.d/torque.sh
}}

specファイルが書き終わったらrebuild
#code(nonumber){{
[root@c ~]# rpmbuild -bb rpmbuild/SPECS/torque.spe
}}
完成したrpmファイルを計算ノードに送って、
#code(nonumber){{
[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を起動させ、管理サーバから見ていると

#code(nonumber){{
[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でジョブを流してみたが、問題なく流れている

***gpuを使う [#wd397a58]
「qsub -l nodes=gpu-machine:ppn=1:gpus=1」と指定


1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS