#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」と指定