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に投げるスクリプトに引数を渡したい.
スクリプトはこんな感じ
#!/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スクリプトに引数が渡り、計算が行われる
下記のジョブを投入すると
#!/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行で表示される。
qmgr -c set server scheduling = Trueで pbs_sched 側に流れる
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で標準出力を出しているのなら、順繰り回して探すスクリプトです
上記をちょいと改変して qtail と qhead を作ってみた
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」ファイルの変更箇所
[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### 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 } %{_mandir}/man*/*
+/etc/ld.so.conf.d/torque.conf
+/etc/profile.d/torque.csh
+/etc/profile.d/torque.shspecファイルが書き終わったら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でジョブを流してみたが、問題なく流れている
「qsub -l nodes=gpu-machine:ppn=1:gpus=1」と指定